Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion 3rdparty/tvm-ffi
Submodule tvm-ffi updated 60 files
+1 −0 CMakeLists.txt
+1 −1 README.md
+13 −2 addons/torch_c_dlpack_ext/torch_c_dlpack_ext/core.py
+24 −16 addons/tvm_ffi_orcjit/CMakeLists.txt
+45 −9 addons/tvm_ffi_orcjit/python/tvm_ffi_orcjit/session.py
+70 −0 addons/tvm_ffi_orcjit/src/ffi/llvm_patches/README.md
+162 −0 addons/tvm_ffi_orcjit/src/ffi/llvm_patches/gotpcrelx_fix.cc
+92 −0 addons/tvm_ffi_orcjit/src/ffi/llvm_patches/gotpcrelx_fix.h
+258 −0 addons/tvm_ffi_orcjit/src/ffi/llvm_patches/init_fini_plugin.cc
+123 −0 addons/tvm_ffi_orcjit/src/ffi/llvm_patches/init_fini_plugin.h
+91 −0 addons/tvm_ffi_orcjit/src/ffi/llvm_patches/macho_cxa_atexit_shim.cc
+119 −0 addons/tvm_ffi_orcjit/src/ffi/llvm_patches/macho_cxa_atexit_shim.h
+131 −0 addons/tvm_ffi_orcjit/src/ffi/llvm_patches/win_coff_pdata_strip.cc
+83 −0 addons/tvm_ffi_orcjit/src/ffi/llvm_patches/win_coff_pdata_strip.h
+154 −0 addons/tvm_ffi_orcjit/src/ffi/llvm_patches/win_dll_import_generator.cc
+93 −0 addons/tvm_ffi_orcjit/src/ffi/llvm_patches/win_dll_import_generator.h
+58 −34 addons/tvm_ffi_orcjit/src/ffi/orcjit_dylib.cc
+13 −0 addons/tvm_ffi_orcjit/src/ffi/orcjit_dylib.h
+107 −631 addons/tvm_ffi_orcjit/src/ffi/orcjit_memory_manager.cc
+79 −170 addons/tvm_ffi_orcjit/src/ffi/orcjit_memory_manager.h
+106 −650 addons/tvm_ffi_orcjit/src/ffi/orcjit_session.cc
+29 −5 addons/tvm_ffi_orcjit/src/ffi/orcjit_session.h
+769 −0 addons/tvm_ffi_orcjit/src/ffi/orcjit_slab.cc
+324 −0 addons/tvm_ffi_orcjit/src/ffi/orcjit_slab.h
+397 −0 addons/tvm_ffi_orcjit/tests/test_basic.py
+119 −108 addons/tvm_ffi_orcjit/tests/test_memory_manager.py
+57 −15 docs/concepts/structural_eq_hash.rst
+4 −1 docs/conf.py
+38 −0 include/tvm/ffi/base_details.h
+67 −3 include/tvm/ffi/c_api.h
+17 −3 include/tvm/ffi/error.h
+28 −0 include/tvm/ffi/extra/dataclass.h
+255 −0 include/tvm/ffi/extra/visit_error_context.h
+1 −1 include/tvm/ffi/function.h
+135 −3 include/tvm/ffi/reflection/registry.h
+14 −14 python/tvm_ffi/_optional_torch_c_dlpack.py
+10 −1 python/tvm_ffi/cpp/extension.py
+7 −1 python/tvm_ffi/cython/base.pxi
+17 −0 python/tvm_ffi/cython/error.pxi
+5 −3 python/tvm_ffi/cython/object.pxi
+45 −20 python/tvm_ffi/cython/tvm_ffi_python_helpers.h
+8 −2 python/tvm_ffi/cython/type_info.pxi
+24 −6 python/tvm_ffi/dataclasses/field.py
+58 −24 python/tvm_ffi/dataclasses/py_class.py
+1 −1 python/tvm_ffi/registry.py
+19 −3 rust/tvm-ffi/src/macros.rs
+2 −0 src/ffi/backtrace.cc
+1 −0 src/ffi/error.cc
+70 −47 src/ffi/extra/structural_equal.cc
+84 −48 src/ffi/extra/structural_hash.cc
+331 −0 src/ffi/extra/visit_error_context.cc
+2 −2 src/ffi/function.cc
+193 −0 tests/cpp/extra/test_dataclass.cc
+64 −0 tests/cpp/extra/test_structural_equal_hash.cc
+652 −0 tests/cpp/extra/test_visit_error_context.cc
+110 −0 tests/cpp/test_reflection.cc
+76 −1 tests/cpp/testing_object.h
+129 −1 tests/python/test_dataclass_py_class.py
+22 −0 tests/python/test_dlpack_exchange_api.py
+79 −2 tests/python/test_optional_torch_c_dlpack.py
2 changes: 1 addition & 1 deletion include/tvm/ir/expr.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,11 @@
#ifndef TVM_IR_EXPR_H_
#define TVM_IR_EXPR_H_

#include <tvm/ffi/extra/dataclass.h>
#include <tvm/ffi/reflection/registry.h>
#include <tvm/ffi/string.h>
#include <tvm/ir/cast.h>
#include <tvm/ir/cow.h>
#include <tvm/ir/repr.h>
#include <tvm/ir/source_map.h>
#include <tvm/ir/type.h>
#include <tvm/script/printer/config.h>
Expand Down
72 changes: 0 additions & 72 deletions include/tvm/ir/repr.h

This file was deleted.

2 changes: 1 addition & 1 deletion include/tvm/relax/exec_builder.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,12 @@
#ifndef TVM_RELAX_EXEC_BUILDER_H_
#define TVM_RELAX_EXEC_BUILDER_H_

#include <tvm/ffi/extra/dataclass.h>
#include <tvm/ffi/extra/structural_equal.h>
#include <tvm/ffi/extra/structural_hash.h>
#include <tvm/ffi/function.h>
#include <tvm/ffi/reflection/registry.h>
#include <tvm/ir/expr.h>
#include <tvm/ir/repr.h>
#include <tvm/runtime/vm/bytecode.h>
#include <tvm/runtime/vm/executable.h>

Expand Down
9 changes: 6 additions & 3 deletions include/tvm/relax/expr.h
Original file line number Diff line number Diff line change
Expand Up @@ -574,7 +574,8 @@ class BindingNode : public ffi::Object {
namespace refl = tvm::ffi::reflection;
refl::ObjectDef<BindingNode>()
.def_ro("span", &BindingNode::span, refl::AttachFieldFlag::SEqHashIgnore())
.def_ro("var", &BindingNode::var, refl::AttachFieldFlag::SEqHashDef());
// TODO(tqchen): use SEqHashDefNonRecursive after the next pypi tvm-ffi release
.def_ro("var", &BindingNode::var, refl::AttachFieldFlag::SEqHashDefRecursive());
}

static constexpr TVMFFISEqHashKind _type_s_eq_hash_kind = kTVMFFISEqHashKindTreeNode;
Expand Down Expand Up @@ -616,7 +617,9 @@ class MatchCastNode : public BindingNode {
namespace refl = tvm::ffi::reflection;
refl::ObjectDef<MatchCastNode>()
.def_ro("value", &MatchCastNode::value)
.def_ro("struct_info", &MatchCastNode::struct_info, refl::AttachFieldFlag::SEqHashDef());
// TODO(tqchen): use SEqHashDefNonRecursive after the next pypi tvm-ffi release
.def_ro("struct_info", &MatchCastNode::struct_info,
refl::AttachFieldFlag::SEqHashDefRecursive());
}
TVM_FFI_DECLARE_OBJECT_INFO_FINAL("relax.expr.MatchCast", MatchCastNode, BindingNode);
};
Expand Down Expand Up @@ -822,7 +825,7 @@ class FunctionNode : public BaseFuncNode {
static void RegisterReflection() {
namespace refl = tvm::ffi::reflection;
refl::ObjectDef<FunctionNode>()
.def_ro("params", &FunctionNode::params, refl::AttachFieldFlag::SEqHashDef())
.def_ro("params", &FunctionNode::params, refl::AttachFieldFlag::SEqHashDefRecursive())
.def_ro("body", &FunctionNode::body)
.def_ro("ret_struct_info", &FunctionNode::ret_struct_info)
.def_ro("is_pure", &FunctionNode::is_pure);
Expand Down
2 changes: 1 addition & 1 deletion include/tvm/relax/struct_info.h
Original file line number Diff line number Diff line change
Expand Up @@ -294,7 +294,7 @@ class FuncStructInfoNode : public StructInfoNode {
static void RegisterReflection() {
namespace refl = tvm::ffi::reflection;
refl::ObjectDef<FuncStructInfoNode>()
.def_ro("params", &FuncStructInfoNode::params, refl::AttachFieldFlag::SEqHashDef())
.def_ro("params", &FuncStructInfoNode::params, refl::AttachFieldFlag::SEqHashDefRecursive())
.def_ro("ret", &FuncStructInfoNode::ret)
.def_ro("derive_func", &FuncStructInfoNode::derive_func)
.def_ro("purity", &FuncStructInfoNode::purity);
Expand Down
15 changes: 10 additions & 5 deletions include/tvm/tirx/buffer.h
Original file line number Diff line number Diff line change
Expand Up @@ -126,13 +126,18 @@ class BufferNode : public ffi::Object {
static void RegisterReflection() {
namespace refl = tvm::ffi::reflection;
refl::ObjectDef<BufferNode>()
.def_ro("data", &BufferNode::data, refl::AttachFieldFlag::SEqHashDef())
// TODO(tqchen): use SEqHashDefNonRecursive after the next pypi tvm-ffi release
.def_ro("data", &BufferNode::data, refl::AttachFieldFlag::SEqHashDefRecursive())
.def_ro("dtype", &BufferNode::dtype)
.def_ro("shape", &BufferNode::shape, refl::AttachFieldFlag::SEqHashDef())
.def_ro("strides", &BufferNode::strides, refl::AttachFieldFlag::SEqHashDef())
// TODO(tqchen): use SEqHashDefNonRecursive after the next pypi tvm-ffi release
.def_ro("shape", &BufferNode::shape, refl::AttachFieldFlag::SEqHashDefRecursive())
// TODO(tqchen): use SEqHashDefNonRecursive after the next pypi tvm-ffi release
.def_ro("strides", &BufferNode::strides, refl::AttachFieldFlag::SEqHashDefRecursive())
.def_ro("axis_separators", &BufferNode::axis_separators,
refl::AttachFieldFlag::SEqHashDef())
.def_ro("elem_offset", &BufferNode::elem_offset, refl::AttachFieldFlag::SEqHashDef())
refl::AttachFieldFlag::SEqHashDefRecursive())
// TODO(tqchen): use SEqHashDefNonRecursive after the next pypi tvm-ffi release
.def_ro("elem_offset", &BufferNode::elem_offset,
refl::AttachFieldFlag::SEqHashDefRecursive())
.def_ro("name", &BufferNode::name, refl::AttachFieldFlag::SEqHashIgnore())
.def_ro("data_alignment", &BufferNode::data_alignment)
.def_ro("offset_factor", &BufferNode::offset_factor)
Expand Down
2 changes: 1 addition & 1 deletion include/tvm/tirx/exec_scope.h
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ class ScopeIdDefNode : public ffi::Object {
static void RegisterReflection() {
namespace refl = tvm::ffi::reflection;
refl::ObjectDef<ScopeIdDefNode>()
.def_ro("def_ids", &ScopeIdDefNode::def_ids, refl::AttachFieldFlag::SEqHashDef())
.def_ro("def_ids", &ScopeIdDefNode::def_ids, refl::AttachFieldFlag::SEqHashDefRecursive())
.def_ro("extents", &ScopeIdDefNode::extents)
.def_ro("scope", &ScopeIdDefNode::scope)
.def_ro("preferred_extents", &ScopeIdDefNode::preferred_extents);
Expand Down
7 changes: 4 additions & 3 deletions include/tvm/tirx/expr.h
Original file line number Diff line number Diff line change
Expand Up @@ -698,7 +698,8 @@ class LetNode : public PrimExprNode {
static void RegisterReflection() {
namespace refl = tvm::ffi::reflection;
refl::ObjectDef<LetNode>()
.def_ro("var", &LetNode::var, refl::AttachFieldFlag::SEqHashDef())
// TODO(tqchen): use SEqHashDefNonRecursive after the next pypi tvm-ffi release
.def_ro("var", &LetNode::var, refl::AttachFieldFlag::SEqHashDefRecursive())
.def_ro("value", &LetNode::value)
.def_ro("body", &LetNode::body);
}
Expand Down Expand Up @@ -823,8 +824,8 @@ class CommReducerNode : public ffi::Object {
static void RegisterReflection() {
namespace refl = tvm::ffi::reflection;
refl::ObjectDef<CommReducerNode>()
.def_ro("lhs", &CommReducerNode::lhs, refl::AttachFieldFlag::SEqHashDef())
.def_ro("rhs", &CommReducerNode::rhs, refl::AttachFieldFlag::SEqHashDef())
.def_ro("lhs", &CommReducerNode::lhs, refl::AttachFieldFlag::SEqHashDefRecursive())
.def_ro("rhs", &CommReducerNode::rhs, refl::AttachFieldFlag::SEqHashDefRecursive())
.def_ro("result", &CommReducerNode::result)
.def_ro("identity_element", &CommReducerNode::identity_element)
.def_ro("span", &CommReducerNode::span, refl::AttachFieldFlag::SEqHashIgnore());
Expand Down
2 changes: 1 addition & 1 deletion include/tvm/tirx/function.h
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ class PrimFuncNode : public BaseFuncNode {
static void RegisterReflection() {
namespace refl = tvm::ffi::reflection;
refl::ObjectDef<PrimFuncNode>()
.def_ro("params", &PrimFuncNode::params, refl::AttachFieldFlag::SEqHashDef())
.def_ro("params", &PrimFuncNode::params, refl::AttachFieldFlag::SEqHashDefRecursive())
.def_ro("ret_type", &PrimFuncNode::ret_type)
.def_ro("buffer_map", &PrimFuncNode::buffer_map)
.def_ro("body", &PrimFuncNode::body);
Expand Down
2 changes: 1 addition & 1 deletion include/tvm/tirx/index_map.h
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,7 @@ class IndexMapNode : public ffi::Object {
namespace refl = tvm::ffi::reflection;
refl::ObjectDef<IndexMapNode>()
.def_ro("initial_indices", &IndexMapNode::initial_indices,
refl::AttachFieldFlag::SEqHashDef())
refl::AttachFieldFlag::SEqHashDefRecursive())
.def_ro("final_indices", &IndexMapNode::final_indices)
.def_ro("inverse_index_map", &IndexMapNode::inverse_index_map,
refl::AttachFieldFlag::SEqHashIgnore());
Expand Down
2 changes: 1 addition & 1 deletion include/tvm/tirx/predicate.h
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ class PredicateNode : public ffi::Object {
static void RegisterReflection() {
namespace refl = tvm::ffi::reflection;
refl::ObjectDef<PredicateNode>()
.def_ro("vars", &PredicateNode::vars, refl::AttachFieldFlag::SEqHashDef())
.def_ro("vars", &PredicateNode::vars, refl::AttachFieldFlag::SEqHashDefRecursive())
.def_ro("pred", &PredicateNode::pred);
}

Expand Down
10 changes: 6 additions & 4 deletions include/tvm/tirx/stmt.h
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,8 @@ class BindNode : public StmtNode {
static void RegisterReflection() {
namespace refl = tvm::ffi::reflection;
refl::ObjectDef<BindNode>()
.def_ro("var", &BindNode::var, refl::AttachFieldFlag::SEqHashDef())
// TODO(tqchen): use SEqHashDefNonRecursive after the next pypi tvm-ffi release
.def_ro("var", &BindNode::var, refl::AttachFieldFlag::SEqHashDefRecursive())
.def_ro("value", &BindNode::value);
}
TVM_FFI_DECLARE_OBJECT_INFO_FINAL("tirx.Bind", BindNode, StmtNode);
Expand Down Expand Up @@ -273,7 +274,8 @@ class AllocBufferNode : public StmtNode {
static void RegisterReflection() {
namespace refl = tvm::ffi::reflection;
refl::ObjectDef<AllocBufferNode>()
.def_ro("buffer", &AllocBufferNode::buffer, refl::AttachFieldFlag::SEqHashDef())
// TODO(tqchen): use SEqHashDefNonRecursive after the next pypi tvm-ffi release
.def_ro("buffer", &AllocBufferNode::buffer, refl::AttachFieldFlag::SEqHashDefRecursive())
.def_ro("annotations", &AllocBufferNode::annotations);
}
TVM_FFI_DECLARE_OBJECT_INFO_FINAL("tirx.AllocBuffer", AllocBufferNode, StmtNode);
Expand Down Expand Up @@ -619,7 +621,7 @@ class ForNode : public StmtNode {
static void RegisterReflection() {
namespace refl = tvm::ffi::reflection;
refl::ObjectDef<ForNode>()
.def_ro("loop_var", &ForNode::loop_var, refl::AttachFieldFlag::SEqHashDef())
.def_ro("loop_var", &ForNode::loop_var, refl::AttachFieldFlag::SEqHashDefRecursive())
.def_ro("min", &ForNode::min)
.def_ro("extent", &ForNode::extent)
.def_ro("kind", &ForNode::kind)
Expand Down Expand Up @@ -879,7 +881,7 @@ class SBlockNode : public StmtNode {
static void RegisterReflection() {
namespace refl = tvm::ffi::reflection;
refl::ObjectDef<SBlockNode>()
.def_ro("iter_vars", &SBlockNode::iter_vars, refl::AttachFieldFlag::SEqHashDef())
.def_ro("iter_vars", &SBlockNode::iter_vars, refl::AttachFieldFlag::SEqHashDefRecursive())
.def_ro("reads", &SBlockNode::reads)
.def_ro("writes", &SBlockNode::writes)
.def_ro("name_hint", &SBlockNode::name_hint, refl::AttachFieldFlag::SEqHashIgnore())
Expand Down
2 changes: 1 addition & 1 deletion include/tvm/tirx/var.h
Original file line number Diff line number Diff line change
Expand Up @@ -279,7 +279,7 @@ class IterVarNode : public PrimExprConvertibleNode {
namespace refl = tvm::ffi::reflection;
refl::ObjectDef<IterVarNode>()
.def_ro("dom", &IterVarNode::dom)
.def_ro("var", &IterVarNode::var, refl::AttachFieldFlag::SEqHashDef())
.def_ro("var", &IterVarNode::var, refl::AttachFieldFlag::SEqHashDefRecursive())
.def_ro("iter_type", &IterVarNode::iter_type)
.def_ro("thread_tag", &IterVarNode::thread_tag);
}
Expand Down
10 changes: 10 additions & 0 deletions python/tvm/ir/attrs.py
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,16 @@ def __getitem__(self, item):
class DictAttrs(Attrs):
"""Dictionary attributes."""

@property
def __dict__(self):
"""Return the underlying key-value map as a Python dict.

Defined explicitly so that tvm_ffi's _add_class_attrs skips registering
the C++ reflection field named '__dict__' (Python forbids adding a class
attribute named '__dict__' via setattr on extension-type subclasses).
"""
return dict(self._dict())

def _dict(self):
"""Get internal dict"""
return _ffi_api.DictAttrsGetDict(self)
Expand Down
19 changes: 8 additions & 11 deletions src/ir/repr.cc → src/ir/access_path_repr.cc
Original file line number Diff line number Diff line change
Expand Up @@ -18,30 +18,27 @@
*/

/*!
* \file ir/repr.cc
* \brief Implements Dump helpers and FFI registration for ffi-repr-based printing.
* \file ir/access_path_repr.cc
* \brief FFI registration for ffi-repr-based printing.
*
* The legacy ReprPrinter has been replaced by ffi::ReprPrint. This file:
* - Implements the Dump() debug helpers (they call ffi::ReprPrint).
* This file:
* - Registers node.AsRepr (for backward Python compatibility) via ffi::ReprPrint.
* - Registers __ffi_repr__ hooks for ffi::reflection::AccessPath and AccessStep.
* - Registers __ffi_repr__ hooks for ffi::reflection::AccessPath and AccessStep
* so that ffi.ReprPrint formats them as concise "<root>.field[idx]" strings.
*
* Note: tvm::Dump() has been removed (zero in-tree callers). Use
* tvm::ffi::ReprPrint(any) directly from gdb instead.
*/
#include <tvm/ffi/cast.h>
#include <tvm/ffi/extra/dataclass.h>
#include <tvm/ffi/function.h>
#include <tvm/ffi/reflection/access_path.h>
#include <tvm/ffi/reflection/registry.h>
#include <tvm/ir/repr.h>
#include <tvm/runtime/device_api.h>

#include <sstream>

namespace tvm {

void Dump(const ffi::ObjectRef& n) { std::cerr << ffi::ReprPrint(ffi::Any(n)) << "\n"; }

void Dump(const ffi::Object* n) { Dump(ffi::GetRef<ffi::ObjectRef>(n)); }

TVM_FFI_STATIC_INIT_BLOCK() {
namespace refl = tvm::ffi::reflection;
// node.AsRepr: backward-compatible Python entry point.
Expand Down
2 changes: 1 addition & 1 deletion src/ir/instrument.cc
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,10 @@
* \file src/ir/instrument.cc
* \brief Infrastructure for instrumentation.
*/
#include <tvm/ffi/extra/dataclass.h>
#include <tvm/ffi/function.h>
#include <tvm/ffi/reflection/registry.h>
#include <tvm/ir/instrument.h>
#include <tvm/ir/repr.h>
#include <tvm/ir/transform.h>
#include <tvm/runtime/logging.h>

Expand Down
2 changes: 1 addition & 1 deletion src/ir/transform.cc
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,11 @@
* \file src/ir/transform.cc
* \brief Infrastructure for transformation passes.
*/
#include <tvm/ffi/extra/dataclass.h>
#include <tvm/ffi/extra/structural_hash.h>
#include <tvm/ffi/function.h>
#include <tvm/ffi/reflection/registry.h>
#include <tvm/ffi/rvalue_ref.h>
#include <tvm/ir/repr.h>
#include <tvm/ir/transform.h>
#include <tvm/relax/expr.h>
#include <tvm/runtime/device_api.h>
Expand Down
1 change: 0 additions & 1 deletion src/relax/ir/dataflow_pattern.cc
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@

#include <tvm/ffi/extra/dataclass.h>
#include <tvm/ffi/reflection/registry.h>
#include <tvm/ir/repr.h>
#include <tvm/relax/dataflow_pattern.h>
#include <tvm/relax/dataflow_pattern_functor.h>

Expand Down
2 changes: 1 addition & 1 deletion src/relax/ir/transform.cc
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,10 @@
* \brief Relax specific transformation passes.
*/
#include <tvm/ffi/cast.h>
#include <tvm/ffi/extra/dataclass.h>
#include <tvm/ffi/function.h>
#include <tvm/ffi/reflection/registry.h>
#include <tvm/ffi/rvalue_ref.h>
#include <tvm/ir/repr.h>
#include <tvm/relax/analysis.h>
#include <tvm/relax/expr_functor.h>
#include <tvm/relax/struct_info_functor.h>
Expand Down
1 change: 0 additions & 1 deletion src/script/printer/script_printer.cc
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@
#include <tvm/ffi/reflection/registry.h>
#include <tvm/ir/cast.h>
#include <tvm/ir/expr.h>
#include <tvm/ir/repr.h>
#include <tvm/script/printer/config.h>

#include <algorithm>
Expand Down
2 changes: 1 addition & 1 deletion src/tirx/ir/transform.cc
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,10 @@
* \file tirx/ir/transform.cc
* \brief TIR specific transformation passes.
*/
#include <tvm/ffi/extra/dataclass.h>
#include <tvm/ffi/function.h>
#include <tvm/ffi/reflection/registry.h>
#include <tvm/ffi/rvalue_ref.h>
#include <tvm/ir/repr.h>
#include <tvm/tirx/transform.h>

namespace tvm {
Expand Down
Loading