19 #ifndef TVM_SCRIPT_IR_BUILDER_BASE_H_
20 #define TVM_SCRIPT_IR_BUILDER_BASE_H_
22 #include <tvm/ffi/reflection/registry.h>
31 namespace ir_builder {
72 refl::ObjectDef<IRBuilderFrameNode>();
119 ICHECK(data_ !=
nullptr);
127 ICHECK(data_ !=
nullptr);
168 refl::ObjectDef<IRBuilderNode>()
182 template <
typename TFrame>
183 inline ffi::Optional<TFrame>
FindFrame()
const;
190 template <
typename TFrame>
197 template <
typename TObjectRef>
198 inline TObjectRef
Get()
const;
253 template <
class TObjectRef>
254 inline static TObjectRef
Name(ffi::String name, TObjectRef obj);
265 static void Name(ObjectRef node, ffi::String name);
270 template <
class TObjectRef>
273 return Downcast<TObjectRef>(obj);
276 template <
typename TFrame>
278 using TFrameNode =
typename TFrame::ContainerType;
279 for (
auto it =
frames.rbegin(); it !=
frames.rend(); ++it) {
280 if (
const TFrameNode* p = (*it).template as<TFrameNode>()) {
281 return ffi::GetRef<TFrame>(p);
287 template <
typename TFrame>
289 using TFrameNode =
typename TFrame::ContainerType;
290 if (!
frames.empty() &&
frames.back()->IsInstance<TFrameNode>()) {
291 return Downcast<TFrame>(
frames.back());
296 template <
typename TObjectRef>
298 using TObject =
typename TObjectRef::ContainerType;
299 CHECK(
result.defined()) <<
"IndexError: No result exists in IRBuilder yet";
300 const auto* n =
result.as<TObject>();
301 CHECK(n !=
nullptr) <<
"TypeError: IRBuilder result is not of type: " << TObject::_type_key;
302 return ffi::GetRef<TObjectRef>(n);
A dynamically dispatched functor on the type of the first argument.
Definition: functor.h:65
static constexpr const bool _type_mutable
Definition: base.h:76
TVM_FFI_DECLARE_OBJECT_INFO("script.ir_builder.IRBuilderFrame", IRBuilderFrameNode, runtime::Object)
std::vector< ffi::TypedFunction< void()> > callbacks
A list of callbacks used when exiting the frame.
Definition: base.h:68
virtual ~IRBuilderFrameNode()=default
Default destructor.
virtual void ExitWithScope()
The method called when exiting RAII scope.
virtual void EnterWithScope()
The method called when entering RAII scope.
void AddCallback(ffi::TypedFunction< void()> callback)
Add a callback method invoked when exiting the RAII scope.
static void RegisterReflection()
Definition: base.h:70
Managed reference to an IRBuilderFrameNode.
Definition: base.h:104
void EnterWithScope()
Redirected to IRBuilderFrameNode::EnterWithScope.
Definition: base.h:118
TVM_FFI_DEFINE_OBJECT_REF_METHODS_NOTNULLABLE(IRBuilderFrame, ObjectRef, IRBuilderFrameNode)
IRBuilderFrame(ObjectPtr< IRBuilderFrameNode > data)
Definition: base.h:111
IRBuilderFrame()=default
Disallow direct construction of this object.
void ExitWithScope()
Redirected to IRBuilderFrameNode::ExitWithScope.
Definition: base.h:126
A dialect-agnostic IRBuilder that constructs any IR of TVM. An idiomatic use of this class is to put ...
Definition: base.h:159
ffi::Optional< TFrame > FindFrame() const
Find a frame of the given type in the stack this->frames from top to bottom.
Definition: base.h:277
ffi::Optional< TFrame > GetLastFrame() const
Get the frame on top of the stack this->frames if its type is TFrame.
Definition: base.h:288
TObjectRef Get() const
Get the IR being constructed.
Definition: base.h:297
ffi::Optional< ObjectRef > result
The outcome of IR construction.
Definition: base.h:164
static constexpr const bool _type_mutable
Definition: base.h:173
ffi::Array< IRBuilderFrame > frames
A stack of context frames in the IRBuilder.
Definition: base.h:162
static void RegisterReflection()
Definition: base.h:166
TVM_FFI_DECLARE_OBJECT_INFO_FINAL("script.ir_builder.IRBuilder", IRBuilderNode, runtime::Object)
Managed reference to an IRBuilderNode.
Definition: base.h:205
static TObjectRef Name(ffi::String name, TObjectRef obj)
Give a string name to the obj
Definition: base.h:271
void ExitWithScope()
Exit the RAII scope.
static IRBuilder Current()
Get the current IRBuilder in the current thread-local scope.
void EnterWithScope()
Puts the current IRBuilder into a thread-local scope, which can be retrieved using IRBuilder::Current...
static bool IsInScope()
See if the current thread-local scope has an IRBuilder.
TVM_FFI_DEFINE_OBJECT_REF_METHODS_NOTNULLABLE(IRBuilder, ObjectRef, IRBuilderNode)
IRBuilder()
Creates an IRBuilder.
static void Name(ObjectRef node, ffi::String name)
Definition: repr_printer.h:91
Performance counters for profiling via the PAPI library.
Definition: analyzer.h:37
Definitions and helper macros for IR/AST nodes.