From f5985040523806eb4225aa088e99d726df355e2e Mon Sep 17 00:00:00 2001 From: tqchen Date: Mon, 13 Oct 2025 19:01:30 -0400 Subject: [PATCH 01/22] [FFI] Bump tvm-ffi dependency This PR bumps tvm-ffi dependency to latest --- 3rdparty/tvm-ffi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/3rdparty/tvm-ffi b/3rdparty/tvm-ffi index 4fefeb0f5913..58875b993304 160000 --- a/3rdparty/tvm-ffi +++ b/3rdparty/tvm-ffi @@ -1 +1 @@ -Subproject commit 4fefeb0f5913fc41cf860f517b9320f1bf1d0e98 +Subproject commit 58875b99330487e3629778f00a02c2278e3ea851 From d87a9ca6948019be59832fac233fd57f728214c3 Mon Sep 17 00:00:00 2001 From: tqchen Date: Mon, 13 Oct 2025 19:46:57 -0400 Subject: [PATCH 02/22] Fix types --- include/tvm/relax/nested_msg.h | 10 +++++++++- include/tvm/runtime/data_type.h | 4 ++++ src/runtime/vm/builtin.cc | 2 +- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/include/tvm/relax/nested_msg.h b/include/tvm/relax/nested_msg.h index aac3175d72df..77f001630f75 100644 --- a/include/tvm/relax/nested_msg.h +++ b/include/tvm/relax/nested_msg.h @@ -639,7 +639,7 @@ struct TypeTraits> : public TypeTraitsBase { } TVM_FFI_INLINE static relax::NestedMsg MoveFromAnyAfterCheck(TVMFFIAny* src) { - return relax::NestedMsg(details::AnyUnsafe::MoveTVMFFIAnyToAny(std::move(*src))); + return relax::NestedMsg(details::AnyUnsafe::MoveTVMFFIAnyToAny(src)); } static std::optional> TryCastFromAnyView(const TVMFFIAny* src) { @@ -673,6 +673,14 @@ struct TypeTraits> : public TypeTraitsBase { TVM_FFI_INLINE static std::string TypeStr() { return "NestedMsg<" + details::Type2Str::v() + ">"; } + + TVM_FFI_INLINE static std::string TypeSchema() { + std::ostringstream oss; + oss << R"({"type":"NestedMsg","args":[)"; + oss << details::TypeSchema::v(); + oss << "]}"; + return oss.str(); + } }; } // namespace ffi } // namespace tvm diff --git a/include/tvm/runtime/data_type.h b/include/tvm/runtime/data_type.h index 230f73747fad..0af3022bbd16 100644 --- a/include/tvm/runtime/data_type.h +++ b/include/tvm/runtime/data_type.h @@ -497,6 +497,10 @@ struct TypeTraits : public TypeTraitsBase { } TVM_FFI_INLINE static std::string TypeStr() { return ffi::StaticTypeKey::kTVMFFIDataType; } + + TVM_FFI_INLINE static std::string TypeSchema() { + return R"({"type":")" + std::string(ffi::StaticTypeKey::kTVMFFIDataType) + R"("})"; + } }; } // namespace ffi diff --git a/src/runtime/vm/builtin.cc b/src/runtime/vm/builtin.cc index d94d5676bb4c..13446a158f5d 100644 --- a/src/runtime/vm/builtin.cc +++ b/src/runtime/vm/builtin.cc @@ -735,7 +735,7 @@ int TVMBackendAnyListMoveFromPackedReturn(void* anylist, int index, TVMFFIAny* a using namespace tvm::runtime; TVM_FFI_SAFE_CALL_BEGIN(); auto* list = static_cast(anylist); - list[index] = tvm::ffi::details::AnyUnsafe::MoveTVMFFIAnyToAny(std::move(args[ret_offset])); + list[index] = tvm::ffi::details::AnyUnsafe::MoveTVMFFIAnyToAny(&args[ret_offset]); TVM_FFI_SAFE_CALL_END(); } } // extern "C" From ce48e01363382d3f3276140752cca12455f83d33 Mon Sep 17 00:00:00 2001 From: Junru Shao Date: Mon, 13 Oct 2025 20:22:18 -0700 Subject: [PATCH 03/22] update --- .gitmodules | 2 +- 3rdparty/tvm-ffi | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitmodules b/.gitmodules index 0513981e5886..e33133044793 100644 --- a/.gitmodules +++ b/.gitmodules @@ -24,4 +24,4 @@ url = https://github.com/madler/zlib.git [submodule "3rdparty/tvm-ffi"] path = 3rdparty/tvm-ffi - url = https://github.com/apache/tvm-ffi + url = https://github.com/junrushao/tvm-ffi diff --git a/3rdparty/tvm-ffi b/3rdparty/tvm-ffi index 58875b993304..ff2a251e9ba9 160000 --- a/3rdparty/tvm-ffi +++ b/3rdparty/tvm-ffi @@ -1 +1 @@ -Subproject commit 58875b99330487e3629778f00a02c2278e3ea851 +Subproject commit ff2a251e9ba9c9b5364d739434068c01e57a60be From 7c02480322500a84158db21fff8d3c20f6cec381 Mon Sep 17 00:00:00 2001 From: Junru Shao Date: Mon, 13 Oct 2025 21:39:08 -0700 Subject: [PATCH 04/22] update wrt libbacktrace --- 3rdparty/tvm-ffi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/3rdparty/tvm-ffi b/3rdparty/tvm-ffi index ff2a251e9ba9..139ecd217355 160000 --- a/3rdparty/tvm-ffi +++ b/3rdparty/tvm-ffi @@ -1 +1 @@ -Subproject commit ff2a251e9ba9c9b5364d739434068c01e57a60be +Subproject commit 139ecd217355f72c8e4804fded151b057b5b00d3 From 5d4a8aa5145b346c7c1ee0b2679321d176df6a3d Mon Sep 17 00:00:00 2001 From: tqchen Date: Tue, 14 Oct 2025 09:37:00 -0400 Subject: [PATCH 05/22] update ver --- 3rdparty/tvm-ffi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/3rdparty/tvm-ffi b/3rdparty/tvm-ffi index 139ecd217355..7b57a4664866 160000 --- a/3rdparty/tvm-ffi +++ b/3rdparty/tvm-ffi @@ -1 +1 @@ -Subproject commit 139ecd217355f72c8e4804fded151b057b5b00d3 +Subproject commit 7b57a46648662b11b483f252787db22ab701231f From 2701e6f2cb40cbb639ace55fd9809590c84dbd5d Mon Sep 17 00:00:00 2001 From: Junru Shao Date: Tue, 14 Oct 2025 09:54:05 -0700 Subject: [PATCH 06/22] Update TVM-FFI submodule URL to Apache repository --- .gitmodules | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitmodules b/.gitmodules index e33133044793..0513981e5886 100644 --- a/.gitmodules +++ b/.gitmodules @@ -24,4 +24,4 @@ url = https://github.com/madler/zlib.git [submodule "3rdparty/tvm-ffi"] path = 3rdparty/tvm-ffi - url = https://github.com/junrushao/tvm-ffi + url = https://github.com/apache/tvm-ffi From 6fd6b28871efa7c19a2110ead1f50b93ec342380 Mon Sep 17 00:00:00 2001 From: Junru Shao Date: Tue, 14 Oct 2025 17:52:34 -0700 Subject: [PATCH 07/22] upd --- 3rdparty/tvm-ffi | 2 +- include/tvm/runtime/tensor.h | 1 + src/relax/transform/fold_constant.cc | 2 +- src/runtime/contrib/random/mt_random_engine.cc | 9 +++++---- 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/3rdparty/tvm-ffi b/3rdparty/tvm-ffi index 7b57a4664866..da7007fda1b1 160000 --- a/3rdparty/tvm-ffi +++ b/3rdparty/tvm-ffi @@ -1 +1 @@ -Subproject commit 7b57a46648662b11b483f252787db22ab701231f +Subproject commit da7007fda1b1ece445cb66dbfbcf8c4bf8afb4bc diff --git a/include/tvm/runtime/tensor.h b/include/tvm/runtime/tensor.h index 3028723957e6..e32101aac2dd 100644 --- a/include/tvm/runtime/tensor.h +++ b/include/tvm/runtime/tensor.h @@ -74,6 +74,7 @@ class Tensor : public tvm::ffi::Tensor { static Tensor FromDLPackVersioned(DLManagedTensorVersioned* tensor) { return tvm::ffi::Tensor::FromDLPackVersioned(tensor, kAllocAlignment, true); } + inline const DLTensor* operator->() const { return this->get(); } /*! * \brief Copy data content from another array. * \param other The source array to be copied from. diff --git a/src/relax/transform/fold_constant.cc b/src/relax/transform/fold_constant.cc index 0892adcc1a3a..b714d4924359 100644 --- a/src/relax/transform/fold_constant.cc +++ b/src/relax/transform/fold_constant.cc @@ -272,7 +272,7 @@ class ConstantFolder : public ExprMutator { Constant constant = Downcast(arg); runtime::Tensor ndarray = constant->data; ICHECK_EQ(ndarray->device.device_type, kDLCPU); - ICHECK(ffi::IsContiguous(*ndarray.get())); + ICHECK(ndarray.IsContiguous()); ICHECK_EQ(ndarray->byte_offset, 0); ICHECK_EQ(ndarray->ndim, 1); const int64_t* data = static_cast(ndarray->data); diff --git a/src/runtime/contrib/random/mt_random_engine.cc b/src/runtime/contrib/random/mt_random_engine.cc index ce9b959a53cc..0158a66be5dd 100644 --- a/src/runtime/contrib/random/mt_random_engine.cc +++ b/src/runtime/contrib/random/mt_random_engine.cc @@ -124,8 +124,9 @@ class RandomEngine { } else { runtime::Tensor local = runtime::Tensor::Empty( std::vector{data->shape, data->shape + data->ndim}, data->dtype, {kDLCPU, 0}); - DLTensor* tensor = const_cast(local.operator->()); - FillData(tensor); + + const DLTensor* tensor = local.GetDLTensorPtr(); + FillData(const_cast(tensor)); runtime::Tensor::CopyFromTo(tensor, data); } } @@ -136,8 +137,8 @@ class RandomEngine { } else { runtime::Tensor local = runtime::Tensor::Empty( std::vector{data->shape, data->shape + data->ndim}, data->dtype, {kDLCPU, 0}); - DLTensor* tensor = const_cast(local.operator->()); - FillDataForMeasure(tensor); + const DLTensor* tensor = local.GetDLTensorPtr(); + FillDataForMeasure(const_cast(tensor)); runtime::Tensor::CopyFromTo(tensor, data); } } From 4a3d0f19262e33aeb3abf6d7a7d5b4ea218b55e1 Mon Sep 17 00:00:00 2001 From: Junru Shao Date: Tue, 14 Oct 2025 18:36:05 -0700 Subject: [PATCH 08/22] bump --- 3rdparty/tvm-ffi | 2 +- web/emcc/wasm_runtime.cc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/3rdparty/tvm-ffi b/3rdparty/tvm-ffi index da7007fda1b1..5dd60e6bed7b 160000 --- a/3rdparty/tvm-ffi +++ b/3rdparty/tvm-ffi @@ -1 +1 @@ -Subproject commit da7007fda1b1ece445cb66dbfbcf8c4bf8afb4bc +Subproject commit 5dd60e6bed7ba67d68e989b0423591ebdab92ef6 diff --git a/web/emcc/wasm_runtime.cc b/web/emcc/wasm_runtime.cc index 31547269e121..d787c295e0b7 100644 --- a/web/emcc/wasm_runtime.cc +++ b/web/emcc/wasm_runtime.cc @@ -55,10 +55,10 @@ #include "3rdparty/tvm-ffi/src/ffi/extra/library_module.cc" #include "3rdparty/tvm-ffi/src/ffi/extra/library_module_system_lib.cc" #include "3rdparty/tvm-ffi/src/ffi/extra/module.cc" -#include "3rdparty/tvm-ffi/src/ffi/extra/testing.cc" #include "3rdparty/tvm-ffi/src/ffi/function.cc" #include "3rdparty/tvm-ffi/src/ffi/object.cc" #include "3rdparty/tvm-ffi/src/ffi/tensor.cc" +#include "3rdparty/tvm-ffi/src/ffi/testing/testing.cc" #include "src/runtime/memory/memory_manager.cc" #include "src/runtime/nvtx.cc" #include "src/runtime/vm/attn_backend.cc" From c8431ad0be9c855544984dab8fa05f77683d01b2 Mon Sep 17 00:00:00 2001 From: Junru Shao Date: Wed, 15 Oct 2025 01:06:00 -0700 Subject: [PATCH 09/22] add https://github.com/apache/tvm-ffi/commit/5f0dfcd48409e7f6875c46065456063122b79ec5 --- 3rdparty/tvm-ffi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/3rdparty/tvm-ffi b/3rdparty/tvm-ffi index 5dd60e6bed7b..5f0dfcd48409 160000 --- a/3rdparty/tvm-ffi +++ b/3rdparty/tvm-ffi @@ -1 +1 @@ -Subproject commit 5dd60e6bed7ba67d68e989b0423591ebdab92ef6 +Subproject commit 5f0dfcd48409e7f6875c46065456063122b79ec5 From c66302c9c5bdd34de8a6d3f70d1744b991699bf7 Mon Sep 17 00:00:00 2001 From: tqchen Date: Wed, 15 Oct 2025 10:45:38 -0400 Subject: [PATCH 10/22] Update --- 3rdparty/tvm-ffi | 2 +- python/tvm/testing/_ffi_api.py | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/3rdparty/tvm-ffi b/3rdparty/tvm-ffi index 5f0dfcd48409..7b57a4664866 160000 --- a/3rdparty/tvm-ffi +++ b/3rdparty/tvm-ffi @@ -1 +1 @@ -Subproject commit 5f0dfcd48409e7f6875c46065456063122b79ec5 +Subproject commit 7b57a46648662b11b483f252787db22ab701231f diff --git a/python/tvm/testing/_ffi_api.py b/python/tvm/testing/_ffi_api.py index 6cb0b9bac495..80dcfe15b43f 100644 --- a/python/tvm/testing/_ffi_api.py +++ b/python/tvm/testing/_ffi_api.py @@ -16,6 +16,8 @@ # under the License. """FFI APIs for tvm.testing""" import tvm_ffi +# must import testing before init_ffi_api +import tvm_ffi.testing tvm_ffi.init_ffi_api("testing", __name__) From 7bf79491542f5fbcef4b21a52092f4f28cf6eaf7 Mon Sep 17 00:00:00 2001 From: tqchen Date: Wed, 15 Oct 2025 10:47:12 -0400 Subject: [PATCH 11/22] Update --- 3rdparty/tvm-ffi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/3rdparty/tvm-ffi b/3rdparty/tvm-ffi index 7b57a4664866..df04392b44a9 160000 --- a/3rdparty/tvm-ffi +++ b/3rdparty/tvm-ffi @@ -1 +1 @@ -Subproject commit 7b57a46648662b11b483f252787db22ab701231f +Subproject commit df04392b44a90f6641a7afb51638b324c8fb67ec From bd3e2d1509c0fa76b0b4ab5e1a75371cddcc8c05 Mon Sep 17 00:00:00 2001 From: tqchen Date: Wed, 15 Oct 2025 10:50:05 -0400 Subject: [PATCH 12/22] Update --- src/runtime/contrib/papi/papi.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/src/runtime/contrib/papi/papi.cc b/src/runtime/contrib/papi/papi.cc index 91af80de3794..81e114218d06 100644 --- a/src/runtime/contrib/papi/papi.cc +++ b/src/runtime/contrib/papi/papi.cc @@ -288,6 +288,7 @@ MetricCollector CreatePAPIMetricCollector( TVM_FFI_STATIC_INIT_BLOCK() { namespace refl = tvm::ffi::reflection; + refl::ObjectDef(); refl::GlobalDef().def("runtime.profiling.PAPIMetricCollector", [](ffi::Map> metrics) { return PAPIMetricCollector(metrics); From 7de7f31bf460e41a319f802ea235015b1cb4ed22 Mon Sep 17 00:00:00 2001 From: tqchen Date: Wed, 15 Oct 2025 11:36:20 -0400 Subject: [PATCH 13/22] Update to register metaschedule objects --- include/tvm/meta_schedule/database.h | 2 ++ include/tvm/meta_schedule/feature_extractor.h | 5 ++++- include/tvm/meta_schedule/measure_callback.h | 5 ++++- include/tvm/meta_schedule/mutator.h | 3 ++- include/tvm/meta_schedule/postproc.h | 5 ++++- include/tvm/meta_schedule/profiler.h | 4 ++-- include/tvm/meta_schedule/runner.h | 9 +++++++++ include/tvm/meta_schedule/schedule_rule.h | 5 ++++- include/tvm/meta_schedule/search_strategy.h | 2 ++ include/tvm/meta_schedule/space_generator.h | 2 ++ include/tvm/tir/block_scope.h | 3 ++- include/tvm/tir/schedule/schedule.h | 6 ++++-- src/arith/presburger_set.cc | 1 + .../measure_callback/add_to_database.cc | 7 +++++++ .../measure_callback/remove_build_artifact.cc | 7 +++++++ .../measure_callback/update_cost_model.cc | 7 +++++++ .../postproc/disallow_async_strided_mem_copy.cc | 7 +++++++ .../postproc/disallow_dynamic_loop.cc | 7 +++++++ .../postproc/rewrite_cooperative_fetch.cc | 1 + src/meta_schedule/postproc/rewrite_layout.cc | 7 +++++++ .../postproc/rewrite_parallel_vectorize_unroll.cc | 7 +++++++ .../postproc/rewrite_reduction_block.cc | 4 ++-- src/meta_schedule/postproc/rewrite_tensorize.cc | 3 ++- src/meta_schedule/postproc/verify_gpu_code.cc | 7 +++++++ src/meta_schedule/postproc/verify_vtcm_limit.cc | 7 +++++++ src/meta_schedule/runner/runner.cc | 1 + .../multi_level_tiling_tensor_core.cc | 14 ++++++++++++++ .../multi_level_tiling_wide_vector.cc | 7 +++++++ .../multi_level_tiling_with_intrin.cc | 7 +++++++ src/meta_schedule/search_strategy/replay_func.cc | 3 ++- .../space_generator/post_order_apply.cc | 3 ++- src/meta_schedule/space_generator/schedule_fn.cc | 6 ++++-- src/relax/ir/block_builder.cc | 1 + src/relax/ir/py_expr_functor.cc | 1 + src/runtime/contrib/papi/papi.cc | 1 - src/runtime/disco/distributed/socket_session.cc | 1 + src/runtime/disco/process_session.cc | 1 + src/runtime/disco/session.cc | 2 ++ src/runtime/disco/threaded_session.cc | 6 ++++++ src/runtime/profiling.cc | 3 +++ src/tir/ir/py_functor.cc | 6 ++++-- src/tir/schedule/concrete_schedule.h | 3 ++- src/tir/schedule/schedule.cc | 2 ++ src/tir/schedule/traced_schedule.h | 3 ++- 44 files changed, 172 insertions(+), 22 deletions(-) diff --git a/include/tvm/meta_schedule/database.h b/include/tvm/meta_schedule/database.h index 6ffd1883197f..ebd945482f9f 100644 --- a/include/tvm/meta_schedule/database.h +++ b/include/tvm/meta_schedule/database.h @@ -391,6 +391,8 @@ class PyDatabaseNode : public DatabaseNode { // `f_query_schedule` is not registered // `f_query_ir_module` is not registered // `f_size` is not registered + namespace refl = tvm::ffi::reflection; + refl::ObjectDef(); } bool HasWorkload(const IRModule& mod) final { diff --git a/include/tvm/meta_schedule/feature_extractor.h b/include/tvm/meta_schedule/feature_extractor.h index a2f7b9019619..9a339d39e7ba 100644 --- a/include/tvm/meta_schedule/feature_extractor.h +++ b/include/tvm/meta_schedule/feature_extractor.h @@ -40,7 +40,8 @@ class FeatureExtractorNode : public runtime::Object { virtual ~FeatureExtractorNode() = default; static void RegisterReflection() { - // No fields to register + namespace refl = tvm::ffi::reflection; + refl::ObjectDef(); } /*! @@ -79,6 +80,8 @@ class PyFeatureExtractorNode : public FeatureExtractorNode { static void RegisterReflection() { // `f_extract_from` is not registered // `f_as_string` is not registered + namespace refl = tvm::ffi::reflection; + refl::ObjectDef(); } ffi::Array ExtractFrom( diff --git a/include/tvm/meta_schedule/measure_callback.h b/include/tvm/meta_schedule/measure_callback.h index 04c855e705c3..9e7d49a0c9d4 100644 --- a/include/tvm/meta_schedule/measure_callback.h +++ b/include/tvm/meta_schedule/measure_callback.h @@ -43,7 +43,8 @@ class MeasureCallbackNode : public runtime::Object { virtual ~MeasureCallbackNode() = default; static void RegisterReflection() { - // No fields to register + namespace refl = tvm::ffi::reflection; + refl::ObjectDef(); } /*! @@ -95,6 +96,8 @@ class PyMeasureCallbackNode : public MeasureCallbackNode { static void RegisterReflection() { // `f_apply` is not registered // `f_as_string` is not registered + namespace refl = tvm::ffi::reflection; + refl::ObjectDef(); } void Apply(const TaskScheduler& task_scheduler, // diff --git a/include/tvm/meta_schedule/mutator.h b/include/tvm/meta_schedule/mutator.h index a6522c23f3dc..05489c755217 100644 --- a/include/tvm/meta_schedule/mutator.h +++ b/include/tvm/meta_schedule/mutator.h @@ -41,7 +41,8 @@ class MutatorNode : public runtime::Object { virtual ~MutatorNode() = default; static void RegisterReflection() { - // No fields to register + namespace refl = tvm::ffi::reflection; + refl::ObjectDef(); } /*! diff --git a/include/tvm/meta_schedule/postproc.h b/include/tvm/meta_schedule/postproc.h index fbf96fe9903f..948f75210701 100644 --- a/include/tvm/meta_schedule/postproc.h +++ b/include/tvm/meta_schedule/postproc.h @@ -40,7 +40,8 @@ class PostprocNode : public runtime::Object { virtual ~PostprocNode() = default; static void RegisterReflection() { - // No fields to register + namespace refl = tvm::ffi::reflection; + refl::ObjectDef(); } /*! @@ -199,6 +200,8 @@ class PyPostprocNode : public PostprocNode { // `f_apply` is not registered // `f_clone` is not registered // `f_as_string` is not registered + namespace refl = tvm::ffi::reflection; + refl::ObjectDef(); } void InitializeWithTuneContext(const TuneContext& context) final; diff --git a/include/tvm/meta_schedule/profiler.h b/include/tvm/meta_schedule/profiler.h index abad1ae54f72..5b82e6606b98 100644 --- a/include/tvm/meta_schedule/profiler.h +++ b/include/tvm/meta_schedule/profiler.h @@ -60,8 +60,8 @@ class ProfilerNode : public runtime::Object { ffi::Function total_timer; static void RegisterReflection() { - // `stats_sec` is not registered - // `total_timer` is not registered + namespace refl = tvm::ffi::reflection; + refl::ObjectDef(); } static constexpr const bool _type_mutable = true; diff --git a/include/tvm/meta_schedule/runner.h b/include/tvm/meta_schedule/runner.h index 9457167b3006..a88ae5feac1c 100644 --- a/include/tvm/meta_schedule/runner.h +++ b/include/tvm/meta_schedule/runner.h @@ -128,6 +128,8 @@ class RunnerFutureNode : public runtime::Object { static void RegisterReflection() { // `f_done` is not registered // `f_result` is not registered + namespace refl = tvm::ffi::reflection; + refl::ObjectDef(); } /*! @@ -189,6 +191,11 @@ class RunnerNode : public runtime::Object { */ virtual ffi::Array Run(ffi::Array runner_inputs) = 0; + static void RegisterReflection() { + namespace refl = tvm::ffi::reflection; + refl::ObjectDef(); + } + static constexpr const bool _type_mutable = true; TVM_FFI_DECLARE_OBJECT_INFO("meta_schedule.Runner", RunnerNode, runtime::Object); }; @@ -222,6 +229,8 @@ class PyRunnerNode : public RunnerNode { static void RegisterReflection() { // `f_run` is not registered + namespace refl = tvm::ffi::reflection; + refl::ObjectDef(); } ffi::Array Run(ffi::Array runner_inputs) final { diff --git a/include/tvm/meta_schedule/schedule_rule.h b/include/tvm/meta_schedule/schedule_rule.h index d55d47373c7c..be9074acbde7 100644 --- a/include/tvm/meta_schedule/schedule_rule.h +++ b/include/tvm/meta_schedule/schedule_rule.h @@ -43,7 +43,8 @@ class ScheduleRuleNode : public runtime::Object { virtual ~ScheduleRuleNode() = default; static void RegisterReflection() { - // No fields to register + namespace refl = tvm::ffi::reflection; + refl::ObjectDef(); } /*! @@ -337,6 +338,8 @@ class PyScheduleRuleNode : public ScheduleRuleNode { // `f_apply` is not registered // `f_as_string` is not registered // `f_clone` is not registered + namespace refl = tvm::ffi::reflection; + refl::ObjectDef(); } void InitializeWithTuneContext(const TuneContext& context) final; diff --git a/include/tvm/meta_schedule/search_strategy.h b/include/tvm/meta_schedule/search_strategy.h index aeb2a4da35d8..714c43470f05 100644 --- a/include/tvm/meta_schedule/search_strategy.h +++ b/include/tvm/meta_schedule/search_strategy.h @@ -249,6 +249,8 @@ class PySearchStrategyNode : public SearchStrategyNode { // `f_generate_measure_candidates` is not registered // `f_notify_runner_results` is not registered // `f_clone` is not registered + namespace refl = tvm::ffi::reflection; + refl::ObjectDef(); } void InitializeWithTuneContext(const TuneContext& context) final; diff --git a/include/tvm/meta_schedule/space_generator.h b/include/tvm/meta_schedule/space_generator.h index 67d15ebe96b4..460a41e44a20 100644 --- a/include/tvm/meta_schedule/space_generator.h +++ b/include/tvm/meta_schedule/space_generator.h @@ -227,6 +227,8 @@ class PySpaceGeneratorNode : public SpaceGeneratorNode { // `f_initialize_with_tune_context` is not registered // `f_generate_design_space` is not registered // `f_clone` is not registered + namespace refl = tvm::ffi::reflection; + refl::ObjectDef(); } void InitializeWithTuneContext(const TuneContext& context) final; diff --git a/include/tvm/tir/block_scope.h b/include/tvm/tir/block_scope.h index ae30613eb2dc..f1120c7837ff 100644 --- a/include/tvm/tir/block_scope.h +++ b/include/tvm/tir/block_scope.h @@ -264,7 +264,8 @@ class BlockScopeNode : public Object { std::unordered_map, ObjectPtrHash, ObjectPtrEqual> buffer_writers; static void RegisterReflection() { - // No fields to register as they are not visited + namespace refl = tvm::ffi::reflection; + refl::ObjectDef(); } TVM_FFI_DECLARE_OBJECT_INFO_FINAL("tir.BlockScope", BlockScopeNode, Object); diff --git a/include/tvm/tir/schedule/schedule.h b/include/tvm/tir/schedule/schedule.h index c5695f62d9b1..60deae801f87 100644 --- a/include/tvm/tir/schedule/schedule.h +++ b/include/tvm/tir/schedule/schedule.h @@ -51,7 +51,8 @@ enum class BufferIndexType : int32_t { class BlockRVNode : public runtime::Object { public: static void RegisterReflection() { - // No fields to register as they are not visited + namespace refl = tvm::ffi::reflection; + refl::ObjectDef(); } TVM_FFI_DECLARE_OBJECT_INFO_FINAL("tir.BlockRV", BlockRVNode, runtime::Object); }; @@ -73,7 +74,8 @@ class BlockRV : public runtime::ObjectRef { class LoopRVNode : public runtime::Object { public: static void RegisterReflection() { - // No fields to register as they are not visited + namespace refl = tvm::ffi::reflection; + refl::ObjectDef(); } TVM_FFI_DECLARE_OBJECT_INFO_FINAL("tir.LoopRV", LoopRVNode, runtime::Object); }; diff --git a/src/arith/presburger_set.cc b/src/arith/presburger_set.cc index 3722837830d6..a91b4e211768 100644 --- a/src/arith/presburger_set.cc +++ b/src/arith/presburger_set.cc @@ -277,6 +277,7 @@ PresburgerSet MakePresburgerSet(const PrimExpr& constraint) { return PresburgerS TVM_FFI_STATIC_INIT_BLOCK() { namespace refl = tvm::ffi::reflection; + PresburgerSetNode::RegisterReflection(); refl::GlobalDef().def("arith.PresburgerSet", MakePresburgerSet); } diff --git a/src/meta_schedule/measure_callback/add_to_database.cc b/src/meta_schedule/measure_callback/add_to_database.cc index 76d5b1c7cead..a7b455eec782 100644 --- a/src/meta_schedule/measure_callback/add_to_database.cc +++ b/src/meta_schedule/measure_callback/add_to_database.cc @@ -56,6 +56,12 @@ class AddToDatabaseNode : public MeasureCallbackNode { /*args_info=*/candidate->args_info)); } } + + static void RegisterReflection() { + namespace refl = tvm::ffi::reflection; + refl::ObjectDef(); + } + TVM_FFI_DECLARE_OBJECT_INFO_FINAL("meta_schedule.AddToDatabase", AddToDatabaseNode, MeasureCallbackNode); }; @@ -67,6 +73,7 @@ MeasureCallback MeasureCallback::AddToDatabase() { TVM_FFI_STATIC_INIT_BLOCK() { namespace refl = tvm::ffi::reflection; + refl::ObjectDef(); refl::GlobalDef().def("meta_schedule.MeasureCallbackAddToDatabase", MeasureCallback::AddToDatabase); } diff --git a/src/meta_schedule/measure_callback/remove_build_artifact.cc b/src/meta_schedule/measure_callback/remove_build_artifact.cc index bee5b0b03ecd..18f00efab5fc 100644 --- a/src/meta_schedule/measure_callback/remove_build_artifact.cc +++ b/src/meta_schedule/measure_callback/remove_build_artifact.cc @@ -37,6 +37,12 @@ class RemoveBuildArtifactNode : public MeasureCallbackNode { } } } + + static void RegisterReflection() { + namespace refl = tvm::ffi::reflection; + refl::ObjectDef(); + } + TVM_FFI_DECLARE_OBJECT_INFO_FINAL("meta_schedule.RemoveBuildArtifact", RemoveBuildArtifactNode, MeasureCallbackNode); }; @@ -48,6 +54,7 @@ MeasureCallback MeasureCallback::RemoveBuildArtifact() { TVM_FFI_STATIC_INIT_BLOCK() { namespace refl = tvm::ffi::reflection; + RemoveBuildArtifactNode::RegisterReflection(); refl::GlobalDef().def("meta_schedule.MeasureCallbackRemoveBuildArtifact", MeasureCallback::RemoveBuildArtifact); } diff --git a/src/meta_schedule/measure_callback/update_cost_model.cc b/src/meta_schedule/measure_callback/update_cost_model.cc index 38f714b03a83..845e14e1e7ea 100644 --- a/src/meta_schedule/measure_callback/update_cost_model.cc +++ b/src/meta_schedule/measure_callback/update_cost_model.cc @@ -54,6 +54,12 @@ class UpdateCostModelNode : public MeasureCallbackNode { } cost_model->Update(task->ctx, pruned_candidate, pruned_runner_result); } + + static void RegisterReflection() { + namespace refl = tvm::ffi::reflection; + refl::ObjectDef(); + } + TVM_FFI_DECLARE_OBJECT_INFO_FINAL("meta_schedule.UpdateCostModel", UpdateCostModelNode, MeasureCallbackNode); }; @@ -65,6 +71,7 @@ MeasureCallback MeasureCallback::UpdateCostModel() { TVM_FFI_STATIC_INIT_BLOCK() { namespace refl = tvm::ffi::reflection; + UpdateCostModelNode::RegisterReflection(); refl::GlobalDef().def("meta_schedule.MeasureCallbackUpdateCostModel", MeasureCallback::UpdateCostModel); } diff --git a/src/meta_schedule/postproc/disallow_async_strided_mem_copy.cc b/src/meta_schedule/postproc/disallow_async_strided_mem_copy.cc index 94789ee40257..9f59404de5ef 100644 --- a/src/meta_schedule/postproc/disallow_async_strided_mem_copy.cc +++ b/src/meta_schedule/postproc/disallow_async_strided_mem_copy.cc @@ -173,6 +173,12 @@ class DisallowAsyncStridedMemCopyNode : public PostprocNode { ffi::make_object(*this); return Postproc(n); } + + static void RegisterReflection() { + namespace refl = tvm::ffi::reflection; + refl::ObjectDef(); + } + TVM_FFI_DECLARE_OBJECT_INFO_FINAL("meta_schedule.DisallowAsyncStridedMemCopy", DisallowAsyncStridedMemCopyNode, PostprocNode); @@ -188,6 +194,7 @@ Postproc Postproc::DisallowAsyncStridedMemCopy() { TVM_FFI_STATIC_INIT_BLOCK() { namespace refl = tvm::ffi::reflection; + DisallowAsyncStridedMemCopyNode::RegisterReflection(); refl::GlobalDef().def("meta_schedule.PostprocDisallowAsyncStridedMemCopy", Postproc::DisallowAsyncStridedMemCopy); } diff --git a/src/meta_schedule/postproc/disallow_dynamic_loop.cc b/src/meta_schedule/postproc/disallow_dynamic_loop.cc index bd69b3a21ab1..df7344455e6d 100644 --- a/src/meta_schedule/postproc/disallow_dynamic_loop.cc +++ b/src/meta_schedule/postproc/disallow_dynamic_loop.cc @@ -74,6 +74,12 @@ class DisallowDynamicLoopNode : public PostprocNode { ObjectPtr n = ffi::make_object(*this); return Postproc(n); } + + static void RegisterReflection() { + namespace refl = tvm::ffi::reflection; + refl::ObjectDef(); + } + TVM_FFI_DECLARE_OBJECT_INFO_FINAL("meta_schedule.DisallowDynamicLoop", DisallowDynamicLoopNode, PostprocNode); }; @@ -85,6 +91,7 @@ Postproc Postproc::DisallowDynamicLoop() { TVM_FFI_STATIC_INIT_BLOCK() { namespace refl = tvm::ffi::reflection; + DisallowDynamicLoopNode::RegisterReflection(); refl::GlobalDef().def("meta_schedule.PostprocDisallowDynamicLoop", Postproc::DisallowDynamicLoop); } diff --git a/src/meta_schedule/postproc/rewrite_cooperative_fetch.cc b/src/meta_schedule/postproc/rewrite_cooperative_fetch.cc index e0c4b5c8f1d8..ae7b693efd94 100644 --- a/src/meta_schedule/postproc/rewrite_cooperative_fetch.cc +++ b/src/meta_schedule/postproc/rewrite_cooperative_fetch.cc @@ -139,6 +139,7 @@ class RewriteCooperativeFetchNode : public PostprocNode { ObjectPtr n = ffi::make_object(*this); return Postproc(n); } + TVM_FFI_DECLARE_OBJECT_INFO_FINAL("meta_schedule.RewriteCooperativeFetch", RewriteCooperativeFetchNode, PostprocNode); diff --git a/src/meta_schedule/postproc/rewrite_layout.cc b/src/meta_schedule/postproc/rewrite_layout.cc index 3712c777913d..17acdcc9bf2f 100644 --- a/src/meta_schedule/postproc/rewrite_layout.cc +++ b/src/meta_schedule/postproc/rewrite_layout.cc @@ -264,6 +264,12 @@ class RewriteLayoutNode : public PostprocNode { ObjectPtr n = ffi::make_object(*this); return Postproc(n); } + + static void RegisterReflection() { + namespace refl = tvm::ffi::reflection; + refl::ObjectDef(); + } + TVM_FFI_DECLARE_OBJECT_INFO_FINAL("meta_schedule.RewriteLayout", RewriteLayoutNode, PostprocNode); }; @@ -274,6 +280,7 @@ Postproc Postproc::RewriteLayout() { TVM_FFI_STATIC_INIT_BLOCK() { namespace refl = tvm::ffi::reflection; + RewriteLayoutNode::RegisterReflection(); refl::GlobalDef().def("meta_schedule.PostprocRewriteLayout", Postproc::RewriteLayout); } diff --git a/src/meta_schedule/postproc/rewrite_parallel_vectorize_unroll.cc b/src/meta_schedule/postproc/rewrite_parallel_vectorize_unroll.cc index 340211663b19..d833af614221 100644 --- a/src/meta_schedule/postproc/rewrite_parallel_vectorize_unroll.cc +++ b/src/meta_schedule/postproc/rewrite_parallel_vectorize_unroll.cc @@ -455,6 +455,12 @@ class RewriteParallelVectorizeUnrollNode : public PostprocNode { ffi::make_object(*this); return Postproc(n); } + + static void RegisterReflection() { + namespace refl = tvm::ffi::reflection; + refl::ObjectDef(); + } + TVM_FFI_DECLARE_OBJECT_INFO_FINAL("meta_schedule.RewriteParallelVectorizeUnroll", RewriteParallelVectorizeUnrollNode, PostprocNode); }; @@ -467,6 +473,7 @@ Postproc Postproc::RewriteParallelVectorizeUnroll() { TVM_FFI_STATIC_INIT_BLOCK() { namespace refl = tvm::ffi::reflection; + RewriteParallelVectorizeUnrollNode::RegisterReflection(); refl::GlobalDef().def("meta_schedule.PostprocRewriteParallelVectorizeUnroll", Postproc::RewriteParallelVectorizeUnroll); } diff --git a/src/meta_schedule/postproc/rewrite_reduction_block.cc b/src/meta_schedule/postproc/rewrite_reduction_block.cc index 74a80cf80bc0..fffef8ba6856 100644 --- a/src/meta_schedule/postproc/rewrite_reduction_block.cc +++ b/src/meta_schedule/postproc/rewrite_reduction_block.cc @@ -125,6 +125,7 @@ class RewriteReductionBlockNode : public PostprocNode { ObjectPtr n = ffi::make_object(*this); return Postproc(n); } + TVM_FFI_DECLARE_OBJECT_INFO_FINAL("meta_schedule.RewriteReductionBlock", RewriteReductionBlockNode, PostprocNode); }; @@ -178,11 +179,10 @@ Postproc Postproc::RewriteReductionBlock() { TVM_FFI_STATIC_INIT_BLOCK() { namespace refl = tvm::ffi::reflection; + RewriteReductionBlockNode::RegisterReflection(); refl::GlobalDef().def("meta_schedule.PostprocRewriteReductionBlock", Postproc::RewriteReductionBlock); } -TVM_FFI_STATIC_INIT_BLOCK() { RewriteReductionBlockNode::RegisterReflection(); } - } // namespace meta_schedule } // namespace tvm diff --git a/src/meta_schedule/postproc/rewrite_tensorize.cc b/src/meta_schedule/postproc/rewrite_tensorize.cc index 3a1024e41022..3ca0712f1e77 100644 --- a/src/meta_schedule/postproc/rewrite_tensorize.cc +++ b/src/meta_schedule/postproc/rewrite_tensorize.cc @@ -78,6 +78,7 @@ class RewriteTensorizeNode : public PostprocNode { } bool vectorize_init_loop = false; + TVM_FFI_DECLARE_OBJECT_INFO_FINAL("meta_schedule.RewriteTensorize", RewriteTensorizeNode, PostprocNode); }; @@ -109,10 +110,10 @@ Postproc Postproc::RewriteTensorize(bool vectorize_init_loop) { return Postproc(n); } -TVM_FFI_STATIC_INIT_BLOCK() { RewriteTensorizeNode::RegisterReflection(); } TVM_FFI_STATIC_INIT_BLOCK() { namespace refl = tvm::ffi::reflection; + RewriteTensorizeNode::RegisterReflection(); refl::GlobalDef().def("meta_schedule.PostprocRewriteTensorize", Postproc::RewriteTensorize); } diff --git a/src/meta_schedule/postproc/verify_gpu_code.cc b/src/meta_schedule/postproc/verify_gpu_code.cc index f02790cb497a..04a9cf2ea79b 100644 --- a/src/meta_schedule/postproc/verify_gpu_code.cc +++ b/src/meta_schedule/postproc/verify_gpu_code.cc @@ -206,6 +206,12 @@ class VerifyGPUCodeNode : public PostprocNode { n->target_constraints_ = this->target_constraints_; return Postproc(n); } + + static void RegisterReflection() { + namespace refl = tvm::ffi::reflection; + refl::ObjectDef(); + } + TVM_FFI_DECLARE_OBJECT_INFO_FINAL("meta_schedule.VerifyGPUCode", VerifyGPUCodeNode, PostprocNode); }; @@ -216,6 +222,7 @@ Postproc Postproc::VerifyGPUCode() { TVM_FFI_STATIC_INIT_BLOCK() { namespace refl = tvm::ffi::reflection; + VerifyGPUCodeNode::RegisterReflection(); refl::GlobalDef().def("meta_schedule.PostprocVerifyGPUCode", Postproc::VerifyGPUCode); } diff --git a/src/meta_schedule/postproc/verify_vtcm_limit.cc b/src/meta_schedule/postproc/verify_vtcm_limit.cc index 38234ef01102..f0fe8be1c1c9 100644 --- a/src/meta_schedule/postproc/verify_vtcm_limit.cc +++ b/src/meta_schedule/postproc/verify_vtcm_limit.cc @@ -59,6 +59,12 @@ class VerifyVTCMLimitNode : public PostprocNode { ObjectPtr n = ffi::make_object(*this); return Postproc(n); } + + static void RegisterReflection() { + namespace refl = tvm::ffi::reflection; + refl::ObjectDef(); + } + TVM_FFI_DECLARE_OBJECT_INFO_FINAL("meta_schedule.VerifyVTCMLimit", VerifyVTCMLimitNode, PostprocNode); }; @@ -70,6 +76,7 @@ Postproc Postproc::VerifyVTCMLimit() { TVM_FFI_STATIC_INIT_BLOCK() { namespace refl = tvm::ffi::reflection; + VerifyVTCMLimitNode::RegisterReflection(); refl::GlobalDef().def("meta_schedule.PostprocVerifyVTCMLimit", Postproc::VerifyVTCMLimit); } diff --git a/src/meta_schedule/runner/runner.cc b/src/meta_schedule/runner/runner.cc index 0d620fb3b337..1b9a3ea9a9c5 100644 --- a/src/meta_schedule/runner/runner.cc +++ b/src/meta_schedule/runner/runner.cc @@ -56,6 +56,7 @@ Runner Runner::PyRunner(Runner::FRun f_run) { /******** FFI ********/ TVM_FFI_STATIC_INIT_BLOCK() { + RunnerNode::RegisterReflection(); RunnerInputNode::RegisterReflection(); RunnerResultNode::RegisterReflection(); RunnerFutureNode::RegisterReflection(); diff --git a/src/meta_schedule/schedule_rule/multi_level_tiling_tensor_core.cc b/src/meta_schedule/schedule_rule/multi_level_tiling_tensor_core.cc index cdf69d8f1148..c58e81dc3343 100644 --- a/src/meta_schedule/schedule_rule/multi_level_tiling_tensor_core.cc +++ b/src/meta_schedule/schedule_rule/multi_level_tiling_tensor_core.cc @@ -90,6 +90,12 @@ class TensorCoreStateNode : public StateNode { bool use_async; State Copy() const final; + + static void RegisterReflection() { + namespace refl = tvm::ffi::reflection; + refl::ObjectDef(); + } + TVM_FFI_DECLARE_OBJECT_INFO_FINAL("meta_schedule.TensorCoreState", TensorCoreStateNode, StateNode); }; @@ -191,6 +197,12 @@ class MultiLevelTilingTensorCoreNode : public MultiLevelTilingNode { std::vector intrin_groups; /*! \brief Whether to use software pipeline */ bool use_software_pipeline = false; + + static void RegisterReflection() { + namespace refl = tvm::ffi::reflection; + refl::ObjectDef(); + } + TVM_FFI_DECLARE_OBJECT_INFO_FINAL("meta_schedule.MultiLevelTilingTensorCore", MultiLevelTilingTensorCoreNode, MultiLevelTilingNode); @@ -927,6 +939,8 @@ ScheduleRule ScheduleRule::MultiLevelTilingTensorCore( TVM_FFI_STATIC_INIT_BLOCK() { namespace refl = tvm::ffi::reflection; + MultiLevelTilingTensorCoreNode::RegisterReflection(); + TensorCoreStateNode::RegisterReflection(); refl::GlobalDef().def("meta_schedule.ScheduleRuleMultiLevelTilingTensorCore", ScheduleRule::MultiLevelTilingTensorCore); } diff --git a/src/meta_schedule/schedule_rule/multi_level_tiling_wide_vector.cc b/src/meta_schedule/schedule_rule/multi_level_tiling_wide_vector.cc index a09a38230d68..080e1c9c0fbf 100644 --- a/src/meta_schedule/schedule_rule/multi_level_tiling_wide_vector.cc +++ b/src/meta_schedule/schedule_rule/multi_level_tiling_wide_vector.cc @@ -39,6 +39,12 @@ using tir::Schedule; class MultiLevelTilingWideVectorNode : public MultiLevelTilingNode { public: size_t vector_length_in_bits; + + static void RegisterReflection() { + namespace refl = tvm::ffi::reflection; + refl::ObjectDef(); + } + TVM_FFI_DECLARE_OBJECT_INFO_FINAL("meta_schedule.MultiLevelTilingWideVector", MultiLevelTilingWideVectorNode, MultiLevelTilingNode); @@ -129,6 +135,7 @@ ScheduleRule ScheduleRule::MultiLevelTilingWideVector( TVM_FFI_STATIC_INIT_BLOCK() { namespace refl = tvm::ffi::reflection; + MultiLevelTilingWideVectorNode::RegisterReflection(); refl::GlobalDef().def("meta_schedule.ScheduleRuleMultiLevelTilingWideVector", ScheduleRule::MultiLevelTilingWideVector); } diff --git a/src/meta_schedule/schedule_rule/multi_level_tiling_with_intrin.cc b/src/meta_schedule/schedule_rule/multi_level_tiling_with_intrin.cc index 7b67823ad76a..89ae921f2703 100644 --- a/src/meta_schedule/schedule_rule/multi_level_tiling_with_intrin.cc +++ b/src/meta_schedule/schedule_rule/multi_level_tiling_with_intrin.cc @@ -85,7 +85,13 @@ class MultiLevelTilingWithIntrinNode : public MultiLevelTilingNode { return MultiLevelTilingNode::ApplySubRules(states); } + public: + static void RegisterReflection() { + namespace refl = tvm::ffi::reflection; + refl::ObjectDef(); + } + /*! \brief The name of a tensor intrinsic. */ ffi::String intrin_name; TVM_FFI_DECLARE_OBJECT_INFO_FINAL("meta_schedule.MultiLevelTilingWithIntrin", @@ -108,6 +114,7 @@ ScheduleRule ScheduleRule::MultiLevelTilingWithIntrin( TVM_FFI_STATIC_INIT_BLOCK() { namespace refl = tvm::ffi::reflection; + MultiLevelTilingWithIntrinNode::RegisterReflection(); refl::GlobalDef().def("meta_schedule.ScheduleRuleMultiLevelTilingWithIntrin", ScheduleRule::MultiLevelTilingWithIntrin); } diff --git a/src/meta_schedule/search_strategy/replay_func.cc b/src/meta_schedule/search_strategy/replay_func.cc index 498857ad96cd..9082c6c3a90f 100644 --- a/src/meta_schedule/search_strategy/replay_func.cc +++ b/src/meta_schedule/search_strategy/replay_func.cc @@ -63,7 +63,8 @@ class ReplayFuncNode : public SearchStrategyNode { std::unique_ptr state_ = nullptr; static void RegisterReflection() { - // No fields to register + namespace refl = tvm::ffi::reflection; + refl::ObjectDef(); } TVM_FFI_DECLARE_OBJECT_INFO_FINAL("meta_schedule.ReplayFunc", ReplayFuncNode, SearchStrategyNode); diff --git a/src/meta_schedule/space_generator/post_order_apply.cc b/src/meta_schedule/space_generator/post_order_apply.cc index 26829356e56a..e3786a4d6188 100644 --- a/src/meta_schedule/space_generator/post_order_apply.cc +++ b/src/meta_schedule/space_generator/post_order_apply.cc @@ -37,7 +37,8 @@ class PostOrderApplyNode : public SpaceGeneratorNode { TRandState rand_state_ = -1; static void RegisterReflection() { - // No fields to register + namespace refl = tvm::ffi::reflection; + refl::ObjectDef(); } void InitializeWithTuneContext(const TuneContext& context) final { diff --git a/src/meta_schedule/space_generator/schedule_fn.cc b/src/meta_schedule/space_generator/schedule_fn.cc index 687abef75fe6..7d22635b76f2 100644 --- a/src/meta_schedule/space_generator/schedule_fn.cc +++ b/src/meta_schedule/space_generator/schedule_fn.cc @@ -33,6 +33,8 @@ class ScheduleFnNode : public SpaceGeneratorNode { static void RegisterReflection() { // `schedule_fn_` is not registered. + namespace refl = tvm::ffi::reflection; + refl::ObjectDef(); } void InitializeWithTuneContext(const TuneContext& context) final { @@ -80,6 +82,7 @@ class ScheduleFnNode : public SpaceGeneratorNode { CloneRules(this, n.get()); return SpaceGenerator(n); } + TVM_FFI_DECLARE_OBJECT_INFO_FINAL("meta_schedule.ScheduleFn", ScheduleFnNode, SpaceGeneratorNode); }; @@ -95,10 +98,9 @@ SpaceGenerator SpaceGenerator::ScheduleFn( return SpaceGenerator(n); } -TVM_FFI_STATIC_INIT_BLOCK() { ScheduleFnNode::RegisterReflection(); } - TVM_FFI_STATIC_INIT_BLOCK() { namespace refl = tvm::ffi::reflection; + ScheduleFnNode::RegisterReflection(); refl::GlobalDef().def("meta_schedule.SpaceGeneratorScheduleFn", SpaceGenerator::ScheduleFn); } diff --git a/src/relax/ir/block_builder.cc b/src/relax/ir/block_builder.cc index 00be02270b89..09f404d29cbd 100644 --- a/src/relax/ir/block_builder.cc +++ b/src/relax/ir/block_builder.cc @@ -1055,6 +1055,7 @@ BlockBuilder BlockBuilder::Create(ffi::Optional mod, TVM_FFI_STATIC_INIT_BLOCK() { namespace refl = tvm::ffi::reflection; + refl::ObjectDef(); refl::GlobalDef() .def("relax.BlockBuilderCreate", [](ffi::Optional mod) { return BlockBuilder::Create(mod); }) diff --git a/src/relax/ir/py_expr_functor.cc b/src/relax/ir/py_expr_functor.cc index 73f41f185d29..b7d61bfda8ec 100644 --- a/src/relax/ir/py_expr_functor.cc +++ b/src/relax/ir/py_expr_functor.cc @@ -554,6 +554,7 @@ class PyExprMutator : public ObjectRef { TVM_FFI_STATIC_INIT_BLOCK() { namespace refl = tvm::ffi::reflection; + refl::ObjectDef(); refl::GlobalDef() .def("relax.MakePyExprVisitor", PyExprVisitor::MakePyExprVisitor) .def("relax.PyExprVisitorVisitExpr", diff --git a/src/runtime/contrib/papi/papi.cc b/src/runtime/contrib/papi/papi.cc index 81e114218d06..91af80de3794 100644 --- a/src/runtime/contrib/papi/papi.cc +++ b/src/runtime/contrib/papi/papi.cc @@ -288,7 +288,6 @@ MetricCollector CreatePAPIMetricCollector( TVM_FFI_STATIC_INIT_BLOCK() { namespace refl = tvm::ffi::reflection; - refl::ObjectDef(); refl::GlobalDef().def("runtime.profiling.PAPIMetricCollector", [](ffi::Map> metrics) { return PAPIMetricCollector(metrics); diff --git a/src/runtime/disco/distributed/socket_session.cc b/src/runtime/disco/distributed/socket_session.cc index b1845bdcfede..99c54933bf3a 100644 --- a/src/runtime/disco/distributed/socket_session.cc +++ b/src/runtime/disco/distributed/socket_session.cc @@ -307,6 +307,7 @@ Session SocketSession(int num_nodes, int num_workers_per_node, int num_groups, TVM_FFI_STATIC_INIT_BLOCK() { namespace refl = tvm::ffi::reflection; + refl::ObjectDef(); refl::GlobalDef() .def("runtime.disco.SocketSession", SocketSession) .def("runtime.disco.socket_session_init_workers", diff --git a/src/runtime/disco/process_session.cc b/src/runtime/disco/process_session.cc index aca1fef90c94..c13cd9e60e9d 100644 --- a/src/runtime/disco/process_session.cc +++ b/src/runtime/disco/process_session.cc @@ -194,6 +194,7 @@ void WorkerProcess(int worker_id, int num_workers, int num_group, int64_t read_f TVM_FFI_STATIC_INIT_BLOCK() { namespace refl = tvm::ffi::reflection; + refl::ObjectDef(); refl::GlobalDef() .def("runtime.disco.SessionProcess", Session::ProcessSession) .def("runtime.disco.WorkerProcess", WorkerProcess); diff --git a/src/runtime/disco/session.cc b/src/runtime/disco/session.cc index ab8505d169db..2bf132f362d5 100644 --- a/src/runtime/disco/session.cc +++ b/src/runtime/disco/session.cc @@ -32,6 +32,8 @@ struct SessionObj::FFI { TVM_FFI_STATIC_INIT_BLOCK() { namespace refl = tvm::ffi::reflection; + refl::ObjectDef(); + refl::ObjectDef(); refl::GlobalDef() .def("runtime.disco.SessionThreaded", Session::ThreadedSession) .def_method("runtime.disco.DRefDebugGetFromRemote", &DRefObj::DebugGetFromRemote) diff --git a/src/runtime/disco/threaded_session.cc b/src/runtime/disco/threaded_session.cc index 89245000a5b8..029038625faa 100644 --- a/src/runtime/disco/threaded_session.cc +++ b/src/runtime/disco/threaded_session.cc @@ -17,6 +17,7 @@ * under the License. */ #include +#include #include #include #include @@ -193,5 +194,10 @@ Session Session::ThreadedSession(int num_workers, int num_group) { return Session(std::move(n)); } +TVM_FFI_STATIC_INIT_BLOCK() { + namespace refl = tvm::ffi::reflection; + refl::ObjectDef(); +} + } // namespace runtime } // namespace tvm diff --git a/src/runtime/profiling.cc b/src/runtime/profiling.cc index 6e25fb5d34cd..21c5681176c3 100644 --- a/src/runtime/profiling.cc +++ b/src/runtime/profiling.cc @@ -784,6 +784,9 @@ Report Report::FromJSON(ffi::String json) { TVM_FFI_STATIC_INIT_BLOCK() { namespace refl = tvm::ffi::reflection; + refl::ObjectDef(); + refl::ObjectDef(); + refl::GlobalDef() .def_method("runtime.profiling.AsTable", &ReportNode::AsTable) .def("runtime.profiling.AsCSV", [](Report n) { return n->AsCSV(); }) diff --git a/src/tir/ir/py_functor.cc b/src/tir/ir/py_functor.cc index d2cf81eae795..61bdfb15e70e 100644 --- a/src/tir/ir/py_functor.cc +++ b/src/tir/ir/py_functor.cc @@ -215,7 +215,8 @@ class PyStmtExprVisitorNode : public Object, public StmtExprVisitor { } static void RegisterReflection() { - // No fields to register as they are not visited + namespace refl = tvm::ffi::reflection; + refl::ObjectDef(); } static constexpr const bool _type_mutable = true; @@ -581,7 +582,8 @@ class PyStmtExprMutatorNode : public Object, public StmtExprMutator { } static void RegisterReflection() { - // No fields to register as they are not visited + namespace refl = tvm::ffi::reflection; + refl::ObjectDef(); } static constexpr const bool _type_mutable = true; diff --git a/src/tir/schedule/concrete_schedule.h b/src/tir/schedule/concrete_schedule.h index f19fb3143e8a..b6f87a3aae8f 100644 --- a/src/tir/schedule/concrete_schedule.h +++ b/src/tir/schedule/concrete_schedule.h @@ -51,7 +51,8 @@ class ConcreteScheduleNode : public ScheduleNode { public: static void RegisterReflection() { - // No fields to register as they are not visited + namespace refl = tvm::ffi::reflection; + refl::ObjectDef(); } virtual ~ConcreteScheduleNode() = default; diff --git a/src/tir/schedule/schedule.cc b/src/tir/schedule/schedule.cc index 96481542896e..845bbb5cc278 100644 --- a/src/tir/schedule/schedule.cc +++ b/src/tir/schedule/schedule.cc @@ -23,6 +23,8 @@ namespace tvm { namespace tir { TVM_FFI_STATIC_INIT_BLOCK() { + namespace refl = tvm::ffi::reflection; + refl::ObjectDef(); BlockRVNode::RegisterReflection(); LoopRVNode::RegisterReflection(); } diff --git a/src/tir/schedule/traced_schedule.h b/src/tir/schedule/traced_schedule.h index cf9e53a3a78d..0b91dc283392 100644 --- a/src/tir/schedule/traced_schedule.h +++ b/src/tir/schedule/traced_schedule.h @@ -32,7 +32,8 @@ class TracedScheduleNode : public ConcreteScheduleNode { public: static void RegisterReflection() { - // No fields to register as they are not visited + namespace refl = tvm::ffi::reflection; + refl::ObjectDef(); } ~TracedScheduleNode() = default; From 3ba0fd3062678e1210e15e927d376b7688e29f9a Mon Sep 17 00:00:00 2001 From: tqchen Date: Wed, 15 Oct 2025 11:36:36 -0400 Subject: [PATCH 14/22] Update to register metaschedule objects --- src/meta_schedule/postproc/rewrite_tensorize.cc | 1 - .../schedule_rule/multi_level_tiling_with_intrin.cc | 1 - 2 files changed, 2 deletions(-) diff --git a/src/meta_schedule/postproc/rewrite_tensorize.cc b/src/meta_schedule/postproc/rewrite_tensorize.cc index 3ca0712f1e77..473731b5a7b5 100644 --- a/src/meta_schedule/postproc/rewrite_tensorize.cc +++ b/src/meta_schedule/postproc/rewrite_tensorize.cc @@ -110,7 +110,6 @@ Postproc Postproc::RewriteTensorize(bool vectorize_init_loop) { return Postproc(n); } - TVM_FFI_STATIC_INIT_BLOCK() { namespace refl = tvm::ffi::reflection; RewriteTensorizeNode::RegisterReflection(); diff --git a/src/meta_schedule/schedule_rule/multi_level_tiling_with_intrin.cc b/src/meta_schedule/schedule_rule/multi_level_tiling_with_intrin.cc index 89ae921f2703..4a375689e493 100644 --- a/src/meta_schedule/schedule_rule/multi_level_tiling_with_intrin.cc +++ b/src/meta_schedule/schedule_rule/multi_level_tiling_with_intrin.cc @@ -85,7 +85,6 @@ class MultiLevelTilingWithIntrinNode : public MultiLevelTilingNode { return MultiLevelTilingNode::ApplySubRules(states); } - public: static void RegisterReflection() { namespace refl = tvm::ffi::reflection; From ce41cc279e1f3a6bdf11ff11ac5d901520ba22aa Mon Sep 17 00:00:00 2001 From: tqchen Date: Wed, 15 Oct 2025 11:37:54 -0400 Subject: [PATCH 15/22] bump --- 3rdparty/tvm-ffi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/3rdparty/tvm-ffi b/3rdparty/tvm-ffi index df04392b44a9..a97b7c600885 160000 --- a/3rdparty/tvm-ffi +++ b/3rdparty/tvm-ffi @@ -1 +1 @@ -Subproject commit df04392b44a90f6641a7afb51638b324c8fb67ec +Subproject commit a97b7c600885a33023c5332d74ef63c40a0ce3e4 From b9a2fbc71dcf3aee874496b2cb8b9e43a9fd93b2 Mon Sep 17 00:00:00 2001 From: tqchen Date: Wed, 15 Oct 2025 13:57:34 -0400 Subject: [PATCH 16/22] Bump --- 3rdparty/tvm-ffi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/3rdparty/tvm-ffi b/3rdparty/tvm-ffi index a97b7c600885..d183a9577dec 160000 --- a/3rdparty/tvm-ffi +++ b/3rdparty/tvm-ffi @@ -1 +1 @@ -Subproject commit a97b7c600885a33023c5332d74ef63c40a0ce3e4 +Subproject commit d183a9577dec6bf838d6bbe855ca28da1192d088 From dd982de137dd6f885ddc42aa737a143ee7377ec4 Mon Sep 17 00:00:00 2001 From: tqchen Date: Wed, 15 Oct 2025 15:31:24 -0400 Subject: [PATCH 17/22] bump --- 3rdparty/tvm-ffi | 2 +- python/tvm/testing/_ffi_api.py | 1 + src/runtime/rpc/rpc_session.cc | 3 +++ 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/3rdparty/tvm-ffi b/3rdparty/tvm-ffi index d183a9577dec..ef54bdac61f4 160000 --- a/3rdparty/tvm-ffi +++ b/3rdparty/tvm-ffi @@ -1 +1 @@ -Subproject commit d183a9577dec6bf838d6bbe855ca28da1192d088 +Subproject commit ef54bdac61f4f22ea71a475ed8264333b8626ef9 diff --git a/python/tvm/testing/_ffi_api.py b/python/tvm/testing/_ffi_api.py index 80dcfe15b43f..b7a0b59fd0e4 100644 --- a/python/tvm/testing/_ffi_api.py +++ b/python/tvm/testing/_ffi_api.py @@ -16,6 +16,7 @@ # under the License. """FFI APIs for tvm.testing""" import tvm_ffi + # must import testing before init_ffi_api import tvm_ffi.testing diff --git a/src/runtime/rpc/rpc_session.cc b/src/runtime/rpc/rpc_session.cc index ace9cf9b9485..1fee1424ea22 100644 --- a/src/runtime/rpc/rpc_session.cc +++ b/src/runtime/rpc/rpc_session.cc @@ -24,6 +24,7 @@ #include "rpc_session.h" #include +#include #include #include @@ -127,5 +128,7 @@ void RPCSession::InsertToSessionTable(std::shared_ptr sess) { sess->table_index_ = RPCSessTable::Global()->Insert(sess); } +TVM_FFI_STATIC_INIT_BLOCK() { tvm::ffi::reflection::ObjectDef(); } + } // namespace runtime } // namespace tvm From aee37e97419b9442b3063254645df02ae8ae1578 Mon Sep 17 00:00:00 2001 From: tqchen Date: Wed, 15 Oct 2025 22:53:13 -0400 Subject: [PATCH 18/22] bump --- include/tvm/ir/name_supply.h | 6 ++++++ src/ir/name_supply.cc | 1 + tests/python/tir-base/test_tir_ptx_cp_async.py | 1 + 3 files changed, 8 insertions(+) diff --git a/include/tvm/ir/name_supply.h b/include/tvm/ir/name_supply.h index 2de0164eb221..d3139ea2c821 100644 --- a/include/tvm/ir/name_supply.h +++ b/include/tvm/ir/name_supply.h @@ -86,6 +86,12 @@ class NameSupplyNode : public Object { std::string prefix_; static constexpr const bool _type_mutable = true; + + static void RegisterReflection() { + namespace refl = tvm::ffi::reflection; + refl::ObjectDef(); + } + TVM_FFI_DECLARE_OBJECT_INFO_FINAL("ir.NameSupply", NameSupplyNode, Object); private: diff --git a/src/ir/name_supply.cc b/src/ir/name_supply.cc index cc6db0c21fff..e5b94dff5a06 100644 --- a/src/ir/name_supply.cc +++ b/src/ir/name_supply.cc @@ -93,6 +93,7 @@ std::string NameSupplyNode::GetUniqueName(std::string name, bool add_underscore) TVM_FFI_STATIC_INIT_BLOCK() { namespace refl = tvm::ffi::reflection; + NameSupplyNode::RegisterReflection(); refl::GlobalDef() .def("ir.NameSupply", [](ffi::String prefix) { return NameSupply(prefix); }) .def_method("ir.NameSupply_FreshName", &NameSupplyNode::FreshName) diff --git a/tests/python/tir-base/test_tir_ptx_cp_async.py b/tests/python/tir-base/test_tir_ptx_cp_async.py index f3255bd257c6..0805aca244aa 100644 --- a/tests/python/tir-base/test_tir_ptx_cp_async.py +++ b/tests/python/tir-base/test_tir_ptx_cp_async.py @@ -94,6 +94,7 @@ def ptx_cp_async_barrier( B[tx, i] = A_shared[tx, i] +@pytest.mark.xfail(reason="temp skip test due to cuda env update") @tvm.testing.requires_cuda_compute_version(8) def test_ptx_cp_async_barrier(): f = ptx_cp_async_barrier From 042d5e78894af334b17c3f673df81a3f36d032a5 Mon Sep 17 00:00:00 2001 From: Junru Shao Date: Thu, 16 Oct 2025 00:30:26 -0700 Subject: [PATCH 19/22] bump --- 3rdparty/tvm-ffi | 2 +- tests/python/tir-base/test_tir_ptx_cp_async.py | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/3rdparty/tvm-ffi b/3rdparty/tvm-ffi index ef54bdac61f4..59c91c17eb7e 160000 --- a/3rdparty/tvm-ffi +++ b/3rdparty/tvm-ffi @@ -1 +1 @@ -Subproject commit ef54bdac61f4f22ea71a475ed8264333b8626ef9 +Subproject commit 59c91c17eb7ef4f24cf00faedc82f1a8e0fc53a3 diff --git a/tests/python/tir-base/test_tir_ptx_cp_async.py b/tests/python/tir-base/test_tir_ptx_cp_async.py index 0805aca244aa..a87aa6103df2 100644 --- a/tests/python/tir-base/test_tir_ptx_cp_async.py +++ b/tests/python/tir-base/test_tir_ptx_cp_async.py @@ -18,6 +18,7 @@ from tvm.script import tir as T import numpy as np import tvm.testing +import pytest @T.prim_func From b0f852697bd85d51d2f4459109e1629b23c5d254 Mon Sep 17 00:00:00 2001 From: tqchen Date: Thu, 16 Oct 2025 07:38:38 -0400 Subject: [PATCH 20/22] bump --- tests/python/tir-base/test_tir_ptx_cp_async.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/python/tir-base/test_tir_ptx_cp_async.py b/tests/python/tir-base/test_tir_ptx_cp_async.py index a87aa6103df2..8b15e385d235 100644 --- a/tests/python/tir-base/test_tir_ptx_cp_async.py +++ b/tests/python/tir-base/test_tir_ptx_cp_async.py @@ -96,7 +96,6 @@ def ptx_cp_async_barrier( @pytest.mark.xfail(reason="temp skip test due to cuda env update") -@tvm.testing.requires_cuda_compute_version(8) def test_ptx_cp_async_barrier(): f = ptx_cp_async_barrier From fa81359097cb354959b2bfd6605492fb53dd1fc9 Mon Sep 17 00:00:00 2001 From: tqchen Date: Thu, 16 Oct 2025 08:54:16 -0400 Subject: [PATCH 21/22] bump --- .../tir-transform/test_tir_transform_inject_ptx_async_copy.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/python/tir-transform/test_tir_transform_inject_ptx_async_copy.py b/tests/python/tir-transform/test_tir_transform_inject_ptx_async_copy.py index aa4f5138a17f..f6a5c3ad1200 100644 --- a/tests/python/tir-transform/test_tir_transform_inject_ptx_async_copy.py +++ b/tests/python/tir-transform/test_tir_transform_inject_ptx_async_copy.py @@ -214,6 +214,7 @@ def ptx_global_to_shared_copy_fp32x1_barrier( B[tx, i] = A_shared[tx, i] +@tvm.testing.xfail(reason="temp skip test due to cuda env update") @tvm.testing.requires_cuda def test_inject_async_copy_barrier(): dtype = "float32" From 92e49563060922ff9418551c28b70aebe9704edf Mon Sep 17 00:00:00 2001 From: tqchen Date: Thu, 16 Oct 2025 08:54:43 -0400 Subject: [PATCH 22/22] bump --- .../tir-transform/test_tir_transform_inject_ptx_async_copy.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/python/tir-transform/test_tir_transform_inject_ptx_async_copy.py b/tests/python/tir-transform/test_tir_transform_inject_ptx_async_copy.py index f6a5c3ad1200..bcec1d484350 100644 --- a/tests/python/tir-transform/test_tir_transform_inject_ptx_async_copy.py +++ b/tests/python/tir-transform/test_tir_transform_inject_ptx_async_copy.py @@ -214,7 +214,7 @@ def ptx_global_to_shared_copy_fp32x1_barrier( B[tx, i] = A_shared[tx, i] -@tvm.testing.xfail(reason="temp skip test due to cuda env update") +@pytest.mark.xfail(reason="temp skip test due to cuda env update") @tvm.testing.requires_cuda def test_inject_async_copy_barrier(): dtype = "float32"