MLIR
17.0.0git
|
Base class for AffineExpr visitors/walkers. More...
#include "mlir/IR/AffineExprVisitor.h"
Public Member Functions | |
RetTy | walkPostOrder (AffineExpr expr) |
RetTy | visit (AffineExpr expr) |
RetTy | visitAffineBinaryOpExpr (AffineBinaryOpExpr expr) |
RetTy | visitAddExpr (AffineBinaryOpExpr expr) |
RetTy | visitMulExpr (AffineBinaryOpExpr expr) |
RetTy | visitModExpr (AffineBinaryOpExpr expr) |
RetTy | visitFloorDivExpr (AffineBinaryOpExpr expr) |
RetTy | visitCeilDivExpr (AffineBinaryOpExpr expr) |
RetTy | visitConstantExpr (AffineConstantExpr expr) |
RetTy | visitDimExpr (AffineDimExpr expr) |
RetTy | visitSymbolExpr (AffineSymbolExpr expr) |
Base class for AffineExpr visitors/walkers.
AffineExpr visitors are used when you want to perform different actions for different kinds of AffineExprs without having to use lots of casts and a big switch instruction.
To define your own visitor, inherit from this class, specifying your new type for the 'SubClass' template parameter, and "override" visitXXX functions in your class. This class is defined in terms of statically resolved overloading, not virtual functions.
For example, here is a visitor that counts the number of for AffineDimExprs in an AffineExpr.
/// Declare the class. Note that we derive from AffineExprVisitor /// instantiated with our new subclasses_ type.
struct DimExprCounter : public AffineExprVisitor<DimExprCounter> { unsigned numDimExprs; DimExprCounter() : numDimExprs(0) {} void visitDimExpr(AffineDimExpr expr) { ++numDimExprs; } };
And this class would be used like this: DimExprCounter dec; dec.visit(affineExpr); numDimExprs = dec.numDimExprs;
AffineExprVisitor provides visit methods for the following binary affine op expressions: AffineBinaryAddOpExpr, AffineBinaryMulOpExpr, AffineBinaryModOpExpr, AffineBinaryFloorDivOpExpr, AffineBinaryCeilDivOpExpr. Note that default implementations of these methods will call the general AffineBinaryOpExpr method.
In addition, visit methods are provided for the following affine Note that if you don't implement visitXXX for some affine expression type, the visitXXX method for Instruction superclass will be invoked.
Note that this class is specifically designed as a template to avoid virtual function call overhead. Defining and using a AffineExprVisitor is just as efficient as having your own switch instruction over the instruction opcode.
Definition at line 69 of file AffineExprVisitor.h.
|
inline |
Definition at line 117 of file AffineExprVisitor.h.
References mlir::Add, mlir::AffineExpr::cast(), mlir::CeilDiv, mlir::Constant, mlir::DimId, mlir::FloorDiv, mlir::AffineExpr::getKind(), mlir::Mod, mlir::Mul, mlir::SymbolId, mlir::AffineExprVisitor< SubClass, RetTy >::visitAddExpr(), mlir::AffineExprVisitor< SubClass, RetTy >::visitCeilDivExpr(), mlir::AffineExprVisitor< SubClass, RetTy >::visitConstantExpr(), mlir::AffineExprVisitor< SubClass, RetTy >::visitDimExpr(), mlir::AffineExprVisitor< SubClass, RetTy >::visitFloorDivExpr(), mlir::AffineExprVisitor< SubClass, RetTy >::visitModExpr(), mlir::AffineExprVisitor< SubClass, RetTy >::visitMulExpr(), and mlir::AffineExprVisitor< SubClass, RetTy >::visitSymbolExpr().
|
inline |
Definition at line 165 of file AffineExprVisitor.h.
References mlir::AffineExprVisitor< SubClass, RetTy >::visitAffineBinaryOpExpr().
Referenced by mlir::AffineExprVisitor< SubClass, RetTy >::visit(), and mlir::AffineExprVisitor< SubClass, RetTy >::walkPostOrder().
|
inline |
Definition at line 164 of file AffineExprVisitor.h.
Referenced by mlir::AffineExprVisitor< SubClass, RetTy >::visitAddExpr(), mlir::AffineExprVisitor< SubClass, RetTy >::visitCeilDivExpr(), mlir::AffineExprVisitor< SubClass, RetTy >::visitFloorDivExpr(), mlir::AffineExprVisitor< SubClass, RetTy >::visitModExpr(), and mlir::AffineExprVisitor< SubClass, RetTy >::visitMulExpr().
|
inline |
Definition at line 177 of file AffineExprVisitor.h.
References mlir::AffineExprVisitor< SubClass, RetTy >::visitAffineBinaryOpExpr().
Referenced by mlir::AffineExprVisitor< SubClass, RetTy >::visit(), and mlir::AffineExprVisitor< SubClass, RetTy >::walkPostOrder().
|
inline |
Definition at line 180 of file AffineExprVisitor.h.
Referenced by mlir::AffineExprVisitor< SubClass, RetTy >::visit(), and mlir::AffineExprVisitor< SubClass, RetTy >::walkPostOrder().
|
inline |
Definition at line 181 of file AffineExprVisitor.h.
Referenced by mlir::AffineExprVisitor< SubClass, RetTy >::visit(), and mlir::AffineExprVisitor< SubClass, RetTy >::walkPostOrder().
|
inline |
Definition at line 174 of file AffineExprVisitor.h.
References mlir::AffineExprVisitor< SubClass, RetTy >::visitAffineBinaryOpExpr().
Referenced by mlir::AffineExprVisitor< SubClass, RetTy >::visit(), and mlir::AffineExprVisitor< SubClass, RetTy >::walkPostOrder().
|
inline |
Definition at line 171 of file AffineExprVisitor.h.
References mlir::AffineExprVisitor< SubClass, RetTy >::visitAffineBinaryOpExpr().
Referenced by mlir::AffineExprVisitor< SubClass, RetTy >::visit(), and mlir::AffineExprVisitor< SubClass, RetTy >::walkPostOrder().
|
inline |
Definition at line 168 of file AffineExprVisitor.h.
References mlir::AffineExprVisitor< SubClass, RetTy >::visitAffineBinaryOpExpr().
Referenced by mlir::AffineExprVisitor< SubClass, RetTy >::visit(), and mlir::AffineExprVisitor< SubClass, RetTy >::walkPostOrder().
|
inline |
Definition at line 182 of file AffineExprVisitor.h.
Referenced by mlir::AffineExprVisitor< SubClass, RetTy >::visit(), and mlir::AffineExprVisitor< SubClass, RetTy >::walkPostOrder().
|
inline |
Definition at line 75 of file AffineExprVisitor.h.
References mlir::Add, mlir::AffineExpr::cast(), mlir::CeilDiv, mlir::Constant, mlir::DimId, mlir::FloorDiv, mlir::AffineExpr::getKind(), mlir::Mod, mlir::Mul, mlir::SymbolId, mlir::AffineExprVisitor< SubClass, RetTy >::visitAddExpr(), mlir::AffineExprVisitor< SubClass, RetTy >::visitCeilDivExpr(), mlir::AffineExprVisitor< SubClass, RetTy >::visitConstantExpr(), mlir::AffineExprVisitor< SubClass, RetTy >::visitDimExpr(), mlir::AffineExprVisitor< SubClass, RetTy >::visitFloorDivExpr(), mlir::AffineExprVisitor< SubClass, RetTy >::visitModExpr(), mlir::AffineExprVisitor< SubClass, RetTy >::visitMulExpr(), and mlir::AffineExprVisitor< SubClass, RetTy >::visitSymbolExpr().
Referenced by canonicalizeMapExprAndTermOrder(), getBoundForExpr(), and mlir::simplifyAffineExpr().