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

IRDocsifier is the top-level interface in the IR->Doc process. More...

#include <ir_docsifier.h>

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

Classes

struct  VariableInfo
 Information about a variable, including its optional name and its doc creator. More...
 

Public Types

using DocCreator = std::function< ExprDoc()>
 A function that creates the doc for a variable. More...
 

Public Member Functions

 TVM_DECLARE_FINAL_OBJECT_INFO (IRDocsifierNode, Object)
 
IdDoc Define (const ObjectRef &obj, const Frame &frame, const String &name_hint)
 Define variable by name. More...
 
void Define (const ObjectRef &obj, const Frame &frame, DocCreator doc_factory)
 Define variable by doc factory. More...
 
Optional< ExprDocGetVarDoc (const ObjectRef &obj) const
 Get the doc for variable. More...
 
ExprDoc AddMetadata (const ffi::Any &obj)
 Add a TVM object to the metadata section. More...
 
void AddGlobalInfo (const String &name, const GlobalInfo &ginfo)
 Add a GlobalInfo to the global_infos map. More...
 
bool IsVarDefined (const ObjectRef &obj) const
 Check if a variable exists in the table. More...
 
void RemoveVar (const ObjectRef &obj)
 Remove the variable defined. More...
 
void SetCommonPrefix (const ObjectRef &root, ffi::TypedFunction< bool(ObjectRef)> is_var)
 Set the common prefix information of variable usage. More...
 
template<class TDoc = Doc>
TDoc AsDoc (const Any &obj, const AccessPath &path) const
 Transform the input object into TDoc. More...
 

Static Public Member Functions

static void RegisterReflection ()
 

Public Attributes

PrinterConfig cfg {nullptr}
 The configuration of the printer. More...
 
Array< Frameframes
 The stack of frames. More...
 
Array< String > dispatch_tokens
 The stack of dispatch tokens. More...
 
std::unordered_map< ObjectRef, VariableInfo, ObjectPtrHash, ObjectPtrEqual > obj2info
 Mapping from a var to its info. More...
 
std::unordered_map< String, Array< ffi::Any > > metadata
 Metadata printing. More...
 
std::unordered_map< String, Array< GlobalInfo > > global_infos
 GlobalInfo printing. More...
 
std::unordered_set< String > defined_names
 The variable names used already. More...
 
std::unordered_map< const Object *, std::vector< const Object * > > common_prefix
 Common prefixes of variable usages. More...
 
std::unordered_set< std::string > ir_usage
 The IR usages for headers printing. More...
 

Static Public Attributes

static constexpr const char * _type_key = "script.printer.IRDocsifier"
 

Detailed Description

IRDocsifier is the top-level interface in the IR->Doc process.

It provides methods to convert IR node object to Doc, operate on Frame objects and change dispatch tokens.

Member Typedef Documentation

◆ DocCreator

A function that creates the doc for a variable.

Member Function Documentation

◆ AddGlobalInfo()

void tvm::script::printer::IRDocsifierNode::AddGlobalInfo ( const String &  name,
const GlobalInfo ginfo 
)

Add a GlobalInfo to the global_infos map.

Parameters
nameThe name of key of global_infos.
ginfoThe GlobalInfo to be added.

◆ AddMetadata()

ExprDoc tvm::script::printer::IRDocsifierNode::AddMetadata ( const ffi::Any &  obj)

Add a TVM object to the metadata section.

◆ AsDoc()

template<class TDoc >
TDoc tvm::script::printer::IRDocsifierNode::AsDoc ( const Any &  obj,
const AccessPath path 
) const
inline

Transform the input object into TDoc.

Parameters
objThe object to be transformed.
pathThe path to this object.
Returns
The Doc object.

◆ Define() [1/2]

IdDoc tvm::script::printer::IRDocsifierNode::Define ( const ObjectRef &  obj,
const Frame frame,
const String &  name_hint 
)

Define variable by name.

Parameters
objThe variable object.
frameThe frame that this variable is defined in.
name_hintThe hint for variable name.
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]

void tvm::script::printer::IRDocsifierNode::Define ( const ObjectRef &  obj,
const Frame frame,
DocCreator  doc_factory 
)

Define variable by doc factory.

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

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 source_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()

Optional<ExprDoc> tvm::script::printer::IRDocsifierNode::GetVarDoc ( const ObjectRef &  obj) const

Get the doc for variable.

Parameters
objThe variable object.
Returns
The doc for variable, if it exists in the table. Otherwise it returns std::nullopt.

◆ IsVarDefined()

bool tvm::script::printer::IRDocsifierNode::IsVarDefined ( const ObjectRef &  obj) const

Check if a variable exists in the table.

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

◆ RegisterReflection()

static void tvm::script::printer::IRDocsifierNode::RegisterReflection ( )
inlinestatic

◆ RemoveVar()

void tvm::script::printer::IRDocsifierNode::RemoveVar ( const ObjectRef &  obj)

Remove the variable defined.

◆ SetCommonPrefix()

void tvm::script::printer::IRDocsifierNode::SetCommonPrefix ( const ObjectRef &  root,
ffi::TypedFunction< bool(ObjectRef)>  is_var 
)

Set the common prefix information of variable usage.

Parameters
rootThe root of the AST.
is_varA function that returns true if the given object is considered a variable.

◆ TVM_DECLARE_FINAL_OBJECT_INFO()

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

Member Data Documentation

◆ _type_key

constexpr const char* tvm::script::printer::IRDocsifierNode::_type_key = "script.printer.IRDocsifier"
staticconstexpr

◆ cfg

PrinterConfig tvm::script::printer::IRDocsifierNode::cfg {nullptr}

The configuration of the printer.

◆ common_prefix

std::unordered_map<const Object*, std::vector<const Object*> > tvm::script::printer::IRDocsifierNode::common_prefix

Common prefixes of variable usages.

◆ defined_names

std::unordered_set<String> tvm::script::printer::IRDocsifierNode::defined_names

The variable names used already.

◆ dispatch_tokens

Array<String> tvm::script::printer::IRDocsifierNode::dispatch_tokens

The stack of dispatch tokens.

The dispatch token on the top decides which dispatch function to use when converting IR node object to Doc.

◆ frames

Array<Frame> tvm::script::printer::IRDocsifierNode::frames

The stack of frames.

See also
FrameNode

◆ global_infos

std::unordered_map<String, Array<GlobalInfo> > tvm::script::printer::IRDocsifierNode::global_infos

GlobalInfo printing.

◆ ir_usage

std::unordered_set<std::string> tvm::script::printer::IRDocsifierNode::ir_usage

The IR usages for headers printing.

◆ metadata

std::unordered_map<String, Array<ffi::Any> > tvm::script::printer::IRDocsifierNode::metadata

Metadata printing.

◆ obj2info

std::unordered_map<ObjectRef, VariableInfo, ObjectPtrHash, ObjectPtrEqual> tvm::script::printer::IRDocsifierNode::obj2info

Mapping from a var to its info.


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