This is an automated email from the ASF dual-hosted git repository.
tqchen pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tvm.git
The following commit(s) were added to refs/heads/main by this push:
new cc9bd00d97 [FFI] Bump tvm-ffi dependency (#18370)
cc9bd00d97 is described below
commit cc9bd00d97e750615e0faaa34f49e89bb782b50d
Author: Tianqi Chen <[email protected]>
AuthorDate: Thu Oct 16 09:59:07 2025 -0400
[FFI] Bump tvm-ffi dependency (#18370)
* [FFI] Bump tvm-ffi dependency
This PR bumps tvm-ffi dependency to latest
Co-authored-by: Junru Shao <[email protected]>
Co-authored-by: Junru Shao <[email protected]>
---
3rdparty/tvm-ffi | 2 +-
include/tvm/ir/name_supply.h | 6 ++++++
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/relax/nested_msg.h | 10 +++++++++-
include/tvm/runtime/data_type.h | 4 ++++
include/tvm/runtime/tensor.h | 1 +
include/tvm/tir/block_scope.h | 3 ++-
include/tvm/tir/schedule/schedule.h | 6 ++++--
python/tvm/testing/_ffi_api.py | 3 +++
src/arith/presburger_set.cc | 1 +
src/ir/name_supply.cc | 1 +
src/meta_schedule/measure_callback/add_to_database.cc | 7 +++++++
.../measure_callback/remove_build_artifact.cc | 7 +++++++
src/meta_schedule/measure_callback/update_cost_model.cc | 7 +++++++
.../postproc/disallow_async_strided_mem_copy.cc | 7 +++++++
src/meta_schedule/postproc/disallow_dynamic_loop.cc | 7 +++++++
src/meta_schedule/postproc/rewrite_cooperative_fetch.cc | 1 +
src/meta_schedule/postproc/rewrite_layout.cc | 7 +++++++
.../postproc/rewrite_parallel_vectorize_unroll.cc | 7 +++++++
src/meta_schedule/postproc/rewrite_reduction_block.cc | 4 ++--
src/meta_schedule/postproc/rewrite_tensorize.cc | 4 ++--
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 +
.../schedule_rule/multi_level_tiling_tensor_core.cc | 14 ++++++++++++++
.../schedule_rule/multi_level_tiling_wide_vector.cc | 7 +++++++
.../schedule_rule/multi_level_tiling_with_intrin.cc | 6 ++++++
src/meta_schedule/search_strategy/replay_func.cc | 3 ++-
src/meta_schedule/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/relax/transform/fold_constant.cc | 2 +-
src/runtime/contrib/random/mt_random_engine.cc | 9 +++++----
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/runtime/rpc/rpc_session.cc | 3 +++
src/runtime/vm/builtin.cc | 2 +-
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 ++-
tests/python/tir-base/test_tir_ptx_cp_async.py | 3 ++-
.../test_tir_transform_inject_ptx_async_copy.py | 1 +
web/emcc/wasm_runtime.cc | 2 +-
57 files changed, 210 insertions(+), 32 deletions(-)
diff --git a/3rdparty/tvm-ffi b/3rdparty/tvm-ffi
index 4fefeb0f59..59c91c17eb 160000
--- a/3rdparty/tvm-ffi
+++ b/3rdparty/tvm-ffi
@@ -1 +1 @@
-Subproject commit 4fefeb0f5913fc41cf860f517b9320f1bf1d0e98
+Subproject commit 59c91c17eb7ef4f24cf00faedc82f1a8e0fc53a3
diff --git a/include/tvm/ir/name_supply.h b/include/tvm/ir/name_supply.h
index 2de0164eb2..d3139ea2c8 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<NameSupplyNode>();
+ }
+
TVM_FFI_DECLARE_OBJECT_INFO_FINAL("ir.NameSupply", NameSupplyNode, Object);
private:
diff --git a/include/tvm/meta_schedule/database.h
b/include/tvm/meta_schedule/database.h
index 6ffd188319..ebd945482f 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<PyDatabaseNode>();
}
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 a2f7b90196..9a339d39e7 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<FeatureExtractorNode>();
}
/*!
@@ -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<PyFeatureExtractorNode>();
}
ffi::Array<tvm::runtime::Tensor> ExtractFrom(
diff --git a/include/tvm/meta_schedule/measure_callback.h
b/include/tvm/meta_schedule/measure_callback.h
index 04c855e705..9e7d49a0c9 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<MeasureCallbackNode>();
}
/*!
@@ -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<PyMeasureCallbackNode>();
}
void Apply(const TaskScheduler& task_scheduler, //
diff --git a/include/tvm/meta_schedule/mutator.h
b/include/tvm/meta_schedule/mutator.h
index a6522c23f3..05489c7552 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<MutatorNode>();
}
/*!
diff --git a/include/tvm/meta_schedule/postproc.h
b/include/tvm/meta_schedule/postproc.h
index fbf96fe990..948f752107 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<PostprocNode>();
}
/*!
@@ -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<PyPostprocNode>();
}
void InitializeWithTuneContext(const TuneContext& context) final;
diff --git a/include/tvm/meta_schedule/profiler.h
b/include/tvm/meta_schedule/profiler.h
index abad1ae54f..5b82e6606b 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<ProfilerNode>();
}
static constexpr const bool _type_mutable = true;
diff --git a/include/tvm/meta_schedule/runner.h
b/include/tvm/meta_schedule/runner.h
index 9457167b30..a88ae5feac 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<RunnerFutureNode>();
}
/*!
@@ -189,6 +191,11 @@ class RunnerNode : public runtime::Object {
*/
virtual ffi::Array<RunnerFuture> Run(ffi::Array<RunnerInput> runner_inputs)
= 0;
+ static void RegisterReflection() {
+ namespace refl = tvm::ffi::reflection;
+ refl::ObjectDef<RunnerNode>();
+ }
+
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<PyRunnerNode>();
}
ffi::Array<RunnerFuture> Run(ffi::Array<RunnerInput> runner_inputs) final {
diff --git a/include/tvm/meta_schedule/schedule_rule.h
b/include/tvm/meta_schedule/schedule_rule.h
index d55d47373c..be9074acbd 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<ScheduleRuleNode>();
}
/*!
@@ -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<PyScheduleRuleNode>();
}
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 aeb2a4da35..714c43470f 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<PySearchStrategyNode>();
}
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 67d15ebe96..460a41e44a 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<PySpaceGeneratorNode>();
}
void InitializeWithTuneContext(const TuneContext& context) final;
diff --git a/include/tvm/relax/nested_msg.h b/include/tvm/relax/nested_msg.h
index aac3175d72..77f001630f 100644
--- a/include/tvm/relax/nested_msg.h
+++ b/include/tvm/relax/nested_msg.h
@@ -639,7 +639,7 @@ struct TypeTraits<relax::NestedMsg<T>> : public
TypeTraitsBase {
}
TVM_FFI_INLINE static relax::NestedMsg<T> MoveFromAnyAfterCheck(TVMFFIAny*
src) {
- return
relax::NestedMsg<T>(details::AnyUnsafe::MoveTVMFFIAnyToAny(std::move(*src)));
+ return relax::NestedMsg<T>(details::AnyUnsafe::MoveTVMFFIAnyToAny(src));
}
static std::optional<relax::NestedMsg<T>> TryCastFromAnyView(const
TVMFFIAny* src) {
@@ -673,6 +673,14 @@ struct TypeTraits<relax::NestedMsg<T>> : public
TypeTraitsBase {
TVM_FFI_INLINE static std::string TypeStr() {
return "NestedMsg<" + details::Type2Str<T>::v() + ">";
}
+
+ TVM_FFI_INLINE static std::string TypeSchema() {
+ std::ostringstream oss;
+ oss << R"({"type":"NestedMsg","args":[)";
+ oss << details::TypeSchema<T>::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 230f73747f..0af3022bbd 100644
--- a/include/tvm/runtime/data_type.h
+++ b/include/tvm/runtime/data_type.h
@@ -497,6 +497,10 @@ struct TypeTraits<runtime::DataType> : 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/include/tvm/runtime/tensor.h b/include/tvm/runtime/tensor.h
index 3028723957..e32101aac2 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/include/tvm/tir/block_scope.h b/include/tvm/tir/block_scope.h
index ae30613eb2..f1120c7837 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<Buffer, ffi::Array<StmtSRef>, ObjectPtrHash,
ObjectPtrEqual> buffer_writers;
static void RegisterReflection() {
- // No fields to register as they are not visited
+ namespace refl = tvm::ffi::reflection;
+ refl::ObjectDef<BlockScopeNode>();
}
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 c5695f62d9..60deae801f 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<BlockRVNode>();
}
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<LoopRVNode>();
}
TVM_FFI_DECLARE_OBJECT_INFO_FINAL("tir.LoopRV", LoopRVNode, runtime::Object);
};
diff --git a/python/tvm/testing/_ffi_api.py b/python/tvm/testing/_ffi_api.py
index 6cb0b9bac4..b7a0b59fd0 100644
--- a/python/tvm/testing/_ffi_api.py
+++ b/python/tvm/testing/_ffi_api.py
@@ -17,5 +17,8 @@
"""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__)
diff --git a/src/arith/presburger_set.cc b/src/arith/presburger_set.cc
index 3722837830..a91b4e2117 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/ir/name_supply.cc b/src/ir/name_supply.cc
index cc6db0c21f..e5b94dff5a 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/src/meta_schedule/measure_callback/add_to_database.cc
b/src/meta_schedule/measure_callback/add_to_database.cc
index 76d5b1c7ce..a7b455eec7 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<AddToDatabaseNode>();
+ }
+
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<AddToDatabaseNode>();
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 bee5b0b03e..18f00efab5 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<RemoveBuildArtifactNode>();
+ }
+
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 38f714b03a..845e14e1e7 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<UpdateCostModelNode>();
+ }
+
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 94789ee402..9f59404de5 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<DisallowAsyncStridedMemCopyNode>(*this);
return Postproc(n);
}
+
+ static void RegisterReflection() {
+ namespace refl = tvm::ffi::reflection;
+ refl::ObjectDef<DisallowAsyncStridedMemCopyNode>();
+ }
+
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 bd69b3a21a..df7344455e 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<DisallowDynamicLoopNode> n =
ffi::make_object<DisallowDynamicLoopNode>(*this);
return Postproc(n);
}
+
+ static void RegisterReflection() {
+ namespace refl = tvm::ffi::reflection;
+ refl::ObjectDef<DisallowDynamicLoopNode>();
+ }
+
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 e0c4b5c8f1..ae7b693efd 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<RewriteCooperativeFetchNode> n =
ffi::make_object<RewriteCooperativeFetchNode>(*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 3712c77791..17acdcc9bf 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<RewriteLayoutNode> n =
ffi::make_object<RewriteLayoutNode>(*this);
return Postproc(n);
}
+
+ static void RegisterReflection() {
+ namespace refl = tvm::ffi::reflection;
+ refl::ObjectDef<RewriteLayoutNode>();
+ }
+
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 340211663b..d833af6142 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<RewriteParallelVectorizeUnrollNode>(*this);
return Postproc(n);
}
+
+ static void RegisterReflection() {
+ namespace refl = tvm::ffi::reflection;
+ refl::ObjectDef<RewriteParallelVectorizeUnrollNode>();
+ }
+
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 74a80cf80b..fffef8ba68 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<RewriteReductionBlockNode> n =
ffi::make_object<RewriteReductionBlockNode>(*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 3a1024e410..473731b5a7 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,9 @@ 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 f02790cb49..04a9cf2ea7 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<VerifyGPUCodeNode>();
+ }
+
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 38234ef011..f0fe8be1c1 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<VerifyVTCMLimitNode> n =
ffi::make_object<VerifyVTCMLimitNode>(*this);
return Postproc(n);
}
+
+ static void RegisterReflection() {
+ namespace refl = tvm::ffi::reflection;
+ refl::ObjectDef<VerifyVTCMLimitNode>();
+ }
+
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 0d620fb3b3..1b9a3ea9a9 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 cdf69d8f11..c58e81dc33 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<TensorCoreStateNode>();
+ }
+
TVM_FFI_DECLARE_OBJECT_INFO_FINAL("meta_schedule.TensorCoreState",
TensorCoreStateNode,
StateNode);
};
@@ -191,6 +197,12 @@ class MultiLevelTilingTensorCoreNode : public
MultiLevelTilingNode {
std::vector<TensorCoreIntrinGroup> intrin_groups;
/*! \brief Whether to use software pipeline */
bool use_software_pipeline = false;
+
+ static void RegisterReflection() {
+ namespace refl = tvm::ffi::reflection;
+ refl::ObjectDef<MultiLevelTilingTensorCoreNode>();
+ }
+
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 a09a38230d..080e1c9c0f 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<MultiLevelTilingWideVectorNode>();
+ }
+
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 7b67823ad7..4a375689e4 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
@@ -86,6 +86,11 @@ class MultiLevelTilingWithIntrinNode : public
MultiLevelTilingNode {
}
public:
+ static void RegisterReflection() {
+ namespace refl = tvm::ffi::reflection;
+ refl::ObjectDef<MultiLevelTilingWithIntrinNode>();
+ }
+
/*! \brief The name of a tensor intrinsic. */
ffi::String intrin_name;
TVM_FFI_DECLARE_OBJECT_INFO_FINAL("meta_schedule.MultiLevelTilingWithIntrin",
@@ -108,6 +113,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 498857ad96..9082c6c3a9 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> state_ = nullptr;
static void RegisterReflection() {
- // No fields to register
+ namespace refl = tvm::ffi::reflection;
+ refl::ObjectDef<ReplayFuncNode>();
}
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 26829356e5..e3786a4d61 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<PostOrderApplyNode>();
}
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 687abef75f..7d22635b76 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<ScheduleFnNode>();
}
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 00be02270b..09f404d29c 100644
--- a/src/relax/ir/block_builder.cc
+++ b/src/relax/ir/block_builder.cc
@@ -1055,6 +1055,7 @@ BlockBuilder BlockBuilder::Create(ffi::Optional<IRModule>
mod,
TVM_FFI_STATIC_INIT_BLOCK() {
namespace refl = tvm::ffi::reflection;
+ refl::ObjectDef<BlockBuilderNode>();
refl::GlobalDef()
.def("relax.BlockBuilderCreate",
[](ffi::Optional<IRModule> mod) { return BlockBuilder::Create(mod);
})
diff --git a/src/relax/ir/py_expr_functor.cc b/src/relax/ir/py_expr_functor.cc
index 73f41f185d..b7d61bfda8 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<PyExprVisitorNode>();
refl::GlobalDef()
.def("relax.MakePyExprVisitor", PyExprVisitor::MakePyExprVisitor)
.def("relax.PyExprVisitorVisitExpr",
diff --git a/src/relax/transform/fold_constant.cc
b/src/relax/transform/fold_constant.cc
index 0892adcc1a..b714d49243 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<Constant>(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<const int64_t*>(ndarray->data);
diff --git a/src/runtime/contrib/random/mt_random_engine.cc
b/src/runtime/contrib/random/mt_random_engine.cc
index ce9b959a53..0158a66be5 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<int64_t>{data->shape, data->shape + data->ndim},
data->dtype, {kDLCPU, 0});
- DLTensor* tensor = const_cast<ffi::TensorObj*>(local.operator->());
- FillData(tensor);
+
+ const DLTensor* tensor = local.GetDLTensorPtr();
+ FillData(const_cast<DLTensor*>(tensor));
runtime::Tensor::CopyFromTo(tensor, data);
}
}
@@ -136,8 +137,8 @@ class RandomEngine {
} else {
runtime::Tensor local = runtime::Tensor::Empty(
std::vector<int64_t>{data->shape, data->shape + data->ndim},
data->dtype, {kDLCPU, 0});
- DLTensor* tensor = const_cast<ffi::TensorObj*>(local.operator->());
- FillDataForMeasure(tensor);
+ const DLTensor* tensor = local.GetDLTensorPtr();
+ FillDataForMeasure(const_cast<DLTensor*>(tensor));
runtime::Tensor::CopyFromTo(tensor, data);
}
}
diff --git a/src/runtime/disco/distributed/socket_session.cc
b/src/runtime/disco/distributed/socket_session.cc
index b1845bdcfe..99c54933bf 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<SocketSessionObj>();
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 aca1fef90c..c13cd9e60e 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<ProcessSessionObj>();
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 ab8505d169..2bf132f362 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<DRefObj>();
+ refl::ObjectDef<SessionObj>();
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 89245000a5..029038625f 100644
--- a/src/runtime/disco/threaded_session.cc
+++ b/src/runtime/disco/threaded_session.cc
@@ -17,6 +17,7 @@
* under the License.
*/
#include <dmlc/io.h>
+#include <tvm/ffi/reflection/registry.h>
#include <tvm/runtime/base.h>
#include <tvm/runtime/disco/disco_worker.h>
#include <tvm/runtime/object.h>
@@ -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<ThreadedSessionObj>();
+}
+
} // namespace runtime
} // namespace tvm
diff --git a/src/runtime/profiling.cc b/src/runtime/profiling.cc
index 6e25fb5d34..21c5681176 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<MetricCollectorNode>();
+ refl::ObjectDef<DeviceWrapperNode>();
+
refl::GlobalDef()
.def_method("runtime.profiling.AsTable", &ReportNode::AsTable)
.def("runtime.profiling.AsCSV", [](Report n) { return n->AsCSV(); })
diff --git a/src/runtime/rpc/rpc_session.cc b/src/runtime/rpc/rpc_session.cc
index ace9cf9b94..1fee1424ea 100644
--- a/src/runtime/rpc/rpc_session.cc
+++ b/src/runtime/rpc/rpc_session.cc
@@ -24,6 +24,7 @@
#include "rpc_session.h"
#include <tvm/ffi/function.h>
+#include <tvm/ffi/reflection/registry.h>
#include <tvm/runtime/device_api.h>
#include <array>
@@ -127,5 +128,7 @@ void
RPCSession::InsertToSessionTable(std::shared_ptr<RPCSession> sess) {
sess->table_index_ = RPCSessTable::Global()->Insert(sess);
}
+TVM_FFI_STATIC_INIT_BLOCK() {
tvm::ffi::reflection::ObjectDef<RPCObjectRefObj>(); }
+
} // namespace runtime
} // namespace tvm
diff --git a/src/runtime/vm/builtin.cc b/src/runtime/vm/builtin.cc
index d94d5676bb..13446a158f 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<tvm::ffi::Any*>(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"
diff --git a/src/tir/ir/py_functor.cc b/src/tir/ir/py_functor.cc
index d2cf81eae7..61bdfb15e7 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<PyStmtExprVisitorNode>();
}
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<PyStmtExprMutatorNode>();
}
static constexpr const bool _type_mutable = true;
diff --git a/src/tir/schedule/concrete_schedule.h
b/src/tir/schedule/concrete_schedule.h
index f19fb3143e..b6f87a3aae 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<ConcreteScheduleNode>();
}
virtual ~ConcreteScheduleNode() = default;
diff --git a/src/tir/schedule/schedule.cc b/src/tir/schedule/schedule.cc
index 9648154289..845bbb5cc2 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<ScheduleNode>();
BlockRVNode::RegisterReflection();
LoopRVNode::RegisterReflection();
}
diff --git a/src/tir/schedule/traced_schedule.h
b/src/tir/schedule/traced_schedule.h
index cf9e53a3a7..0b91dc2833 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>();
}
~TracedScheduleNode() = default;
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 f3255bd257..8b15e385d2 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 @@ import tvm
from tvm.script import tir as T
import numpy as np
import tvm.testing
+import pytest
@T.prim_func
@@ -94,7 +95,7 @@ def ptx_cp_async_barrier(
B[tx, i] = A_shared[tx, i]
[email protected]_cuda_compute_version(8)
[email protected](reason="temp skip test due to cuda env update")
def test_ptx_cp_async_barrier():
f = ptx_cp_async_barrier
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 aa4f5138a1..bcec1d4843 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]
[email protected](reason="temp skip test due to cuda env update")
@tvm.testing.requires_cuda
def test_inject_async_copy_barrier():
dtype = "float32"
diff --git a/web/emcc/wasm_runtime.cc b/web/emcc/wasm_runtime.cc
index 31547269e1..d787c295e0 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"