23#ifndef TVM_IR_EXPR_FUNCTOR_H_
24#define TVM_IR_EXPR_FUNCTOR_H_
43template <
typename FType>
46template <
typename R,
typename... Args>
63 return Dispatch(node, std::forward<Args>(args)...);
71 TVM_FFI_INLINE
virtual R
Dispatch(
const Expr& node, Args... args) {
72 TVM_FFI_ICHECK(node.defined()) <<
"Cannot dispatch a null expression";
73 return (*vtable_)(node,
this, std::forward<Args>(args)...);
77 return DispatchDefault_(node, std::forward<Args>(args)...);
80 return DispatchDefault_(node, std::forward<Args>(args)...);
83 return DispatchDefault_(node, std::forward<Args>(args)...);
86 return DispatchDefault_(node, std::forward<Args>(args)...);
89 return DispatchDefault_(node, std::forward<Args>(args)...);
92 return DispatchDefault_(node, std::forward<Args>(args)...);
95 return DispatchDefault_(node, std::forward<Args>(args)...);
98 return DispatchDefault_(node, std::forward<Args>(args)...);
101 return DispatchDefault_(node, std::forward<Args>(args)...);
104 return DispatchDefault_(node, std::forward<Args>(args)...);
107 return DispatchDefault_(node, std::forward<Args>(args)...);
110 return DispatchDefault_(node, std::forward<Args>(args)...);
113 return DispatchDefault_(node, std::forward<Args>(args)...);
116 return DispatchDefault_(node, std::forward<Args>(args)...);
119 return DispatchDefault_(node, std::forward<Args>(args)...);
122 return DispatchDefault_(node, std::forward<Args>(args)...);
125 return DispatchDefault_(node, std::forward<Args>(args)...);
128 return DispatchDefault_(node, std::forward<Args>(args)...);
131 return DispatchDefault_(node, std::forward<Args>(args)...);
134 return DispatchDefault_(node, std::forward<Args>(args)...);
137 return DispatchDefault_(node, std::forward<Args>(args)...);
140 return DispatchDefault_(node, std::forward<Args>(args)...);
143 return DispatchDefault_(node, std::forward<Args>(args)...);
146 return DispatchDefault_(node, std::forward<Args>(args)...);
149 return DispatchDefault_(node, std::forward<Args>(args)...);
152 return DispatchDefault_(node, std::forward<Args>(args)...);
155 return DispatchDefault_(node, std::forward<Args>(args)...);
158 return DispatchDefault_(node, std::forward<Args>(args)...);
161 return DispatchDefault_(node, std::forward<Args>(args)...);
164 return DispatchDefault_(node, std::forward<Args>(args)...);
167 return DispatchDefault_(node, std::forward<Args>(args)...);
170 return DispatchDefault_(node, std::forward<Args>(args)...);
173 return DispatchDefault_(node, std::forward<Args>(args)...);
176 return DispatchDefault_(node, std::forward<Args>(args)...);
179 return DispatchDefault_(node, std::forward<Args>(args)...);
182 return DispatchDefault_(node, std::forward<Args>(args)...);
185 return DispatchDefault_(node, std::forward<Args>(args)...);
188 return DispatchDefault_(node, std::forward<Args>(args)...);
191 return DispatchDefault_(node, std::forward<Args>(args)...);
194 return DispatchDefault_(node, std::forward<Args>(args)...);
197 return DispatchDefault_(node, std::forward<Args>(args)...);
200 return DispatchDefault_(node, std::forward<Args>(args)...);
203 return DispatchDefault_(node, std::forward<Args>(args)...);
206 return DispatchDefault_(node, std::forward<Args>(args)...);
209 return DispatchDefault_(node, std::forward<Args>(args)...);
219 TVM_FFI_THROW(InternalError) <<
"Do not have a default for " << node->GetTypeKey();
220 TVM_FFI_UNREACHABLE();
236 SetDispatch<TSelf, LambdaExprNode>(vtable);
237 SetDispatch<TSelf, OpaqueExprNode>(vtable);
238 SetDispatch<TSelf, TupleNode>(vtable);
239 SetDispatch<TSelf, TupleGetItemNode>(vtable);
240 SetDispatch<TSelf, TensorLoadNode>(vtable);
241 SetDispatch<TSelf, TensorRegionNode>(vtable);
242 SetDispatch<TSelf, VarNode>(vtable);
243 SetDispatch<TSelf, GlobalVarNode>(vtable);
244 SetDispatch<TSelf, CallNode>(vtable);
245 SetDispatch<TSelf, GenericConstNode>(vtable);
246 SetDispatch<TSelf, DataTypeImmNode>(vtable);
247 SetDispatch<TSelf, IntImmNode>(vtable);
248 SetDispatch<TSelf, FloatImmNode>(vtable);
249 SetDispatch<TSelf, OpNode>(vtable);
250 SetDispatch<TSelf, StringImmNode>(vtable);
251 SetDispatch<TSelf, prim::CastNode>(vtable);
252 SetDispatch<TSelf, prim::AddNode>(vtable);
253 SetDispatch<TSelf, prim::LShiftNode>(vtable);
254 SetDispatch<TSelf, prim::RShiftNode>(vtable);
255 SetDispatch<TSelf, prim::BitwiseAndNode>(vtable);
256 SetDispatch<TSelf, prim::BitwiseOrNode>(vtable);
257 SetDispatch<TSelf, prim::BitwiseXorNode>(vtable);
258 SetDispatch<TSelf, prim::BitwiseNotNode>(vtable);
259 SetDispatch<TSelf, prim::SubNode>(vtable);
260 SetDispatch<TSelf, prim::MulNode>(vtable);
261 SetDispatch<TSelf, prim::DivNode>(vtable);
262 SetDispatch<TSelf, prim::ModNode>(vtable);
263 SetDispatch<TSelf, prim::FloorDivNode>(vtable);
264 SetDispatch<TSelf, prim::FloorModNode>(vtable);
265 SetDispatch<TSelf, prim::MinNode>(vtable);
266 SetDispatch<TSelf, prim::MaxNode>(vtable);
267 SetDispatch<TSelf, prim::EQNode>(vtable);
268 SetDispatch<TSelf, prim::NENode>(vtable);
269 SetDispatch<TSelf, prim::LTNode>(vtable);
270 SetDispatch<TSelf, prim::LENode>(vtable);
271 SetDispatch<TSelf, prim::GTNode>(vtable);
272 SetDispatch<TSelf, prim::GENode>(vtable);
273 SetDispatch<TSelf, prim::AndNode>(vtable);
274 SetDispatch<TSelf, prim::OrNode>(vtable);
275 SetDispatch<TSelf, prim::NotNode>(vtable);
276 SetDispatch<TSelf, prim::SelectNode>(vtable);
277 SetDispatch<TSelf, prim::LetNode>(vtable);
278 SetDispatch<TSelf, prim::RampNode>(vtable);
279 SetDispatch<TSelf, prim::BroadcastNode>(vtable);
280 SetDispatch<TSelf, prim::ShuffleNode>(vtable);
288 template <
typename Self,
typename Node>
290 vtable->template SetDispatch<Node>(
291 [](
const ffi::ObjectRef& node,
TSelf* self, Args... args) -> R {
292 return static_cast<Self*>(self)->Dispatch_(static_cast<const Node*>(node.get()),
293 std::forward<Args>(args)...);
298 static const VTable* GlobalVTable() {
299 static const VTable table = [] {
307 const VTable* vtable_;
341 using ObjectVisitor::Visit;
436 using ObjectMutator::Mutate;
447 InplaceMode inplace_mode = InplaceMode::kDisallow) {
448 return ffi::details::UnchangedOrUnsafe::MoveFromTVMFFIAny<PrimExpr>(
449 ffi::details::UnchangedOrUnsafe::MoveToTVMFFIAny(Mutate(ffi::AnyView(expr), inplace_mode)));
461 InplaceMode inplace_mode = InplaceMode::kDisallow) {
462 return ffi::details::UnchangedOrUnsafe::MoveFromTVMFFIAny<Expr>(
463 ffi::details::UnchangedOrUnsafe::MoveToTVMFFIAny(Mutate(ffi::AnyView(expr), inplace_mode)));
476 virtual UnchangedOr<Expr>
Mutate_(
const VarNode* node, InplaceMode inplace_mode);
483 virtual UnchangedOr<Expr>
Mutate_(
const OpNode* node, InplaceMode inplace_mode);
528 InplaceMode inplace_mode);
Call corresponds to callable invocation.
Definition expr.h:935
A data type literal with AnyType as its expression type.
Definition expr.h:110
Definition expr_functor.h:47
virtual R Dispatch_(const prim::OrNode *node, Args... args)
Definition expr_functor.h:190
virtual R Dispatch_(const prim::CastNode *node, Args... args)
Definition expr_functor.h:121
static void SetDispatch(VTable *vtable)
Register a hook for an additional expression type.
Definition expr_functor.h:289
virtual R Dispatch_(const prim::BitwiseNotNode *node, Args... args)
Definition expr_functor.h:142
virtual R Dispatch_(const prim::BitwiseAndNode *node, Args... args)
Definition expr_functor.h:133
virtual R Dispatch_(const LambdaExprNode *node, Args... args)
Definition expr_functor.h:76
virtual R Dispatch_(const prim::NENode *node, Args... args)
Definition expr_functor.h:172
virtual R Dispatch_(const prim::LTNode *node, Args... args)
Definition expr_functor.h:175
virtual R Dispatch_(const prim::LetNode *node, Args... args)
Definition expr_functor.h:199
virtual R Dispatch_(const CallNode *node, Args... args)
Definition expr_functor.h:100
virtual R Dispatch_(const prim::BitwiseOrNode *node, Args... args)
Definition expr_functor.h:136
virtual R Dispatch_(const TensorLoadNode *node, Args... args)
Definition expr_functor.h:91
virtual R Dispatch_(const prim::MulNode *node, Args... args)
Definition expr_functor.h:148
virtual R Dispatch_(const GenericConstNode *node, Args... args)
Definition expr_functor.h:103
virtual R Dispatch_(const OpaqueExprNode *node, Args... args)
Definition expr_functor.h:79
virtual R Dispatch_(const TupleGetItemNode *node, Args... args)
Definition expr_functor.h:85
virtual R Dispatch_(const prim::RampNode *node, Args... args)
Definition expr_functor.h:202
virtual R DispatchDefault_(const ffi::Object *node, Args... args)
Default node behavior, overridden by subclasses that handle arbitrary core nodes.
Definition expr_functor.h:218
virtual R Dispatch_(const IntImmNode *node, Args... args)
Definition expr_functor.h:109
virtual R Dispatch_(const prim::EQNode *node, Args... args)
Definition expr_functor.h:169
virtual R Dispatch_(const prim::AndNode *node, Args... args)
Definition expr_functor.h:187
ExprFunctor()
Construct a functor with the core expression hooks.
Definition expr_functor.h:55
virtual R Dispatch_(const VarNode *node, Args... args)
Definition expr_functor.h:94
virtual R Dispatch_(const prim::NotNode *node, Args... args)
Definition expr_functor.h:193
virtual R Dispatch_(const prim::BitwiseXorNode *node, Args... args)
Definition expr_functor.h:139
virtual R Dispatch_(const prim::LENode *node, Args... args)
Definition expr_functor.h:178
virtual R Dispatch_(const prim::RShiftNode *node, Args... args)
Definition expr_functor.h:130
virtual R Dispatch_(const DataTypeImmNode *node, Args... args)
Definition expr_functor.h:106
virtual R Dispatch_(const TupleNode *node, Args... args)
Definition expr_functor.h:82
virtual R Dispatch_(const prim::BroadcastNode *node, Args... args)
Definition expr_functor.h:205
virtual R Dispatch_(const OpNode *node, Args... args)
Definition expr_functor.h:115
virtual R Dispatch_(const prim::AddNode *node, Args... args)
Definition expr_functor.h:124
ExprFunctor(const VTable *vtable)
Construct a functor with an extended finalized table.
Definition expr_functor.h:230
virtual R Dispatch_(const prim::SelectNode *node, Args... args)
Definition expr_functor.h:196
virtual TVM_FFI_INLINE R Dispatch(const Expr &node, Args... args)
Dispatch to a node hook, including registered ancestor hooks.
Definition expr_functor.h:71
virtual R Dispatch_(const prim::ModNode *node, Args... args)
Definition expr_functor.h:154
TVM_FFI_INLINE R operator()(const Expr &node, Args... args)
Dispatch an expression through Dispatch.
Definition expr_functor.h:62
virtual R Dispatch_(const prim::GTNode *node, Args... args)
Definition expr_functor.h:181
virtual R Dispatch_(const prim::GENode *node, Args... args)
Definition expr_functor.h:184
virtual R Dispatch_(const FloatImmNode *node, Args... args)
Definition expr_functor.h:112
virtual R Dispatch_(const prim::LShiftNode *node, Args... args)
Definition expr_functor.h:127
static void InitVTable(VTable *vtable)
Register core expression hooks in a fresh mutable table.
Definition expr_functor.h:235
virtual R Dispatch_(const StringImmNode *node, Args... args)
Definition expr_functor.h:118
virtual R Dispatch_(const prim::MinNode *node, Args... args)
Definition expr_functor.h:163
virtual R Dispatch_(const GlobalVarNode *node, Args... args)
Definition expr_functor.h:97
virtual R Dispatch_(const prim::DivNode *node, Args... args)
Definition expr_functor.h:151
virtual R Dispatch_(const prim::FloorDivNode *node, Args... args)
Definition expr_functor.h:157
virtual R Dispatch_(const prim::MaxNode *node, Args... args)
Definition expr_functor.h:166
R result_type
The result type of this functor.
Definition expr_functor.h:53
virtual R Dispatch_(const prim::ShuffleNode *node, Args... args)
Definition expr_functor.h:208
virtual R Dispatch_(const TensorRegionNode *node, Args... args)
Definition expr_functor.h:88
virtual R Dispatch_(const prim::SubNode *node, Args... args)
Definition expr_functor.h:145
virtual R Dispatch_(const prim::FloorModNode *node, Args... args)
Definition expr_functor.h:160
Type-dispatched expression functor with a caller-selected signature.
Definition expr_functor.h:44
Structural Expr mutator with native overrides for core expressions and structural fallback for other ...
Definition expr_functor.h:431
virtual UnchangedOr< Expr > Mutate_(const GlobalVarNode *node, InplaceMode inplace_mode)
virtual UnchangedOr< PrimExpr > Mutate_(const prim::AndNode *node, InplaceMode inplace_mode)
virtual UnchangedOr< PrimExpr > Mutate_(const prim::RShiftNode *node, InplaceMode inplace_mode)
virtual UnchangedOr< PrimExpr > Mutate_(const prim::MulNode *node, InplaceMode inplace_mode)
virtual UnchangedOr< PrimExpr > Mutate_(const prim::BroadcastNode *node, InplaceMode inplace_mode)
virtual UnchangedOr< PrimExpr > Mutate_(const prim::LShiftNode *node, InplaceMode inplace_mode)
virtual UnchangedOr< PrimExpr > Mutate_(const prim::ModNode *node, InplaceMode inplace_mode)
virtual UnchangedOr< PrimExpr > Mutate_(const prim::FloorModNode *node, InplaceMode inplace_mode)
virtual UnchangedOr< PrimExpr > Mutate_(const prim::MinNode *node, InplaceMode inplace_mode)
virtual UnchangedOr< PrimExpr > Mutate_(const prim::BitwiseXorNode *node, InplaceMode inplace_mode)
virtual UnchangedOr< PrimExpr > Mutate_(const prim::BitwiseOrNode *node, InplaceMode inplace_mode)
virtual UnchangedOr< PrimExpr > Mutate_(const prim::GTNode *node, InplaceMode inplace_mode)
virtual UnchangedOr< PrimExpr > Mutate_(const prim::BitwiseAndNode *node, InplaceMode inplace_mode)
virtual UnchangedOr< PrimExpr > Mutate_(const prim::LetNode *node, InplaceMode inplace_mode)
virtual UnchangedOr< PrimExpr > Mutate_(const prim::SubNode *node, InplaceMode inplace_mode)
virtual UnchangedOr< PrimExpr > Mutate_(const prim::MaxNode *node, InplaceMode inplace_mode)
static void InitVTable(VTable *vtable)
Register core expression hooks in a fresh mutable table.
virtual UnchangedOr< Expr > Mutate_(const TupleNode *node, InplaceMode inplace_mode)
virtual UnchangedOr< Expr > Mutate_(const OpaqueExprNode *node, InplaceMode inplace_mode)
virtual UnchangedOr< PrimExpr > Mutate_(const prim::NotNode *node, InplaceMode inplace_mode)
virtual UnchangedOr< Expr > Mutate_(const TensorRegionNode *node, InplaceMode inplace_mode)
static UnchangedOr< Expr > ReinferMutatedCallType(UnchangedOr< Expr > mutated, const CallNode *original, InplaceMode inplace_mode)
Reinfer the result type of a Call after ordinary mutation.
virtual UnchangedOr< Expr > Mutate_(const TupleGetItemNode *node, InplaceMode inplace_mode)
virtual UnchangedOr< Expr > Mutate_(const OpNode *node, InplaceMode inplace_mode)
virtual UnchangedOr< Expr > Mutate_(const CallNode *node, InplaceMode inplace_mode)
virtual UnchangedOr< PrimExpr > Mutate_(const prim::NENode *node, InplaceMode inplace_mode)
virtual UnchangedOr< Expr > Mutate_(const StringImmNode *node, InplaceMode inplace_mode)
virtual UnchangedOr< PrimExpr > Mutate_(const prim::BitwiseNotNode *node, InplaceMode inplace_mode)
virtual UnchangedOr< PrimExpr > Mutate_(const IntImmNode *node, InplaceMode inplace_mode)
virtual UnchangedOr< PrimExpr > Mutate_(const prim::AddNode *node, InplaceMode inplace_mode)
virtual UnchangedOr< PrimExpr > Mutate_(const prim::FloorDivNode *node, InplaceMode inplace_mode)
virtual UnchangedOr< PrimExpr > Mutate_(const prim::DivNode *node, InplaceMode inplace_mode)
virtual UnchangedOr< PrimExpr > Mutate_(const FloatImmNode *node, InplaceMode inplace_mode)
virtual UnchangedOr< Expr > Mutate_(const VarNode *node, InplaceMode inplace_mode)
virtual UnchangedOr< PrimExpr > Mutate_(const prim::CastNode *node, InplaceMode inplace_mode)
virtual UnchangedOr< PrimExpr > Mutate_(const prim::SelectNode *node, InplaceMode inplace_mode)
virtual UnchangedOr< PrimExpr > Mutate_(const prim::LENode *node, InplaceMode inplace_mode)
TVM_FFI_INLINE UnchangedOr< PrimExpr > Mutate(const PrimExpr &expr, InplaceMode inplace_mode=InplaceMode::kDisallow)
Mutate a primitive expression, preserving its expression category.
Definition expr_functor.h:446
virtual UnchangedOr< PrimExpr > Mutate_(const prim::GENode *node, InplaceMode inplace_mode)
ExprMutator(const VTable *vtable)
Construct a mutator with an extended native dispatch table.
Definition expr_functor.h:534
virtual UnchangedOr< Expr > Mutate_(const DataTypeImmNode *node, InplaceMode inplace_mode)
virtual UnchangedOr< PrimExpr > Mutate_(const TensorLoadNode *node, InplaceMode inplace_mode)
virtual UnchangedOr< PrimExpr > Mutate_(const prim::EQNode *node, InplaceMode inplace_mode)
virtual UnchangedOr< PrimExpr > Mutate_(const prim::ShuffleNode *node, InplaceMode inplace_mode)
virtual UnchangedOr< PrimExpr > Mutate_(const prim::LTNode *node, InplaceMode inplace_mode)
virtual UnchangedOr< Expr > Mutate_(const GenericConstNode *node, InplaceMode inplace_mode)
virtual UnchangedOr< PrimExpr > Mutate_(const prim::RampNode *node, InplaceMode inplace_mode)
virtual UnchangedOr< PrimExpr > Mutate_(const prim::OrNode *node, InplaceMode inplace_mode)
TVM_FFI_INLINE UnchangedOr< Expr > Mutate(const Expr &expr, InplaceMode inplace_mode=InplaceMode::kDisallow)
Mutate an expression, preserving its expression category.
Definition expr_functor.h:460
Structural Expr visitor with native overrides for core expressions.
Definition expr_functor.h:336
virtual ffi::Optional< VisitInterrupt > Visit_(const prim::MulNode *node)
virtual ffi::Optional< VisitInterrupt > Visit_(const CallNode *node)
virtual ffi::Optional< VisitInterrupt > Visit_(const prim::BroadcastNode *node)
virtual ffi::Optional< VisitInterrupt > Visit_(const TensorRegionNode *node)
virtual ffi::Optional< VisitInterrupt > Visit_(const prim::RampNode *node)
virtual ffi::Optional< VisitInterrupt > Visit_(const prim::MaxNode *node)
virtual ffi::Optional< VisitInterrupt > Visit_(const TupleNode *node)
virtual ffi::Optional< VisitInterrupt > Visit_(const prim::GTNode *node)
virtual ffi::Optional< VisitInterrupt > Visit_(const prim::RShiftNode *node)
virtual ffi::Optional< VisitInterrupt > Visit_(const prim::GENode *node)
virtual ffi::Optional< VisitInterrupt > Visit_(const TupleGetItemNode *node)
virtual ffi::Optional< VisitInterrupt > Visit_(const prim::AddNode *node)
virtual ffi::Optional< VisitInterrupt > Visit_(const OpaqueExprNode *node)
virtual ffi::Optional< VisitInterrupt > Visit_(const prim::OrNode *node)
virtual ffi::Optional< VisitInterrupt > Visit_(const VarNode *node)
virtual ffi::Optional< VisitInterrupt > Visit_(const OpNode *node)
virtual ffi::Optional< VisitInterrupt > Visit_(const prim::NotNode *node)
virtual ffi::Optional< VisitInterrupt > Visit_(const prim::EQNode *node)
virtual ffi::Optional< VisitInterrupt > Visit_(const prim::MinNode *node)
virtual ffi::Optional< VisitInterrupt > Visit_(const prim::ShuffleNode *node)
virtual ffi::Optional< VisitInterrupt > Visit_(const prim::FloorDivNode *node)
virtual ffi::Optional< VisitInterrupt > Visit_(const prim::BitwiseAndNode *node)
virtual ffi::Optional< VisitInterrupt > Visit_(const prim::CastNode *node)
static void InitVTable(VTable *vtable)
Register core expression hooks in a fresh mutable table.
virtual ffi::Optional< VisitInterrupt > Visit_(const GlobalVarNode *node)
virtual ffi::Optional< VisitInterrupt > Visit_(const prim::SelectNode *node)
virtual ffi::Optional< VisitInterrupt > Visit_(const prim::BitwiseXorNode *node)
virtual ffi::Optional< VisitInterrupt > Visit_(const StringImmNode *node)
virtual ffi::Optional< VisitInterrupt > Visit_(const prim::BitwiseNotNode *node)
virtual ffi::Optional< VisitInterrupt > Visit_(const prim::LTNode *node)
ExprVisitor(const VTable *vtable)
Construct a visitor with an extended native dispatch table.
Definition expr_functor.h:395
virtual ffi::Optional< VisitInterrupt > Visit_(const GenericConstNode *node)
virtual ffi::Optional< VisitInterrupt > Visit_(const prim::LShiftNode *node)
virtual ffi::Optional< VisitInterrupt > Visit_(const DataTypeImmNode *node)
virtual ffi::Optional< VisitInterrupt > Visit_(const prim::DivNode *node)
virtual ffi::Optional< VisitInterrupt > Visit_(const prim::FloorModNode *node)
virtual ffi::Optional< VisitInterrupt > Visit_(const prim::LetNode *node)
virtual ffi::Optional< VisitInterrupt > Visit_(const prim::AndNode *node)
virtual ffi::Optional< VisitInterrupt > Visit_(const prim::BitwiseOrNode *node)
virtual ffi::Optional< VisitInterrupt > Visit_(const prim::SubNode *node)
virtual ffi::Optional< VisitInterrupt > Visit_(const FloatImmNode *node)
virtual ffi::Optional< VisitInterrupt > Visit_(const prim::LENode *node)
virtual ffi::Optional< VisitInterrupt > Visit_(const TensorLoadNode *node)
virtual ffi::Optional< VisitInterrupt > Visit_(const prim::NENode *node)
virtual ffi::Optional< VisitInterrupt > Visit_(const IntImmNode *node)
virtual ffi::Optional< VisitInterrupt > Visit_(const prim::ModNode *node)
Managed reference to ExprNode.
Definition base_expr.h:359
Constant floating point literals in the program.
Definition expr.h:215
A constant whose payload is separate from its expression type.
Definition expr.h:66
Global variable that lives in the top-level module.
Definition expr.h:821
Constant integer literals in the program.
Definition expr.h:135
A typed staging expression representing a lambda computation.
Definition expr.h:783
A dynamically dispatched functor on the type of the first argument.
Definition object_functor.h:85
Native mutation with exact dispatch and structural fallback.
Definition object_functor.h:346
Native visiting with exact dispatch and structural fallback.
Definition object_functor.h:228
Metadata for a canonical primitive operator invoked through Call.
Definition op.h:86
Base node for opaque construction-time expressions.
Definition base_expr.h:394
Typed reference/view over any Expr whose ExprNode::ty is PrimType.
Definition base_expr.h:447
A string literal with shared semantic StringType.
Definition expr.h:88
Load a value from an indexed expression source.
Definition expr.h:443
A region of an indexed expression source.
Definition expr.h:1055
Get the index-th field out of a tuple.
Definition expr.h:405
Tuple container.
Definition expr.h:363
A local variable in the IR.
Definition expr.h:694
a + b
Definition expr.h:108
a && b
Definition expr.h:558
a & b
Definition expr.h:171
a | b
Definition expr.h:192
a ^ b
Definition expr.h:213
Create a vector where all the elements are value.
Definition vector_expr.h:79
Cast value from one data type to another.
Definition expr.h:56
a / b in the C semnatics.
Definition expr.h:280
a == b
Definition expr.h:432
Floor division, floor(a/b)
Definition expr.h:325
The remainder of the floordiv.
Definition expr.h:346
a >= b
Definition expr.h:537
a > b
Definition expr.h:516
a << b
Definition expr.h:129
a < b
Definition expr.h:474
Let binding. Bind var to value then evaluate body.
Definition expr.h:727
max(a, b)
Definition expr.h:388
min(a, b)
Definition expr.h:367
a % b in the C semnatics.
Definition expr.h:304
a * b
Definition expr.h:256
a != b
Definition expr.h:453
a || b
Definition expr.h:589
a >> b
Definition expr.h:150
Construct a vector with lanes elements where its i-th element equals base + i * stride....
Definition vector_expr.h:42
return true_value if condition is true, otherwise return false_value.
Definition expr.h:684
Shuffle instruction. vec = concat(vectors) result = (vec[indices[0]], vec[indices[1]] ....
Definition vector_expr.h:117
a - b
Definition expr.h:234
Canonical primitive operators and their registration.
An object that builds and maintains block scope and StmtSref mapping for Dependence analysis.
Definition attr.h:23
Native object dispatch, visiting and mutation with structural fallback.
#define TVM_DEFINE_OBJECT_FUNCTOR_DEFAULT_CONSTRUCTOR(Class, Parent)
Define a default constructor backed by one initialized native dispatch table.
Definition object_functor.h:529
#define TVM_TIRX_DLL
Definition base.h:83
a <= b
Definition expr.h:495
Primitive vector expressions.