13 #ifndef MLIR_IR_AFFINE_EXPR_VISITOR_H 14 #define MLIR_IR_AFFINE_EXPR_VISITOR_H 74 static_assert(std::is_base_of<AffineExprVisitor, SubClass>::value,
75 "Must instantiate with a derived type of AffineExprVisitor");
79 walkOperandsPostOrder(binOpExpr);
80 return static_cast<SubClass *
>(
this)->
visitAddExpr(binOpExpr);
84 walkOperandsPostOrder(binOpExpr);
85 return static_cast<SubClass *
>(
this)->
visitMulExpr(binOpExpr);
89 walkOperandsPostOrder(binOpExpr);
90 return static_cast<SubClass *
>(
this)->
visitModExpr(binOpExpr);
94 walkOperandsPostOrder(binOpExpr);
99 walkOperandsPostOrder(binOpExpr);
116 static_assert(std::is_base_of<AffineExprVisitor, SubClass>::value,
117 "Must instantiate with a derived type of AffineExprVisitor");
121 return static_cast<SubClass *
>(
this)->
visitAddExpr(binOpExpr);
125 return static_cast<SubClass *
>(
this)->
visitMulExpr(binOpExpr);
129 return static_cast<SubClass *
>(
this)->
visitModExpr(binOpExpr);
149 llvm_unreachable(
"Unknown AffineExpr");
314 inline unsigned getNumCols()
const {
315 return numDims + numSymbols + numLocals + 1;
317 inline unsigned getConstantIndex()
const {
return getNumCols() - 1; }
318 inline unsigned getLocalVarStartIndex()
const {
return numDims + numSymbols; }
319 inline unsigned getSymbolStartIndex()
const {
return numDims; }
320 inline unsigned getDimStartIndex()
const {
return 0; }
325 #endif // MLIR_IR_AFFINE_EXPR_VISITOR_H Definition: AffineExpr.h:168
Definition: InferTypeOpInterface.cpp:20
Definition: AffineExprVisitor.h:246
RetTy walkPostOrder(AffineExpr expr)
Definition: AffineExprVisitor.h:73
unsigned numDims
Definition: AffineExprVisitor.h:256
An integer constant appearing in affine expression.
Definition: AffineExpr.h:193
void visitMulExpr(AffineBinaryOpExpr expr)
Definition: AffineExprVisitor.h:166
AffineExpr getRHS() const
Definition: AffineExpr.cpp:232
Definition: AffineExprVisitor.h:67
void visitSymbolExpr(AffineSymbolExpr expr)
Definition: AffineExprVisitor.h:180
void visitDimExpr(AffineDimExpr expr)
Definition: AffineExprVisitor.h:179
void visitFloorDivExpr(AffineBinaryOpExpr expr)
Definition: AffineExprVisitor.h:172
AffineExpr getLHS() const
Definition: AffineExpr.cpp:229
void visitModExpr(AffineBinaryOpExpr expr)
Definition: AffineExprVisitor.h:169
void visitConstantExpr(AffineConstantExpr expr)
Definition: AffineExprVisitor.h:178
Definition: AffineExpr.h:66
RHS of mul is always a constant or a symbolic expression.
void visitAffineBinaryOpExpr(AffineBinaryOpExpr expr)
Definition: AffineExprVisitor.h:162
U cast() const
Definition: AffineExpr.h:247
RHS of floordiv is always a constant or a symbolic expression.
RHS of ceildiv is always a constant or a symbolic expression.
unsigned numLocals
Definition: AffineExprVisitor.h:260
RetTy visit(AffineExpr expr)
Definition: AffineExprVisitor.h:115
AffineExprKind getKind() const
Return the classification for this type.
Definition: AffineExpr.cpp:23
A dimensional identifier appearing in an affine expression.
Definition: AffineExpr.h:177
void visitAddExpr(AffineBinaryOpExpr expr)
Definition: AffineExprVisitor.h:163
unsigned numSymbols
Definition: AffineExprVisitor.h:257
std::vector< SmallVector< int64_t, 8 > > operandExprStack
Definition: AffineExprVisitor.h:254
void visitCeilDivExpr(AffineBinaryOpExpr expr)
Definition: AffineExprVisitor.h:175
A symbolic identifier appearing in an affine expression.
Definition: AffineExpr.h:185
SmallVector< AffineExpr, 4 > localExprs
Definition: AffineExprVisitor.h:269