Lines Matching refs:expr

23 MLIRContext *AffineExpr::getContext() const { return expr->context; }  in getContext()
25 AffineExprKind AffineExpr::getKind() const { return expr->kind; } in getKind()
35 void visitAffineBinaryOpExpr(AffineBinaryOpExpr expr) { callback(expr); } in walk()
36 void visitConstantExpr(AffineConstantExpr expr) { callback(expr); } in walk()
37 void visitDimExpr(AffineDimExpr expr) { callback(expr); } in walk()
38 void visitSymbolExpr(AffineSymbolExpr expr) { callback(expr); } in walk()
156 AffineExpr AffineExpr::replace(AffineExpr expr, AffineExpr replacement) const { in replace() argument
158 map.insert(std::make_pair(expr, replacement)); in replace()
177 auto expr = this->cast<AffineBinaryOpExpr>(); in isSymbolicOrConstant() local
178 return expr.getLHS().isSymbolicOrConstant() && in isSymbolicOrConstant()
179 expr.getRHS().isSymbolicOrConstant(); in isSymbolicOrConstant()
284 if (auto expr = this->dyn_cast<AffineBinaryOpExpr>()) { in isFunctionOfDim() local
285 return expr.getLHS().isFunctionOfDim(position) || in isFunctionOfDim()
286 expr.getRHS().isFunctionOfDim(position); in isFunctionOfDim()
295 if (auto expr = this->dyn_cast<AffineBinaryOpExpr>()) { in isFunctionOfSymbol() local
296 return expr.getLHS().isFunctionOfSymbol(position) || in isFunctionOfSymbol()
297 expr.getRHS().isFunctionOfSymbol(position); in isFunctionOfSymbol()
305 return static_cast<ImplType *>(expr)->lhs; in getLHS()
308 return static_cast<ImplType *>(expr)->rhs; in getRHS()
313 return static_cast<ImplType *>(expr)->position; in getPosition()
323 static bool isDivisibleBySymbol(AffineExpr expr, unsigned symbolPos, in isDivisibleBySymbol() argument
329 switch (expr.getKind()) { in isDivisibleBySymbol()
331 return expr.cast<AffineConstantExpr>().getValue() == 0; in isDivisibleBySymbol()
335 return (expr.cast<AffineSymbolExpr>().getPosition() == symbolPos); in isDivisibleBySymbol()
338 AffineBinaryOpExpr binaryExpr = expr.cast<AffineBinaryOpExpr>(); in isDivisibleBySymbol()
348 AffineBinaryOpExpr binaryExpr = expr.cast<AffineBinaryOpExpr>(); in isDivisibleBySymbol()
356 AffineBinaryOpExpr binaryExpr = expr.cast<AffineBinaryOpExpr>(); in isDivisibleBySymbol()
370 AffineBinaryOpExpr binaryExpr = expr.cast<AffineBinaryOpExpr>(); in isDivisibleBySymbol()
371 if (opKind != expr.getKind()) in isDivisibleBySymbol()
373 return isDivisibleBySymbol(binaryExpr.getLHS(), symbolPos, expr.getKind()); in isDivisibleBySymbol()
382 static AffineExpr symbolicDivide(AffineExpr expr, unsigned symbolPos, in symbolicDivide() argument
388 switch (expr.getKind()) { in symbolicDivide()
390 if (expr.cast<AffineConstantExpr>().getValue() != 0) in symbolicDivide()
392 return getAffineConstantExpr(0, expr.getContext()); in symbolicDivide()
396 return getAffineConstantExpr(1, expr.getContext()); in symbolicDivide()
399 AffineBinaryOpExpr binaryExpr = expr.cast<AffineBinaryOpExpr>(); in symbolicDivide()
401 expr.getKind(), symbolicDivide(binaryExpr.getLHS(), symbolPos, opKind), in symbolicDivide()
406 AffineBinaryOpExpr binaryExpr = expr.cast<AffineBinaryOpExpr>(); in symbolicDivide()
408 expr.getKind(), in symbolicDivide()
409 symbolicDivide(binaryExpr.getLHS(), symbolPos, expr.getKind()), in symbolicDivide()
410 symbolicDivide(binaryExpr.getRHS(), symbolPos, expr.getKind())); in symbolicDivide()
414 AffineBinaryOpExpr binaryExpr = expr.cast<AffineBinaryOpExpr>(); in symbolicDivide()
424 AffineBinaryOpExpr binaryExpr = expr.cast<AffineBinaryOpExpr>(); in symbolicDivide()
426 expr.getKind(), in symbolicDivide()
427 symbolicDivide(binaryExpr.getLHS(), symbolPos, expr.getKind()), in symbolicDivide()
439 static AffineExpr simplifySemiAffine(AffineExpr expr) { in simplifySemiAffine() argument
440 switch (expr.getKind()) { in simplifySemiAffine()
444 return expr; in simplifySemiAffine()
447 AffineBinaryOpExpr binaryExpr = expr.cast<AffineBinaryOpExpr>(); in simplifySemiAffine()
448 return getAffineBinaryOpExpr(expr.getKind(), in simplifySemiAffine()
460 AffineBinaryOpExpr binaryExpr = expr.cast<AffineBinaryOpExpr>(); in simplifySemiAffine()
466 return getAffineBinaryOpExpr(expr.getKind(), sLHS, sRHS); in simplifySemiAffine()
468 if (!isDivisibleBySymbol(binaryExpr.getLHS(), symbolPos, expr.getKind())) in simplifySemiAffine()
469 return getAffineBinaryOpExpr(expr.getKind(), sLHS, sRHS); in simplifySemiAffine()
470 if (expr.getKind() == AffineExprKind::Mod) in simplifySemiAffine()
471 return getAffineConstantExpr(0, expr.getContext()); in simplifySemiAffine()
472 return symbolicDivide(sLHS, symbolPos, expr.getKind()); in simplifySemiAffine()
496 return static_cast<ImplType *>(expr)->position; in getPosition()
507 return static_cast<ImplType *>(expr)->constant; in getValue()
881 raw_ostream &mlir::operator<<(raw_ostream &os, AffineExpr expr) { in operator <<() argument
882 expr.print(os); in operator <<()
900 auto expr = getAffineConstantExpr(0, context); in getAffineExprFromFlatForm() local
907 expr = expr + id * flatExprs[j]; in getAffineExprFromFlatForm()
916 expr = expr + term; in getAffineExprFromFlatForm()
922 expr = expr + constTerm; in getAffineExprFromFlatForm()
923 return expr; in getAffineExprFromFlatForm()
945 AffineExpr expr = getAffineConstantExpr(0, context); in getSemiAffineExprFromFlatForm() local
976 AffineExpr expr) { in getSemiAffineExprFromFlatForm() argument
983 indexToExprMap.insert({index, expr}); in getSemiAffineExprFromFlatForm()
1023 AffineExpr expr = it.value(); in getSemiAffineExprFromFlatForm() local
1026 AffineExpr lhs = expr.cast<AffineBinaryOpExpr>().getLHS(); in getSemiAffineExprFromFlatForm()
1027 AffineExpr rhs = expr.cast<AffineBinaryOpExpr>().getRHS(); in getSemiAffineExprFromFlatForm()
1042 expr); in getSemiAffineExprFromFlatForm()
1048 expr); in getSemiAffineExprFromFlatForm()
1059 addEntry(indexEntry, flatExprs[numDims + numSymbols + it.index()], expr); in getSemiAffineExprFromFlatForm()
1068 addEntry(indexEntry, flatExprs[numDims + numSymbols + it.index()], expr); in getSemiAffineExprFromFlatForm()
1080 expr = expr + indexToExprMap.lookup(index) * coefficients.lookup(index); in getSemiAffineExprFromFlatForm()
1091 expr = expr + term; in getSemiAffineExprFromFlatForm()
1097 expr = expr + constTerm; in getSemiAffineExprFromFlatForm()
1098 return expr; in getSemiAffineExprFromFlatForm()
1112 void SimpleAffineExprFlattener::visitMulExpr(AffineBinaryOpExpr expr) { in visitMulExpr() argument
1121 if (!expr.getRHS().isa<AffineConstantExpr>()) { in visitMulExpr()
1122 MLIRContext *context = expr.getContext(); in visitMulExpr()
1138 void SimpleAffineExprFlattener::visitAddExpr(AffineBinaryOpExpr expr) { in visitAddExpr() argument
1161 void SimpleAffineExprFlattener::visitModExpr(AffineBinaryOpExpr expr) { in visitModExpr() argument
1167 MLIRContext *context = expr.getContext(); in visitModExpr()
1172 if (!expr.getRHS().isa<AffineConstantExpr>()) { in visitModExpr()
1229 void SimpleAffineExprFlattener::visitCeilDivExpr(AffineBinaryOpExpr expr) { in visitCeilDivExpr() argument
1230 visitDivExpr(expr, /*isCeil=*/true); in visitCeilDivExpr()
1232 void SimpleAffineExprFlattener::visitFloorDivExpr(AffineBinaryOpExpr expr) { in visitFloorDivExpr() argument
1233 visitDivExpr(expr, /*isCeil=*/false); in visitFloorDivExpr()
1236 void SimpleAffineExprFlattener::visitDimExpr(AffineDimExpr expr) { in visitDimExpr() argument
1239 assert(expr.getPosition() < numDims && "Inconsistent number of dims"); in visitDimExpr()
1240 eq[getDimStartIndex() + expr.getPosition()] = 1; in visitDimExpr()
1243 void SimpleAffineExprFlattener::visitSymbolExpr(AffineSymbolExpr expr) { in visitSymbolExpr() argument
1246 assert(expr.getPosition() < numSymbols && "inconsistent number of symbols"); in visitSymbolExpr()
1247 eq[getSymbolStartIndex() + expr.getPosition()] = 1; in visitSymbolExpr()
1250 void SimpleAffineExprFlattener::visitConstantExpr(AffineConstantExpr expr) { in visitConstantExpr() argument
1253 eq[getConstantIndex()] = expr.getValue(); in visitConstantExpr()
1257 AffineExpr expr, SmallVectorImpl<int64_t> &result, in addLocalVariableSemiAffine() argument
1262 if ((loc = findLocalId(expr)) == -1) in addLocalVariableSemiAffine()
1263 addLocalIdSemiAffine(expr); in addLocalVariableSemiAffine()
1284 void SimpleAffineExprFlattener::visitDivExpr(AffineBinaryOpExpr expr, in visitDivExpr() argument
1288 MLIRContext *context = expr.getContext(); in visitDivExpr()
1296 if (!expr.getRHS().isa<AffineConstantExpr>()) { in visitDivExpr()
1389 AffineExpr mlir::simplifyAffineExpr(AffineExpr expr, unsigned numDims, in simplifyAffineExpr() argument
1392 if (!expr.isPureAffine()) in simplifyAffineExpr()
1393 expr = simplifySemiAffine(expr); in simplifyAffineExpr()
1396 flattener.walkPostOrder(expr); in simplifyAffineExpr()
1398 if (!expr.isPureAffine() && in simplifyAffineExpr()
1399 expr == getAffineExprFromFlatForm(flattenedExpr, numDims, numSymbols, in simplifyAffineExpr()
1401 expr.getContext())) in simplifyAffineExpr()
1402 return expr; in simplifyAffineExpr()
1404 expr.isPureAffine() in simplifyAffineExpr()
1406 flattener.localExprs, expr.getContext()) in simplifyAffineExpr()
1409 expr.getContext()); in simplifyAffineExpr()