tvm
|
Variable Table manages mapping from variable object to ExprDoc during the process of printing TVMScript. More...
#include <var_table.h>
Public Types | |
using | DocFactory = std::function< ExprDoc()> |
![]() | |
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< ExprDoc > | GetVarDoc (const ObjectRef &obj, const ObjectPath &object_path) const |
Get the doc for variable. More... | |
template<typename TObjectRef > | |
Optional< ExprDoc > | GetVarDoc (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) | |
![]() | |
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) | |
Object & | operator= (const Object &other) |
Object & | operator= (Object &&other) |
Static Public Attributes | |
static constexpr const char * | _type_key = "script.printer.VarTable" |
![]() | |
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 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 () |
![]() | |
void | IncRef () |
developer function, increases reference counter. More... | |
void | DecRef () |
developer function, decrease reference counter. More... | |
![]() | |
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... | |
![]() | |
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... | |
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.
using tvm::script::printer::VarTableNode::DocFactory = std::function<ExprDoc()> |
IdDoc tvm::script::printer::VarTableNode::Define | ( | const ObjectRef & | obj, |
const String & | name_hint, | ||
const ObjectPath & | object_path, | ||
const Frame & | frame | ||
) |
Define variable by name.
obj | The variable object. |
name_hint | The hint for variable name. |
object_path | The object_path for the returned ExprDoc. |
frame | The frame that this variable is defined in. |
This function will rename the variable to avoid name conflict with other variables in the table.
|
inline |
Define variable by name.
obj | The variable object. |
name_hint | The hint for variable name. |
frame | The frame that this variable is defined in. |
This is a shortcut version of Define
which accepts a traced string.
void tvm::script::printer::VarTableNode::DefineByDoc | ( | const ObjectRef & | obj, |
DocFactory | doc_factory, | ||
const Frame & | frame | ||
) |
Define variable by doc factory.
obj | The variable object. |
doc_factory | The function to return an ExprDoc object for this variable. |
frame | The 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.
Optional<ExprDoc> tvm::script::printer::VarTableNode::GetVarDoc | ( | const ObjectRef & | obj, |
const ObjectPath & | object_path | ||
) | const |
Get the doc for variable.
obj | The variable object. |
object_path | The object path for the variable. |
|
inline |
Get the doc for variable.
obj | The traced variable object. |
bool tvm::script::printer::VarTableNode::IsVarDefined | ( | const ObjectRef & | obj | ) | const |
Check if a variable exists in the table.
obj | The variable object. |
tvm::script::printer::VarTableNode::TVM_DECLARE_FINAL_OBJECT_INFO | ( | VarTableNode | , |
Object | |||
) |
|
inline |
|
static |