tvm
Loading...
Searching...
No Matches
Public Member Functions | Protected Member Functions | Static Protected Member Functions | List of all members
tvm::ExprMutator Class Reference

Structural Expr mutator with native overrides for core expressions and structural fallback for other objects. More...

#include <expr_functor.h>

Inheritance diagram for tvm::ExprMutator:
Collaboration diagram for tvm::ExprMutator:

Public Member Functions

TVM_FFI_INLINE UnchangedOr< PrimExpr > Mutate (const PrimExpr &expr, InplaceMode inplace_mode=InplaceMode::kDisallow)
 Mutate a primitive expression, preserving its expression category.
 
TVM_FFI_INLINE UnchangedOr< Expr > Mutate (const Expr &expr, InplaceMode inplace_mode=InplaceMode::kDisallow)
 Mutate an expression, preserving its expression category.
 
virtual UnchangedOr< Expr > Mutate_ (const OpaqueExprNode *node, InplaceMode inplace_mode)
 
virtual UnchangedOr< Expr > Mutate_ (const TupleNode *node, InplaceMode inplace_mode)
 
virtual UnchangedOr< Expr > Mutate_ (const TupleGetItemNode *node, InplaceMode inplace_mode)
 
virtual UnchangedOr< PrimExpr > Mutate_ (const TensorLoadNode *node, InplaceMode inplace_mode)
 
virtual UnchangedOr< Expr > Mutate_ (const TensorRegionNode *node, InplaceMode inplace_mode)
 
virtual UnchangedOr< Expr > Mutate_ (const VarNode *node, InplaceMode inplace_mode)
 
virtual UnchangedOr< Expr > Mutate_ (const GlobalVarNode *node, InplaceMode inplace_mode)
 
virtual UnchangedOr< Expr > Mutate_ (const CallNode *node, InplaceMode inplace_mode)
 
virtual UnchangedOr< Expr > Mutate_ (const GenericConstNode *node, InplaceMode inplace_mode)
 
virtual UnchangedOr< Expr > Mutate_ (const DataTypeImmNode *node, InplaceMode inplace_mode)
 
virtual UnchangedOr< PrimExpr > Mutate_ (const IntImmNode *node, InplaceMode inplace_mode)
 
virtual UnchangedOr< PrimExpr > Mutate_ (const FloatImmNode *node, InplaceMode inplace_mode)
 
virtual UnchangedOr< Expr > Mutate_ (const OpNode *node, InplaceMode inplace_mode)
 
virtual UnchangedOr< Expr > Mutate_ (const StringImmNode *node, InplaceMode inplace_mode)
 
virtual UnchangedOr< PrimExpr > Mutate_ (const prim::CastNode *node, InplaceMode inplace_mode)
 
virtual UnchangedOr< PrimExpr > Mutate_ (const prim::AddNode *node, InplaceMode inplace_mode)
 
virtual UnchangedOr< PrimExpr > Mutate_ (const prim::LShiftNode *node, InplaceMode inplace_mode)
 
virtual UnchangedOr< PrimExpr > Mutate_ (const prim::RShiftNode *node, InplaceMode inplace_mode)
 
virtual UnchangedOr< PrimExpr > Mutate_ (const prim::BitwiseAndNode *node, InplaceMode inplace_mode)
 
virtual UnchangedOr< PrimExpr > Mutate_ (const prim::BitwiseOrNode *node, InplaceMode inplace_mode)
 
virtual UnchangedOr< PrimExpr > Mutate_ (const prim::BitwiseXorNode *node, InplaceMode inplace_mode)
 
virtual UnchangedOr< PrimExpr > Mutate_ (const prim::BitwiseNotNode *node, InplaceMode inplace_mode)
 
virtual UnchangedOr< PrimExpr > Mutate_ (const prim::SubNode *node, InplaceMode inplace_mode)
 
virtual UnchangedOr< PrimExpr > Mutate_ (const prim::MulNode *node, InplaceMode inplace_mode)
 
virtual UnchangedOr< PrimExpr > Mutate_ (const prim::DivNode *node, InplaceMode inplace_mode)
 
virtual UnchangedOr< PrimExpr > Mutate_ (const prim::ModNode *node, InplaceMode inplace_mode)
 
virtual UnchangedOr< PrimExpr > Mutate_ (const prim::FloorDivNode *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::MaxNode *node, InplaceMode inplace_mode)
 
virtual UnchangedOr< PrimExpr > Mutate_ (const prim::EQNode *node, InplaceMode inplace_mode)
 
virtual UnchangedOr< PrimExpr > Mutate_ (const prim::NENode *node, InplaceMode inplace_mode)
 
virtual UnchangedOr< PrimExpr > Mutate_ (const prim::LTNode *node, InplaceMode inplace_mode)
 
virtual UnchangedOr< PrimExpr > Mutate_ (const prim::LENode *node, InplaceMode inplace_mode)
 
virtual UnchangedOr< PrimExpr > Mutate_ (const prim::GTNode *node, InplaceMode inplace_mode)
 
virtual UnchangedOr< PrimExpr > Mutate_ (const prim::GENode *node, InplaceMode inplace_mode)
 
virtual UnchangedOr< PrimExpr > Mutate_ (const prim::AndNode *node, InplaceMode inplace_mode)
 
virtual UnchangedOr< PrimExpr > Mutate_ (const prim::OrNode *node, InplaceMode inplace_mode)
 
virtual UnchangedOr< PrimExpr > Mutate_ (const prim::NotNode *node, InplaceMode inplace_mode)
 
virtual UnchangedOr< PrimExpr > Mutate_ (const prim::SelectNode *node, InplaceMode inplace_mode)
 
virtual UnchangedOr< PrimExpr > Mutate_ (const prim::LetNode *node, InplaceMode inplace_mode)
 
virtual UnchangedOr< PrimExpr > Mutate_ (const prim::RampNode *node, InplaceMode inplace_mode)
 
virtual UnchangedOr< PrimExpr > Mutate_ (const prim::BroadcastNode *node, InplaceMode inplace_mode)
 
virtual UnchangedOr< PrimExpr > Mutate_ (const prim::ShuffleNode *node, InplaceMode inplace_mode)
 
virtual UnchangedOr< ffi::Any > Mutate (ffi::AnyView value, InplaceMode inplace_mode=InplaceMode::kDisallow)
 Construct a mutator with the core expression hooks.
 
- Public Member Functions inherited from tvm::ObjectMutator
 ObjectMutator ()
 Construct a mutator using structural fallback for every object.
 
 ObjectMutator (const ObjectMutator &other)=delete
 
ObjectMutator & operator= (const ObjectMutator &other)=delete
 
Expected< UnchangedOr< ffi::Any > > MutateExpected (ffi::AnyView value, InplaceMode inplace_mode=InplaceMode::kDisallow) noexcept
 Adapt the virtual throwing entrypoint to the structural ABI.
 
ffi::Any VarRemapGet (ffi::AnyView var)
 Look up a variable replacement, throwing on failure.
 
void VarRemapSet (ffi::AnyView var, ffi::AnyView value)
 Record a variable replacement, throwing on failure.
 
TVM_FFI_INLINE Expected< ffi::Any > VarRemapGetExpected (ffi::AnyView var) noexcept
 Look up a replacement in the variable-remap environment.
 
TVM_FFI_INLINE Expected< void > VarRemapSetExpected (ffi::AnyView var, ffi::AnyView mapped_value) noexcept
 Record a replacement in the variable-remap environment.
 

Protected Member Functions

 ExprMutator (const VTable *vtable)
 Construct a mutator with an extended native dispatch table.
 
- Protected Member Functions inherited from tvm::ObjectMutator
 ObjectMutator (const VTable *vtable)
 Construct a mutator with a finalized native dispatch table.
 

Static Protected Member Functions

static UnchangedOr< Expr > ReinferMutatedCallType (UnchangedOr< Expr > mutated, const CallNode *original, InplaceMode inplace_mode)
 Reinfer the result type of a Call after ordinary mutation.
 
static void InitVTable (VTable *vtable)
 Register core expression hooks in a fresh mutable table.
 
- Static Protected Member Functions inherited from tvm::ObjectMutator
static void InitVTable (VTable *vtable)
 Initialize the base registrations in a fresh mutable table.
 
template<typename Self , typename Node >
static void SetDispatch (VTable *vtable)
 Register an exact node type in a fresh table initialized by its parent. Derived node types require separate registrations.
 

Additional Inherited Members

- Protected Types inherited from tvm::ObjectMutator
using VTable = ObjectFunctor< UnchangedOr< ffi::Any >(const ffi::Object *, ObjectMutator *, InplaceMode)>
 Exact native dispatch table with owning replacement results.
 

Detailed Description

Structural Expr mutator with native overrides for core expressions and structural fallback for other objects.

Prefer StructuralMap for common cases; use ExprMutator for extensive per-kind customization or optimization. The default Var hook consults the inherited remap before visiting definition types.

Native hooks match exact node types; derived node types need their own registrations. Existing hooks only require overriding. For an extra MyExprNode derived from ExprNode, initialize an inherited table and register the new virtual hook:

class MyExprMutator : public ExprMutator {
public:
using ExprMutator::Mutate_;
virtual UnchangedOr<Expr> Mutate_(const MyExprNode* node, InplaceMode
inplace_mode);
protected:
static void InitVTable(VTable* vtable) {
ExprMutator::InitVTable(vtable);
SetDispatch<MyExprMutator, MyExprNode>(vtable);
}
};
Structural Expr mutator with native overrides for core expressions and structural fallback for other ...
Definition expr_functor.h:431
A dynamically dispatched functor on the type of the first argument.
Definition object_functor.h:85
#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

Use tvm::ExprMutator explicitly when dialect mutators are also in scope.

Constructor & Destructor Documentation

◆ ExprMutator()

tvm::ExprMutator::ExprMutator ( const VTable *  vtable)
inlineexplicitprotected

Construct a mutator with an extended native dispatch table.

Parameters
vtableThe finalized table, which must outlive this mutator.

Member Function Documentation

◆ InitVTable()

static void tvm::ExprMutator::InitVTable ( VTable *  vtable)
staticprotected

Register core expression hooks in a fresh mutable table.

Parameters
vtableThe table to initialize before adding derived registrations.

◆ Mutate() [1/3]

TVM_FFI_INLINE UnchangedOr< Expr > tvm::ExprMutator::Mutate ( const Expr &  expr,
InplaceMode  inplace_mode = InplaceMode::kDisallow 
)
inline

Mutate an expression, preserving its expression category.

Parameters
exprThe borrowed expression.
inplace_modeInherited mutation permission.
Returns
Unchanged or an owning expression replacement.
Note
Calls the virtual AnyView entry. Overrides must preserve Expr; the result storage is transferred without a runtime type check.

◆ Mutate() [2/3]

TVM_FFI_INLINE UnchangedOr< PrimExpr > tvm::ExprMutator::Mutate ( const PrimExpr &  expr,
InplaceMode  inplace_mode = InplaceMode::kDisallow 
)
inline

Mutate a primitive expression, preserving its expression category.

Parameters
exprThe borrowed primitive expression.
inplace_modeInherited mutation permission.
Returns
Unchanged or an owning primitive expression replacement.
Note
Calls the virtual AnyView entry. Overrides must preserve PrimExpr; the result storage is transferred without a runtime type check.

◆ Mutate() [3/3]

virtual UnchangedOr< ffi::Any > tvm::ObjectMutator::Mutate ( ffi::AnyView  value,
InplaceMode  inplace_mode = InplaceMode::kDisallow 
)
inlinevirtual

Construct a mutator with the core expression hooks.

Reimplemented from tvm::ObjectMutator.

◆ Mutate_() [1/44]

virtual UnchangedOr< Expr > tvm::ExprMutator::Mutate_ ( const CallNode *  node,
InplaceMode  inplace_mode 
)
virtual

◆ Mutate_() [2/44]

virtual UnchangedOr< Expr > tvm::ExprMutator::Mutate_ ( const DataTypeImmNode *  node,
InplaceMode  inplace_mode 
)
virtual

◆ Mutate_() [3/44]

virtual UnchangedOr< PrimExpr > tvm::ExprMutator::Mutate_ ( const FloatImmNode *  node,
InplaceMode  inplace_mode 
)
virtual

◆ Mutate_() [4/44]

virtual UnchangedOr< Expr > tvm::ExprMutator::Mutate_ ( const GenericConstNode *  node,
InplaceMode  inplace_mode 
)
virtual

◆ Mutate_() [5/44]

virtual UnchangedOr< Expr > tvm::ExprMutator::Mutate_ ( const GlobalVarNode *  node,
InplaceMode  inplace_mode 
)
virtual

◆ Mutate_() [6/44]

virtual UnchangedOr< PrimExpr > tvm::ExprMutator::Mutate_ ( const IntImmNode *  node,
InplaceMode  inplace_mode 
)
virtual

◆ Mutate_() [7/44]

virtual UnchangedOr< Expr > tvm::ExprMutator::Mutate_ ( const OpaqueExprNode *  node,
InplaceMode  inplace_mode 
)
virtual

◆ Mutate_() [8/44]

virtual UnchangedOr< Expr > tvm::ExprMutator::Mutate_ ( const OpNode *  node,
InplaceMode  inplace_mode 
)
virtual

◆ Mutate_() [9/44]

virtual UnchangedOr< PrimExpr > tvm::ExprMutator::Mutate_ ( const prim::AddNode *  node,
InplaceMode  inplace_mode 
)
virtual

◆ Mutate_() [10/44]

virtual UnchangedOr< PrimExpr > tvm::ExprMutator::Mutate_ ( const prim::AndNode *  node,
InplaceMode  inplace_mode 
)
virtual

◆ Mutate_() [11/44]

virtual UnchangedOr< PrimExpr > tvm::ExprMutator::Mutate_ ( const prim::BitwiseAndNode *  node,
InplaceMode  inplace_mode 
)
virtual

◆ Mutate_() [12/44]

virtual UnchangedOr< PrimExpr > tvm::ExprMutator::Mutate_ ( const prim::BitwiseNotNode *  node,
InplaceMode  inplace_mode 
)
virtual

◆ Mutate_() [13/44]

virtual UnchangedOr< PrimExpr > tvm::ExprMutator::Mutate_ ( const prim::BitwiseOrNode *  node,
InplaceMode  inplace_mode 
)
virtual

◆ Mutate_() [14/44]

virtual UnchangedOr< PrimExpr > tvm::ExprMutator::Mutate_ ( const prim::BitwiseXorNode *  node,
InplaceMode  inplace_mode 
)
virtual

◆ Mutate_() [15/44]

virtual UnchangedOr< PrimExpr > tvm::ExprMutator::Mutate_ ( const prim::BroadcastNode *  node,
InplaceMode  inplace_mode 
)
virtual

◆ Mutate_() [16/44]

virtual UnchangedOr< PrimExpr > tvm::ExprMutator::Mutate_ ( const prim::CastNode *  node,
InplaceMode  inplace_mode 
)
virtual

◆ Mutate_() [17/44]

virtual UnchangedOr< PrimExpr > tvm::ExprMutator::Mutate_ ( const prim::DivNode *  node,
InplaceMode  inplace_mode 
)
virtual

◆ Mutate_() [18/44]

virtual UnchangedOr< PrimExpr > tvm::ExprMutator::Mutate_ ( const prim::EQNode *  node,
InplaceMode  inplace_mode 
)
virtual

◆ Mutate_() [19/44]

virtual UnchangedOr< PrimExpr > tvm::ExprMutator::Mutate_ ( const prim::FloorDivNode *  node,
InplaceMode  inplace_mode 
)
virtual

◆ Mutate_() [20/44]

virtual UnchangedOr< PrimExpr > tvm::ExprMutator::Mutate_ ( const prim::FloorModNode *  node,
InplaceMode  inplace_mode 
)
virtual

◆ Mutate_() [21/44]

virtual UnchangedOr< PrimExpr > tvm::ExprMutator::Mutate_ ( const prim::GENode *  node,
InplaceMode  inplace_mode 
)
virtual

◆ Mutate_() [22/44]

virtual UnchangedOr< PrimExpr > tvm::ExprMutator::Mutate_ ( const prim::GTNode *  node,
InplaceMode  inplace_mode 
)
virtual

◆ Mutate_() [23/44]

virtual UnchangedOr< PrimExpr > tvm::ExprMutator::Mutate_ ( const prim::LENode *  node,
InplaceMode  inplace_mode 
)
virtual

◆ Mutate_() [24/44]

virtual UnchangedOr< PrimExpr > tvm::ExprMutator::Mutate_ ( const prim::LetNode *  node,
InplaceMode  inplace_mode 
)
virtual

◆ Mutate_() [25/44]

virtual UnchangedOr< PrimExpr > tvm::ExprMutator::Mutate_ ( const prim::LShiftNode *  node,
InplaceMode  inplace_mode 
)
virtual

◆ Mutate_() [26/44]

virtual UnchangedOr< PrimExpr > tvm::ExprMutator::Mutate_ ( const prim::LTNode *  node,
InplaceMode  inplace_mode 
)
virtual

◆ Mutate_() [27/44]

virtual UnchangedOr< PrimExpr > tvm::ExprMutator::Mutate_ ( const prim::MaxNode *  node,
InplaceMode  inplace_mode 
)
virtual

◆ Mutate_() [28/44]

virtual UnchangedOr< PrimExpr > tvm::ExprMutator::Mutate_ ( const prim::MinNode *  node,
InplaceMode  inplace_mode 
)
virtual

◆ Mutate_() [29/44]

virtual UnchangedOr< PrimExpr > tvm::ExprMutator::Mutate_ ( const prim::ModNode *  node,
InplaceMode  inplace_mode 
)
virtual

◆ Mutate_() [30/44]

virtual UnchangedOr< PrimExpr > tvm::ExprMutator::Mutate_ ( const prim::MulNode *  node,
InplaceMode  inplace_mode 
)
virtual

◆ Mutate_() [31/44]

virtual UnchangedOr< PrimExpr > tvm::ExprMutator::Mutate_ ( const prim::NENode *  node,
InplaceMode  inplace_mode 
)
virtual

◆ Mutate_() [32/44]

virtual UnchangedOr< PrimExpr > tvm::ExprMutator::Mutate_ ( const prim::NotNode *  node,
InplaceMode  inplace_mode 
)
virtual

◆ Mutate_() [33/44]

virtual UnchangedOr< PrimExpr > tvm::ExprMutator::Mutate_ ( const prim::OrNode *  node,
InplaceMode  inplace_mode 
)
virtual

◆ Mutate_() [34/44]

virtual UnchangedOr< PrimExpr > tvm::ExprMutator::Mutate_ ( const prim::RampNode *  node,
InplaceMode  inplace_mode 
)
virtual

◆ Mutate_() [35/44]

virtual UnchangedOr< PrimExpr > tvm::ExprMutator::Mutate_ ( const prim::RShiftNode *  node,
InplaceMode  inplace_mode 
)
virtual

◆ Mutate_() [36/44]

virtual UnchangedOr< PrimExpr > tvm::ExprMutator::Mutate_ ( const prim::SelectNode *  node,
InplaceMode  inplace_mode 
)
virtual

◆ Mutate_() [37/44]

virtual UnchangedOr< PrimExpr > tvm::ExprMutator::Mutate_ ( const prim::ShuffleNode *  node,
InplaceMode  inplace_mode 
)
virtual

◆ Mutate_() [38/44]

virtual UnchangedOr< PrimExpr > tvm::ExprMutator::Mutate_ ( const prim::SubNode *  node,
InplaceMode  inplace_mode 
)
virtual

◆ Mutate_() [39/44]

virtual UnchangedOr< Expr > tvm::ExprMutator::Mutate_ ( const StringImmNode *  node,
InplaceMode  inplace_mode 
)
virtual

◆ Mutate_() [40/44]

virtual UnchangedOr< PrimExpr > tvm::ExprMutator::Mutate_ ( const TensorLoadNode *  node,
InplaceMode  inplace_mode 
)
virtual

◆ Mutate_() [41/44]

virtual UnchangedOr< Expr > tvm::ExprMutator::Mutate_ ( const TensorRegionNode *  node,
InplaceMode  inplace_mode 
)
virtual

◆ Mutate_() [42/44]

virtual UnchangedOr< Expr > tvm::ExprMutator::Mutate_ ( const TupleGetItemNode *  node,
InplaceMode  inplace_mode 
)
virtual

◆ Mutate_() [43/44]

virtual UnchangedOr< Expr > tvm::ExprMutator::Mutate_ ( const TupleNode *  node,
InplaceMode  inplace_mode 
)
virtual

◆ Mutate_() [44/44]

virtual UnchangedOr< Expr > tvm::ExprMutator::Mutate_ ( const VarNode *  node,
InplaceMode  inplace_mode 
)
virtual

◆ ReinferMutatedCallType()

static UnchangedOr< Expr > tvm::ExprMutator::ReinferMutatedCallType ( UnchangedOr< Expr >  mutated,
const CallNode *  original,
InplaceMode  inplace_mode 
)
staticprotected

Reinfer the result type of a Call after ordinary mutation.

Parameters
mutatedThe ordinary mutation result, or Unchanged for the original Call.
originalThe borrowed Call before ordinary mutation.
inplace_modePermission to modify the original Call in place.
Returns
The combined mutation result, preserving Unchanged when possible.
Note
A unique replacement Call may be updated in place even when the original could not be. Inference errors propagate to the caller.

The documentation for this class was generated from the following file: