Class ExprVisitor#

Inheritance Relationships#

Base Type#

Derived Type#

Class Documentation#

class ExprVisitor : public tvm::ObjectVisitor#

Structural Expr visitor with native overrides for core expressions.

Prefer StructuralVisit or StructuralWalk for common cases; use ExprVisitor for extensive per-kind customization or optimization. Default hooks follow the registered structural child order and skip primitive metadata. Native hooks match exact node types; derived node types use structural fallback unless separately registered in a fresh inherited table with SetDispatch. Existing hooks only require overriding. For an extra MyExprObj derived from ExprObj, initialize an inherited table and register the new virtual hook:

class MyExprVisitor : public ExprVisitor {
 public:
  TVM_DEFINE_OBJECT_FUNCTOR_DEFAULT_CONSTRUCTOR(MyExprVisitor, ExprVisitor)
using ExprVisitor::Visit_;
virtual ffi::Optional<VisitInterrupt> Visit_(const MyExprObj* node);

 protected:
static void InitVTable(VTable* vtable) {
    ExprVisitor::InitVTable(vtable);
    SetDispatch<MyExprVisitor, MyExprObj>(vtable);
  }
};
Use tvm::ExprVisitor explicitly when dialect visitors are also in scope.

Subclassed by tvm::tirx::StmtExprVisitor

Public Functions

inline ExprVisitor()#

Construct a visitor with the core expression hooks.

virtual ffi::Optional<VisitInterrupt> Visit_(const OpaqueExprObj *node)#
virtual ffi::Optional<VisitInterrupt> Visit_(const TupleObj *node)#
virtual ffi::Optional<VisitInterrupt> Visit_(const TupleGetItemObj *node)#
virtual ffi::Optional<VisitInterrupt> Visit_(const TensorLoadObj *node)#
virtual ffi::Optional<VisitInterrupt> Visit_(const TensorRegionObj *node)#
virtual ffi::Optional<VisitInterrupt> Visit_(const VarObj *node)#
virtual ffi::Optional<VisitInterrupt> Visit_(const GlobalVarObj *node)#
virtual ffi::Optional<VisitInterrupt> Visit_(const CallObj *node)#
virtual ffi::Optional<VisitInterrupt> Visit_(const GenericConstObj *node)#
virtual ffi::Optional<VisitInterrupt> Visit_(const DataTypeImmObj *node)#
virtual ffi::Optional<VisitInterrupt> Visit_(const IntImmObj *node)#
virtual ffi::Optional<VisitInterrupt> Visit_(const FloatImmObj *node)#
virtual ffi::Optional<VisitInterrupt> Visit_(const OpObj *node)#
virtual ffi::Optional<VisitInterrupt> Visit_(const StringImmObj *node)#
virtual ffi::Optional<VisitInterrupt> Visit_(const prim::CastObj *node)#
virtual ffi::Optional<VisitInterrupt> Visit_(const prim::AddObj *node)#
virtual ffi::Optional<VisitInterrupt> Visit_(const prim::LShiftObj *node)#
virtual ffi::Optional<VisitInterrupt> Visit_(const prim::RShiftObj *node)#
virtual ffi::Optional<VisitInterrupt> Visit_(const prim::BitwiseAndObj *node)#
virtual ffi::Optional<VisitInterrupt> Visit_(const prim::BitwiseOrObj *node)#
virtual ffi::Optional<VisitInterrupt> Visit_(const prim::BitwiseXorObj *node)#
virtual ffi::Optional<VisitInterrupt> Visit_(const prim::BitwiseNotObj *node)#
virtual ffi::Optional<VisitInterrupt> Visit_(const prim::SubObj *node)#
virtual ffi::Optional<VisitInterrupt> Visit_(const prim::MulObj *node)#
virtual ffi::Optional<VisitInterrupt> Visit_(const prim::DivObj *node)#
virtual ffi::Optional<VisitInterrupt> Visit_(const prim::ModObj *node)#
virtual ffi::Optional<VisitInterrupt> Visit_(const prim::FloorDivObj *node)#
virtual ffi::Optional<VisitInterrupt> Visit_(const prim::FloorModObj *node)#
virtual ffi::Optional<VisitInterrupt> Visit_(const prim::MinObj *node)#
virtual ffi::Optional<VisitInterrupt> Visit_(const prim::MaxObj *node)#
virtual ffi::Optional<VisitInterrupt> Visit_(const prim::EQObj *node)#
virtual ffi::Optional<VisitInterrupt> Visit_(const prim::NEObj *node)#
virtual ffi::Optional<VisitInterrupt> Visit_(const prim::LTObj *node)#
virtual ffi::Optional<VisitInterrupt> Visit_(const prim::LEObj *node)#
virtual ffi::Optional<VisitInterrupt> Visit_(const prim::GTObj *node)#
virtual ffi::Optional<VisitInterrupt> Visit_(const prim::GEObj *node)#
virtual ffi::Optional<VisitInterrupt> Visit_(const prim::AndObj *node)#
virtual ffi::Optional<VisitInterrupt> Visit_(const prim::OrObj *node)#
virtual ffi::Optional<VisitInterrupt> Visit_(const prim::NotObj *node)#
virtual ffi::Optional<VisitInterrupt> Visit_(const prim::SelectObj *node)#
virtual ffi::Optional<VisitInterrupt> Visit_(const prim::LetObj *node)#
virtual ffi::Optional<VisitInterrupt> Visit_(const prim::RampObj *node)#
virtual ffi::Optional<VisitInterrupt> Visit_(const prim::BroadcastObj *node)#
virtual ffi::Optional<VisitInterrupt> Visit_(const prim::ShuffleObj *node)#
inline virtual ffi::Optional<VisitInterrupt> Visit(ffi::AnyView value)#

Visit a borrowed object or inline value, throwing on failure.

Note

A qualified Parent::Visit bypasses this entry override only; recursive child visits still use virtual dispatch.

Parameters:

value – The borrowed value to visit.

Returns:

None on completion or an owning interrupt that halts traversal.

Protected Functions

inline explicit ExprVisitor(const VTable *vtable)#

Construct a visitor with an extended native dispatch table.

Parameters:

vtable – The finalized table, which must outlive this visitor.

Protected Static Functions

static void InitVTable(VTable *vtable)#

Register core expression hooks in a fresh mutable table.

Parameters:

vtable – The table to initialize before adding derived registrations.