25 #ifndef TVM_TIR_EXPR_FUNCTOR_H_ 26 #define TVM_TIR_EXPR_FUNCTOR_H_ 74 template <
typename FType>
78 #define EXPR_FUNCTOR_DEFAULT \ 79 { return VisitExprDefault_(op, std::forward<Args>(args)...); } 81 #define IR_EXPR_FUNCTOR_DISPATCH(OP) \ 82 vtable.template set_dispatch<OP>([](const ObjectRef& n, TSelf* self, Args... args) { \ 83 return self->VisitExpr_(static_cast<const OP*>(n.get()), std::forward<Args>(args)...); \ 86 template <
typename R,
typename... Args>
104 return VisitExpr(n, std::forward<Args>(args)...);
113 static FType vtable = InitVTable();
114 return vtable(n,
this, std::forward<Args>(args)...);
119 return VisitExpr_(static_cast<const VarNode*>(op), std::forward<Args>(args)...);
155 LOG(FATAL) <<
"Do not have a default for " << op->
GetTypeKey();
161 static FType InitVTable() {
203 #undef IR_EXPR_FUNCTOR_DISPATCH 204 #undef EXPR_FUNCTOR_DEFAULT 211 using ExprFunctor::operator();
214 using ExprFunctor::VisitExpr;
216 void VisitExpr_(
const VarNode* op)
override;
218 void VisitExpr_(
const LoadNode* op)
override;
221 void VisitExpr_(
const LetNode* op)
override;
222 void VisitExpr_(
const CallNode* op)
override;
223 void VisitExpr_(
const AddNode* op)
override;
224 void VisitExpr_(
const SubNode* op)
override;
225 void VisitExpr_(
const MulNode* op)
override;
226 void VisitExpr_(
const DivNode* op)
override;
227 void VisitExpr_(
const ModNode* op)
override;
230 void VisitExpr_(
const MinNode* op)
override;
231 void VisitExpr_(
const MaxNode* op)
override;
232 void VisitExpr_(
const EQNode* op)
override;
233 void VisitExpr_(
const NENode* op)
override;
234 void VisitExpr_(
const LTNode* op)
override;
235 void VisitExpr_(
const LENode* op)
override;
236 void VisitExpr_(
const GTNode* op)
override;
237 void VisitExpr_(
const GENode* op)
override;
238 void VisitExpr_(
const AndNode* op)
override;
239 void VisitExpr_(
const OrNode* op)
override;
240 void VisitExpr_(
const ReduceNode* op)
override;
241 void VisitExpr_(
const CastNode* op)
override;
242 void VisitExpr_(
const NotNode* op)
override;
243 void VisitExpr_(
const SelectNode* op)
override;
244 void VisitExpr_(
const RampNode* op)
override;
247 void VisitExpr_(
const IntImmNode* op)
override;
250 void VisitExpr_(
const AnyNode* op)
override;
258 using ExprFunctor::operator();
261 using ExprFunctor::VisitExpr;
302 #endif // TVM_TIR_EXPR_FUNCTOR_H_ virtual R VisitExpr_(const MinNode *op, Args... args)
Definition: expr_functor.h:133
Let binding. Bind var to value then evaluate body.
Definition: expr.h:864
A dynamically dispatched functor on the type of the first argument.
Definition: functor.h:64
virtual R VisitExpr_(const IntImmNode *op, Args... args)
Definition: expr_functor.h:150
virtual R VisitExpr_(const OrNode *op, Args... args)
Definition: expr_functor.h:142
virtual R VisitExpr_(const GENode *op, Args... args)
Definition: expr_functor.h:140
virtual R VisitExpr_(const BroadcastNode *op, Args... args)
Definition: expr_functor.h:148
virtual R VisitExpr_(const NotNode *op, Args... args)
Definition: expr_functor.h:145
virtual R VisitExpr_(const ShuffleNode *op, Args... args)
Definition: expr_functor.h:149
runtime implementation for LibTorch/TorchScript.
Definition: analyzer.h:36
ExprVisitor.
Definition: expr_functor.h:209
virtual R VisitExpr_(const FloorModNode *op, Args... args)
Definition: expr_functor.h:132
virtual R VisitExpr_(const ReduceNode *op, Args... args)
Definition: expr_functor.h:143
String constants, only used in asserts.
Definition: expr.h:53
Constant floating point literals in the program.
Definition: expr.h:535
virtual R VisitExpr_(const LetNode *op, Args... args)
Definition: expr_functor.h:124
virtual ~ExprFunctor()
virtual destructor
Definition: expr_functor.h:96
virtual R VisitExpr_(const FloatImmNode *op, Args... args)
Definition: expr_functor.h:151
A variable node in the IR.
Definition: var.h:47
a * b
Definition: expr.h:187
base class of all object containers.
Definition: object.h:167
Any shape.
Definition: expr.h:1130
Shuffle instruction. vec = concat(vectors) result = (vec[indices[0]], vec[indices[1]] ...
Definition: expr.h:958
A variable node represent a tensor index size, whose value must be non-negative.
Definition: var.h:137
virtual R VisitExpr_(const LENode *op, Args... args)
Definition: expr_functor.h:138
virtual R VisitExpr_(const AddNode *op, Args... args)
Definition: expr_functor.h:126
a + b
Definition: expr.h:155
Constant integer literals in the program.
Definition: expr.h:489
virtual R VisitExpr_(const SubNode *op, Args... args)
Definition: expr_functor.h:127
a || b
Definition: expr.h:472
virtual R VisitExpr_(const CastNode *op, Args... args)
Definition: expr_functor.h:144
virtual R VisitExpr_(const ModNode *op, Args... args)
Definition: expr_functor.h:130
virtual R VisitExpr_(const LoadNode *op, Args... args)
Definition: expr_functor.h:123
virtual R VisitExpr_(const VarNode *op, Args... args)
Definition: expr_functor.h:117
virtual R VisitExpr_(const DivNode *op, Args... args)
Definition: expr_functor.h:129
virtual R VisitExpr_(const LTNode *op, Args... args)
Definition: expr_functor.h:137
#define IR_EXPR_FUNCTOR_DISPATCH(OP)
Definition: expr_functor.h:81
Create a vector where all the elements are value.
Definition: expr.h:823
virtual R VisitExpr_(const CallNode *op, Args... args)
Definition: expr_functor.h:125
a > b
Definition: expr.h:401
Cast value from one data type to another.
Definition: expr.h:88
virtual R VisitExpr_(const EQNode *op, Args... args)
Definition: expr_functor.h:135
virtual R VisitExpr_(const SelectNode *op, Args... args)
Definition: expr_functor.h:146
virtual R VisitExpr_(const SizeVarNode *op, Args... args)
Definition: expr_functor.h:118
virtual R VisitExprDefault_(const Object *op, Args...)
Definition: expr_functor.h:154
virtual R VisitExpr_(const AnyNode *op, Args... args)
Definition: expr_functor.h:153
Load the value from buffer_var.
Definition: expr.h:726
Defines the Functor data structures.
virtual R VisitExpr_(const GTNode *op, Args... args)
Definition: expr_functor.h:139
Base class of all object reference.
Definition: object.h:511
!a
Definition: expr.h:511
max(a, b)
Definition: expr.h:289
std::string GetTypeKey() const
Definition: object.h:180
R result_type
the result type of this functor
Definition: expr_functor.h:94
virtual R VisitExpr_(const MulNode *op, Args... args)
Definition: expr_functor.h:128
Construct a vector with lanes elements where its i-th element equals base + i * stride. This is useful to construct a index for a continuous vector load.
Definition: expr.h:779
virtual R VisitExpr_(const AndNode *op, Args... args)
Definition: expr_functor.h:141
#define EXPR_FUNCTOR_DEFAULT
Definition: expr_functor.h:78
virtual R VisitExpr_(const RampNode *op, Args... args)
Definition: expr_functor.h:147
min(a, b)
Definition: expr.h:273
Definition: expr_functor.h:87
The remainder of the floordiv.
Definition: expr.h:257
a == b
Definition: expr.h:337
virtual R VisitExpr(const PrimExpr &n, Args... args)
The functor call.
Definition: expr_functor.h:112
a && b
Definition: expr.h:433
virtual R VisitExpr_(const StringImmNode *op, Args... args)
Definition: expr_functor.h:152
a < b
Definition: expr.h:369
Load value from the high dimension buffer.
Definition: expr.h:606
virtual R VisitExpr_(const ProducerLoadNode *op, Args... args)
Definition: expr_functor.h:122
a % b in the C semnatics.
Definition: expr.h:225
Reference to PrimExprNode.
Definition: expr.h:112
virtual R VisitExpr_(const FloorDivNode *op, Args... args)
Definition: expr_functor.h:131
Floor division, floor(a/b)
Definition: expr.h:241
a - b
Definition: expr.h:171
A dynamical functor that dispatches on in the first Expr argument. You can use this as a more powerfu...
Definition: expr_functor.h:75
R operator()(const PrimExpr &n, Args... args)
Same as call.
Definition: expr_functor.h:103
Call node.
Definition: expr.h:910
return true_value if condition is true, otherwise return false_value.
Definition: expr.h:552
Reduction operator operator.
Definition: expr.h:1066
a / b in the C semnatics.
Definition: expr.h:206
a <= b
Definition: expr.h:385
Load value from the result produced by the producer.
Definition: expr.h:671
virtual R VisitExpr_(const MaxNode *op, Args... args)
Definition: expr_functor.h:134
virtual R VisitExpr_(const NENode *op, Args... args)
Definition: expr_functor.h:136
a != b
Definition: expr.h:353
virtual R VisitExpr_(const BufferLoadNode *op, Args... args)
Definition: expr_functor.h:121
ExprMutator that mutates expressions.
Definition: expr_functor.h:256
a >= b
Definition: expr.h:417