tvm
Classes | Public Types | Public Member Functions | Static Public Attributes | List of all members
tvm::script::printer::VarTableNode Class Reference

Variable Table manages mapping from variable object to ExprDoc during the process of printing TVMScript. More...

#include <var_table.h>

Inheritance diagram for tvm::script::printer::VarTableNode:
Collaboration diagram for tvm::script::printer::VarTableNode:

Public Types

using DocFactory = std::function< ExprDoc()>
 
- Public Types inherited from tvm::runtime::Object
typedef void(* FDeleter) (Object *self)
 Object deleter. More...
 
using RefCounterType = std::atomic< int32_t >
 

Public Member Functions

void VisitAttrs (AttrVisitor *)
 
IdDoc Define (const ObjectRef &obj, const String &name_hint, const ObjectPath &object_path, const Frame &frame)
 Define variable by name. More...
 
IdDoc Define (const ObjectRef &obj, const TracedObject< String > &name_hint, const Frame &frame)
 Define variable by name. More...
 
void DefineByDoc (const ObjectRef &obj, DocFactory doc_factory, const Frame &frame)
 Define variable by doc factory. More...
 
Optional< ExprDocGetVarDoc (const ObjectRef &obj, const ObjectPath &object_path) const
 Get the doc for variable. More...
 
template<typename TObjectRef >
Optional< ExprDocGetVarDoc (const TracedObject< TObjectRef > obj) const
 Get the doc for variable. More...
 
bool IsVarDefined (const ObjectRef &obj) const
 Check if a variable exists in the table. More...
 
 TVM_DECLARE_FINAL_OBJECT_INFO (VarTableNode, Object)
 
- Public Member Functions inherited from tvm::runtime::Object
uint32_t type_index () const
 
std::string GetTypeKey () const
 
size_t GetTypeKeyHash () const
 
template<typename TargetType >
bool IsInstance () const
 
bool unique () const
 
 Object ()
 
 Object (const Object &other)
 
 Object (Object &&other)
 
Objectoperator= (const Object &other)
 
Objectoperator= (Object &&other)
 

Static Public Attributes

static constexpr const char * _type_key = "script.printer.VarTable"
 
- Static Public Attributes inherited from tvm::runtime::Object
static constexpr const char * _type_key = "runtime.Object"
 
static constexpr bool _type_final = false
 
static constexpr uint32_t _type_child_slots = 0
 
static constexpr bool _type_child_slots_can_overflow = true
 
static constexpr bool _type_has_method_visit_attrs = true
 
static constexpr bool _type_has_method_sequal_reduce = false
 
static constexpr bool _type_has_method_shash_reduce = false
 
static constexpr uint32_t _type_index = TypeIndex::kDynamic
 

Additional Inherited Members

- Static Public Member Functions inherited from tvm::runtime::Object
static std::string TypeIndex2Key (uint32_t tindex)
 Get the type key of the corresponding index from runtime. More...
 
static size_t TypeIndex2KeyHash (uint32_t tindex)
 Get the type key hash of the corresponding index from runtime. More...
 
static uint32_t TypeKey2Index (const std::string &key)
 Get the type index of the corresponding key from runtime. More...
 
static uint32_t _GetOrAllocRuntimeTypeIndex ()
 
static uint32_t RuntimeTypeIndex ()
 
- Protected Member Functions inherited from tvm::runtime::Object
void IncRef ()
 developer function, increases reference counter. More...
 
void DecRef ()
 developer function, decrease reference counter. More...
 
- Static Protected Member Functions inherited from tvm::runtime::Object
static uint32_t GetOrAllocRuntimeTypeIndex (const std::string &key, uint32_t static_tindex, uint32_t parent_tindex, uint32_t type_child_slots, bool type_child_slots_can_overflow)
 Get the type index using type key. More...
 
- Protected Attributes inherited from tvm::runtime::Object
uint32_t type_index_ {0}
 Type index(tag) that indicates the type of the object. More...
 
RefCounterType ref_counter_ {0}
 The internal reference counter. More...
 
FDeleter deleter_ = nullptr
 deleter of this object to enable customized allocation. If the deleter is nullptr, no deletion will be performed. The creator of the object must always set the deleter field properly. More...
 

Detailed Description

Variable Table manages mapping from variable object to ExprDoc during the process of printing TVMScript.

The value type of this map is ExprDoc rather than IdDoc or String. It's because variables can be implicitly defined. For example in TIR buffer (tir::Buffer), buf->data is a variable, while its representation in TVMScript should be an expression x.data, where x is the variable for the buffer itself.

Member Typedef Documentation

◆ DocFactory

Member Function Documentation

◆ Define() [1/2]

IdDoc tvm::script::printer::VarTableNode::Define ( const ObjectRef obj,
const String name_hint,
const ObjectPath object_path,
const Frame frame 
)

Define variable by name.

Parameters
objThe variable object.
name_hintThe hint for variable name.
object_pathThe object_path for the returned ExprDoc.
frameThe frame that this variable is defined in.
Returns
The id doc for this variable.

This function will rename the variable to avoid name conflict with other variables in the table.

◆ Define() [2/2]

IdDoc tvm::script::printer::VarTableNode::Define ( const ObjectRef obj,
const TracedObject< String > &  name_hint,
const Frame frame 
)
inline

Define variable by name.

Parameters
objThe variable object.
name_hintThe hint for variable name.
frameThe frame that this variable is defined in.
Returns
The id doc for this variable.

This is a shortcut version of Define which accepts a traced string.

◆ DefineByDoc()

void tvm::script::printer::VarTableNode::DefineByDoc ( const ObjectRef obj,
DocFactory  doc_factory,
const Frame frame 
)

Define variable by doc factory.

Parameters
objThe variable object.
doc_factoryThe function to return an ExprDoc object for this variable.
frameThe frame that this variable is defined in.

This function is a special form of Define. Variable is mapped to ExprDoc rather than IdDoc. It's useful when a variable is implicitly defined without a name, like the buf->data in TIR, which should be mapped to AttrDoc(IdDoc("<buffer_name>"), "data").

This function takes a DocFactory instead of Doc. It's because GetVarDoc needs to return a new Doc object every time it's called, as the returned doc will have different soruce_path. Currently there isn't a good way to deep copy a TVMObject so VarTable needs to call a factory function to get a freshly-constructed Doc object every time GetVarDoc is called.

◆ GetVarDoc() [1/2]

Optional<ExprDoc> tvm::script::printer::VarTableNode::GetVarDoc ( const ObjectRef obj,
const ObjectPath object_path 
) const

Get the doc for variable.

Parameters
objThe variable object.
object_pathThe object path for the variable.
Returns
The doc for variable, if it exists in the table. Otherwise it returns NullOpt.

◆ GetVarDoc() [2/2]

template<typename TObjectRef >
Optional<ExprDoc> tvm::script::printer::VarTableNode::GetVarDoc ( const TracedObject< TObjectRef >  obj) const
inline

Get the doc for variable.

Parameters
objThe traced variable object.
Returns
The doc for variable, if it exists in the table. Otherwise it returns NullOpt.

◆ IsVarDefined()

bool tvm::script::printer::VarTableNode::IsVarDefined ( const ObjectRef obj) const

Check if a variable exists in the table.

Parameters
objThe variable object.
Returns
a boolean for whether variable exists.

◆ TVM_DECLARE_FINAL_OBJECT_INFO()

tvm::script::printer::VarTableNode::TVM_DECLARE_FINAL_OBJECT_INFO ( VarTableNode  ,
Object   
)

◆ VisitAttrs()

void tvm::script::printer::VarTableNode::VisitAttrs ( AttrVisitor )
inline

Member Data Documentation

◆ _type_key

constexpr const char* tvm::script::printer::VarTableNode::_type_key = "script.printer.VarTable"
static

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