This is an automated email from the ASF dual-hosted git repository. tqchen pushed a commit to branch refactor-s1 in repository https://gitbox.apache.org/repos/asf/tvm.git
commit 18779fe16a74cd2f69952933df2e67317833eb19 Author: tqchen <[email protected]> AuthorDate: Sun Apr 13 15:23:27 2025 -0400 Always return str in ffi --- include/tvm/runtime/packed_func.h | 22 ++-------------------- src/runtime/c_runtime_api.cc | 7 ++++++- 2 files changed, 8 insertions(+), 21 deletions(-) diff --git a/include/tvm/runtime/packed_func.h b/include/tvm/runtime/packed_func.h index 020ed4883d..435c278815 100644 --- a/include/tvm/runtime/packed_func.h +++ b/include/tvm/runtime/packed_func.h @@ -44,6 +44,8 @@ using ffi::AnyView; */ inline TVMFFIAny LegacyTVMArgValueToFFIAny(TVMValue value, int type_code) { TVMFFIAny res; + // clear first to ensure consistent hash + res.v_uint64 = 0; switch (type_code) { case kTVMArgInt: { res.type_index = ffi::TypeIndex::kTVMFFIInt; @@ -62,12 +64,10 @@ inline TVMFFIAny LegacyTVMArgValueToFFIAny(TVMValue value, int type_code) { } case kTVMNullptr: { res.type_index = ffi::TypeIndex::kTVMFFINone; - res.v_int64 = 0; return res; } case kTVMDataType: { res.type_index = ffi::TypeIndex::kTVMFFIDataType; - res.v_int64 = 0; res.v_dtype = value.v_type; return res; } @@ -245,24 +245,6 @@ inline void MoveAnyToLegacyTVMValue(Any&& src, TVMValue* value, int* type_code) AnyViewToLegacyTVMArgValue(val, value, type_code); } -/*! - * \brief Legacy TVM args kept for backward compact - */ -class LegacyTVMArgs { - public: - const TVMValue* values; - const int* type_codes; - int num_args; - /*! - * \brief constructor - * \param values The argument values - * \param type_codes The argument type codes - * \param num_args number of arguments. - */ - LegacyTVMArgs(const TVMValue* values, const int* type_codes, int num_args) - : values(values), type_codes(type_codes), num_args(num_args) {} -}; - /*! * \brief Translate legacy TVMArgs to PackedArgs * \param value The TVMValue array diff --git a/src/runtime/c_runtime_api.cc b/src/runtime/c_runtime_api.cc index 4e17c2abec..cd9be5e5c0 100644 --- a/src/runtime/c_runtime_api.cc +++ b/src/runtime/c_runtime_api.cc @@ -582,7 +582,8 @@ int TVMFuncCall(TVMFunctionHandle func, TVMValue* args, int* arg_type_codes, int LegacyCallPacked(ffi_func, args, arg_type_codes, num_args, &rv); // special handle of certain return types. if (rv.type_index() == tvm::ffi::TypeIndex::kTVMFFIDataType || - rv.type_index() == tvm::ffi::TypeIndex::kTVMFFIBytes) { + rv.type_index() == tvm::ffi::TypeIndex::kTVMFFIBytes || + rv.type_index() == tvm::ffi::TypeIndex::kTVMFFIStr) { // TODO(tvm-team): handle bytes return type here TVMRuntimeEntry* e = TVMAPIRuntimeStore::Get(); if (rv.type_index() == tvm::ffi::TypeIndex::kTVMFFIDataType) { @@ -595,6 +596,10 @@ int TVMFuncCall(TVMFunctionHandle func, TVMValue* args, int* arg_type_codes, int e->ret_bytes.size = e->ret_str.length(); *ret_type_code = kTVMBytes; ret_val->v_handle = &(e->ret_bytes); + } else if (rv.type_index() == tvm::ffi::TypeIndex::kTVMFFIStr) { + e->ret_str = rv.operator std::string(); + *ret_type_code = kTVMStr; + ret_val->v_str = e->ret_str.c_str(); } } else { MoveAnyToLegacyTVMValue(std::move(rv), ret_val, ret_type_code);
