This is an automated email from the ASF dual-hosted git repository.
syfeng 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 8d555a08df [REFACTOR] Cleanup legacy relay runtime data structures
(#17713)
8d555a08df is described below
commit 8d555a08df85cd55dec71018dedfdfdfb51e413d
Author: Tianqi Chen <[email protected]>
AuthorDate: Thu Mar 6 22:23:34 2025 -0500
[REFACTOR] Cleanup legacy relay runtime data structures (#17713)
This PR cleans up legacy relay runtime data structures
ADT and closure as they can be superseded by Array and
VMClosure in the relax VM.
---
include/tvm/runtime/container/adt.h | 143 -----------------------------
include/tvm/runtime/container/closure.h | 52 -----------
include/tvm/runtime/object.h | 2 -
include/tvm/runtime/relax_vm/executable.h | 1 -
include/tvm/runtime/relax_vm/vm.h | 8 +-
python/tvm/relax/op/base.py | 10 --
python/tvm/runtime/container.py | 53 -----------
python/tvm/runtime/name_transforms.py | 32 -------
python/tvm/runtime/profiler_vm.py | 91 ------------------
src/node/structural_hash.cc | 27 ------
src/runtime/container.cc | 47 ----------
src/runtime/relax_vm/vm.cc | 8 +-
tests/cpp/container_test.cc | 14 ---
tests/python/relax/test_relax_operators.py | 2 +-
14 files changed, 9 insertions(+), 481 deletions(-)
diff --git a/include/tvm/runtime/container/adt.h
b/include/tvm/runtime/container/adt.h
deleted file mode 100644
index 013a055bd0..0000000000
--- a/include/tvm/runtime/container/adt.h
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-/*!
- * \file tvm/runtime/container/adt.h
- * \brief Runtime ADT container types.
- */
-#ifndef TVM_RUNTIME_CONTAINER_ADT_H_
-#define TVM_RUNTIME_CONTAINER_ADT_H_
-
-#include <utility>
-#include <vector>
-
-#include "./base.h"
-
-namespace tvm {
-namespace runtime {
-
-/*! \brief An object representing a structure or enumeration. */
-class ADTObj : public Object, public InplaceArrayBase<ADTObj, ObjectRef> {
- public:
- /*! \brief The tag representing the constructor used. */
- int32_t tag;
- /*! \brief Number of fields in the ADT object. */
- uint32_t size;
- // The fields of the structure follows directly in memory.
-
- static constexpr const uint32_t _type_index = TypeIndex::kRuntimeADT;
- static constexpr const char* _type_key = "runtime.ADT";
- TVM_DECLARE_FINAL_OBJECT_INFO(ADTObj, Object);
-
- private:
- /*!
- * \return The number of elements in the array.
- */
- size_t GetSize() const { return size; }
-
- /*!
- * \brief Initialize the elements in the array.
- *
- * \tparam Iterator Iterator type of the array.
- * \param begin The begin iterator.
- * \param end The end iterator.
- */
- template <typename Iterator>
- void Init(Iterator begin, Iterator end) {
- size_t num_elems = std::distance(begin, end);
- this->size = 0;
- auto it = begin;
- for (size_t i = 0; i < num_elems; ++i) {
- InplaceArrayBase::EmplaceInit(i, *it++);
- // Only increment size after the initialization succeeds
- this->size++;
- }
- }
-
- friend class ADT;
- friend InplaceArrayBase<ADTObj, ObjectRef>;
-};
-
-/*! \brief reference to algebraic data type objects. */
-class ADT : public ObjectRef {
- public:
- /*!
- * \brief construct an ADT object reference.
- * \param tag The tag of the ADT object.
- * \param fields The fields of the ADT object.
- */
- ADT(int32_t tag, std::vector<ObjectRef> fields) : ADT(tag, fields.begin(),
fields.end()){};
-
- /*!
- * \brief construct an ADT object reference.
- * \param tag The tag of the ADT object.
- * \param begin The begin iterator to the start of the fields array.
- * \param end The end iterator to the end of the fields array.
- */
- template <typename Iterator>
- ADT(int32_t tag, Iterator begin, Iterator end) {
- size_t num_elems = std::distance(begin, end);
- auto ptr = make_inplace_array_object<ADTObj, ObjectRef>(num_elems);
- ptr->tag = tag;
- ptr->Init(begin, end);
- data_ = std::move(ptr);
- }
-
- /*!
- * \brief construct an ADT object reference.
- * \param tag The tag of the ADT object.
- * \param init The initializer list of fields.
- */
- ADT(int32_t tag, std::initializer_list<ObjectRef> init) : ADT(tag,
init.begin(), init.end()){};
-
- /*!
- * \brief Access element at index.
- *
- * \param idx The array index
- * \return const ObjectRef
- */
- const ObjectRef& operator[](size_t idx) const { return
operator->()->operator[](idx); }
-
- /*!
- * \brief Return the ADT tag.
- */
- int32_t tag() const { return operator->()->tag; }
-
- /*!
- * \brief Return the number of fields.
- */
- size_t size() const { return operator->()->size; }
-
- /*!
- * \brief Construct a tuple object.
- *
- * \tparam Args Type params of tuple feilds.
- * \param args Tuple fields.
- * \return ADT The tuple object reference.
- */
- template <typename... Args>
- static ADT Tuple(Args&&... args) {
- return ADT(0, std::forward<Args>(args)...);
- }
-
- TVM_DEFINE_OBJECT_REF_METHODS(ADT, ObjectRef, ADTObj);
-};
-} // namespace runtime
-} // namespace tvm
-#endif // TVM_RUNTIME_CONTAINER_ADT_H_
diff --git a/include/tvm/runtime/container/closure.h
b/include/tvm/runtime/container/closure.h
deleted file mode 100644
index a280d1ada7..0000000000
--- a/include/tvm/runtime/container/closure.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-/*!
- * \file tvm/runtime/container/closure.h
- * \brief Runtime Closure container types.
- */
-#ifndef TVM_RUNTIME_CONTAINER_CLOSURE_H_
-#define TVM_RUNTIME_CONTAINER_CLOSURE_H_
-
-#include "./base.h"
-
-namespace tvm {
-namespace runtime {
-
-/*!
- * \brief An object representing a closure. This object is used by both the
- * Relay VM and interpreter.
- */
-class ClosureObj : public Object {
- public:
- static constexpr const uint32_t _type_index = TypeIndex::kRuntimeClosure;
- static constexpr const char* _type_key = "runtime.Closure";
- TVM_DECLARE_BASE_OBJECT_INFO(ClosureObj, Object);
-};
-
-/*! \brief reference to closure. */
-class Closure : public ObjectRef {
- public:
- TVM_DEFINE_OBJECT_REF_METHODS(Closure, ObjectRef, ClosureObj);
-};
-
-} // namespace runtime
-} // namespace tvm
-
-#endif // TVM_RUNTIME_CONTAINER_CLOSURE_H_
diff --git a/include/tvm/runtime/object.h b/include/tvm/runtime/object.h
index ea31fcac48..81dcb43c0b 100644
--- a/include/tvm/runtime/object.h
+++ b/include/tvm/runtime/object.h
@@ -77,8 +77,6 @@ struct TypeIndex {
/*! \brief runtime::RPCObjectRef */
kRuntimeRPCObjectRef = 9,
// static assignments that may subject to change.
- kRuntimeClosure,
- kRuntimeADT,
kStaticIndexEnd,
/*! \brief Type index is allocated during runtime. */
kDynamic = kStaticIndexEnd
diff --git a/include/tvm/runtime/relax_vm/executable.h
b/include/tvm/runtime/relax_vm/executable.h
index 845842f22a..e953d94eb9 100644
--- a/include/tvm/runtime/relax_vm/executable.h
+++ b/include/tvm/runtime/relax_vm/executable.h
@@ -23,7 +23,6 @@
#ifndef TVM_RUNTIME_RELAX_VM_EXECUTABLE_H_
#define TVM_RUNTIME_RELAX_VM_EXECUTABLE_H_
-#include <tvm/runtime/container/closure.h>
#include <tvm/runtime/object.h>
#include <tvm/runtime/packed_func.h>
#include <tvm/runtime/registry.h>
diff --git a/include/tvm/runtime/relax_vm/vm.h
b/include/tvm/runtime/relax_vm/vm.h
index da833d5d6c..607269d812 100644
--- a/include/tvm/runtime/relax_vm/vm.h
+++ b/include/tvm/runtime/relax_vm/vm.h
@@ -60,7 +60,7 @@ enum class VMInstrumentReturnKind : int {
/*!
* \brief An object representing a vm closure.
*/
-class VMClosureObj : public ClosureObj {
+class VMClosureObj : public Object {
public:
/*!
* \brief The function name. The function could be any
@@ -78,14 +78,14 @@ class VMClosureObj : public ClosureObj {
static constexpr const uint32_t _type_index = TypeIndex::kDynamic;
static constexpr const char* _type_key = "relax.vm.Closure";
- TVM_DECLARE_FINAL_OBJECT_INFO(VMClosureObj, ClosureObj);
+ TVM_DECLARE_FINAL_OBJECT_INFO(VMClosureObj, Object);
};
/*! \brief reference to closure. */
-class VMClosure : public Closure {
+class VMClosure : public ObjectRef {
public:
VMClosure(String func_name, PackedFunc impl);
- TVM_DEFINE_OBJECT_REF_METHODS(VMClosure, Closure, VMClosureObj);
+ TVM_DEFINE_OBJECT_REF_METHODS(VMClosure, ObjectRef, VMClosureObj);
/*!
* \brief Create another PackedFunc with last arguments already bound to
last_args.
diff --git a/python/tvm/relax/op/base.py b/python/tvm/relax/op/base.py
index 03e86a4633..b0570344e5 100644
--- a/python/tvm/relax/op/base.py
+++ b/python/tvm/relax/op/base.py
@@ -416,16 +416,6 @@ def render_object(val: tvm.Object) -> str:
"""
if isinstance(val, tvm.nd.NDArray):
return str(val)
- # no pretty-printer by default, so if we don't handle this,
- # then we can't look inside tuples
- if isinstance(val, tvm.runtime.container.ADT):
- # the fields array of an ADT cannot be directly accessed in Python
- # so we have to get the length and index into the fields separately
- fields = ", ".join([render_object(val[i]) for i in range(len(val))])
- # special case: tag = 0 is a tuple
- if val.tag == 0:
- return f"({fields})"
- return f"ADT(tag={val.tag}, fields=[{fields}])"
if isinstance(val, tvm.ir.Array):
fields = ", ".join([render_object(val[i]) for i in range(len(val))])
return f"({fields})"
diff --git a/python/tvm/runtime/container.py b/python/tvm/runtime/container.py
index f1a0706a38..1bc8d798ef 100644
--- a/python/tvm/runtime/container.py
+++ b/python/tvm/runtime/container.py
@@ -17,7 +17,6 @@
"""Runtime container structures."""
import tvm._ffi
from .object import Object, PyNativeObject
-from .object_generic import ObjectTypes
from . import _ffi_api
@@ -60,58 +59,6 @@ def getitem_helper(obj, elem_getter, length, idx):
return elem_getter(obj, idx)
-@tvm._ffi.register_object("runtime.ADT")
-class ADT(Object):
- """Algebatic data type(ADT) object.
-
- Parameters
- ----------
- tag : int
- The tag of ADT.
-
- fields : list[Object] or tuple[Object]
- The source tuple.
- """
-
- def __init__(self, tag, fields):
- for f in fields:
- assert isinstance(
- f, ObjectTypes
- ), f"Expect object or tvm NDArray type, but received : {type(f)}"
- self.__init_handle_by_constructor__(_ffi_api.ADT, tag, *fields)
-
- @property
- def tag(self):
- return _ffi_api.GetADTTag(self)
-
- def __getitem__(self, idx):
- return getitem_helper(self, _ffi_api.GetADTFields, len(self), idx)
-
- def __len__(self):
- return _ffi_api.GetADTSize(self)
-
-
-def tuple_object(fields=None):
- """Create a ADT object from source tuple.
-
- Parameters
- ----------
- fields : list[Object] or tuple[Object]
- The source tuple.
-
- Returns
- -------
- ret : ADT
- The created object.
- """
- fields = fields if fields else []
- for f in fields:
- assert isinstance(
- f, ObjectTypes
- ), f"Expect object or tvm NDArray type, but received : {type(f)}"
- return _ffi_api.Tuple(*fields)
-
-
@tvm._ffi.register_object("runtime.String")
class String(str, PyNativeObject):
"""TVM runtime.String object, represented as a python str.
diff --git a/python/tvm/runtime/name_transforms.py
b/python/tvm/runtime/name_transforms.py
deleted file mode 100644
index 402a47f1a1..0000000000
--- a/python/tvm/runtime/name_transforms.py
+++ /dev/null
@@ -1,32 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-"""
-Name transformation functions shared in Backend and Runtime
-"""
-
-from . import _ffi_api
-
-
-def sanitize_name(original_name: str):
- """Sanitize name for output into compiler artifacts
-
- Parameters
- ----------
- original_name : str
- Original name to sanitize
- """
- return _ffi_api.SanitizeName(original_name)
diff --git a/python/tvm/runtime/profiler_vm.py
b/python/tvm/runtime/profiler_vm.py
deleted file mode 100644
index 4f625c0c67..0000000000
--- a/python/tvm/runtime/profiler_vm.py
+++ /dev/null
@@ -1,91 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-# pylint: disable=no-else-return, unidiomatic-typecheck, undefined-variable,
invalid-name, redefined-builtin
-"""
-The Relay Virtual Machine profiler.
-
-Provides extra APIs for profiling vm execution.
-"""
-import warnings
-from tvm.runtime import _ffi_api
-from tvm.rpc import base as rpc_base
-from . import vm
-from .profiling import Report
-
-
-def enabled():
- """Whether vm profiler is enabled."""
- return hasattr(_ffi_api, "_VirtualMachineDebug")
-
-
-class VirtualMachineProfiler(vm.VirtualMachine):
- """Relay profile VM runtime."""
-
- def __init__(self, exe, device, memory_cfg=None):
- super(VirtualMachineProfiler, self).__init__(exe, device, memory_cfg)
-
- # Make sure the constructor of the VM module is on the proper device
- # Remote devices have device_type of their actual device_type +
RPC_SESS_MASK
- if device.device_type >= rpc_base.RPC_SESS_MASK:
- self.module =
device._rpc_sess.get_function("runtime._VirtualMachineDebug")(exe)
- else:
- self.module = _ffi_api._VirtualMachineDebug(exe.module)
-
- self._init = self.module["init"]
- self._invoke = self.module["invoke"]
- self._profile = self.module["profile"]
- self._profile_rpc = self.module["profile_rpc"]
- self._set_input = self.module["set_input"]
- self._setup_device(device, memory_cfg)
-
- def get_stat(self, sort_by_time=True): # pylint: disable=unused-argument
- """Get the statistics of executed ops.
-
- REMOVED, use profile method instead.
- """
- warnings.warn("get_stat has been removed, use profile instead")
- return ""
-
- def profile(self, *args, func_name="main", collectors=None, **kwargs):
- """Profile a function call.
-
- Parameters
- ----------
- func_name : str
- The name of the function.
-
- collectors : Optional[Sequence[MetricCollector]]
- Extra metrics to collect. If profiling over RPC, collectors must
be `None`.
-
- args : list[tvm.runtime.NDArray] or list[np.ndarray]
- The arguments to the function.
-
- kwargs: dict of str to tvm.runtime.NDArray or np.ndarray
- Named arguments to the function.
-
- Returns
- -------
- timing_results : str
- Overall and per-op timing results formatted in a table.
- """
- if args or kwargs:
- self.set_input(func_name, *args, **kwargs)
- if self.module.type_key == "rpc":
- # We cannot serialize MetricCollectors over RPC
- assert collectors is None, "Profiling with collectors is not
supported over RPC"
- return Report.from_json(self._profile_rpc(func_name))
- return self._profile(func_name, collectors)
diff --git a/src/node/structural_hash.cc b/src/node/structural_hash.cc
index 1c2d766e0c..0a4d9d1335 100644
--- a/src/node/structural_hash.cc
+++ b/src/node/structural_hash.cc
@@ -25,7 +25,6 @@
#include <tvm/node/object_path.h>
#include <tvm/node/reflection.h>
#include <tvm/node/structural_hash.h>
-#include <tvm/runtime/container/adt.h>
#include <tvm/runtime/profiling.h>
#include <tvm/runtime/registry.h>
#include <tvm/target/codegen.h>
@@ -345,32 +344,6 @@ TVM_STATIC_IR_FUNCTOR(ReprPrinter, vtable)
p->stream << '"' << support::StrEscape(op->data, op->size) << '"';
});
-struct ADTObjTrait {
- static constexpr const std::nullptr_t VisitAttrs = nullptr;
-
- static void SHashReduce(const runtime::ADTObj* key, SHashReducer
hash_reduce) {
- hash_reduce(key->tag);
- hash_reduce(static_cast<uint64_t>(key->size));
- for (uint32_t i = 0; i < key->size; ++i) {
- hash_reduce((*key)[i]);
- }
- }
-
- static bool SEqualReduce(const runtime::ADTObj* lhs, const runtime::ADTObj*
rhs,
- SEqualReducer equal) {
- if (lhs == rhs) return true;
- if (lhs->tag != rhs->tag) return false;
- if (lhs->size != rhs->size) return false;
-
- for (uint32_t i = 0; i < lhs->size; ++i) {
- if (!equal((*lhs)[i], (*rhs)[i])) return false;
- }
- return true;
- }
-};
-
-TVM_REGISTER_REFLECTION_VTABLE(runtime::ADTObj, ADTObjTrait);
-
struct ModuleNodeTrait {
static constexpr const std::nullptr_t VisitAttrs = nullptr;
static constexpr const std::nullptr_t SHashReduce = nullptr;
diff --git a/src/runtime/container.cc b/src/runtime/container.cc
index 7b5105a3fc..cf1fa6c83a 100644
--- a/src/runtime/container.cc
+++ b/src/runtime/container.cc
@@ -21,9 +21,7 @@
* \file src/runtime/container.cc
* \brief Implementations of common containers.
*/
-#include <tvm/runtime/container/adt.h>
#include <tvm/runtime/container/array.h>
-#include <tvm/runtime/container/closure.h>
#include <tvm/runtime/container/map.h>
#include <tvm/runtime/container/shape_tuple.h>
#include <tvm/runtime/container/string.h>
@@ -66,48 +64,6 @@ TVM_REGISTER_GLOBAL("runtime.ArraySize").set_body([](TVMArgs
args, TVMRetValue*
*ret = static_cast<int64_t>(static_cast<const ArrayNode*>(ptr)->size());
});
-// ADT
-
-TVM_REGISTER_OBJECT_TYPE(ADTObj);
-
-TVM_REGISTER_GLOBAL("runtime.GetADTTag").set_body([](TVMArgs args,
TVMRetValue* rv) {
- ObjectRef obj = args[0];
- const auto& adt = Downcast<ADT>(obj);
- *rv = static_cast<int64_t>(adt.tag());
-});
-
-TVM_REGISTER_GLOBAL("runtime.GetADTSize").set_body([](TVMArgs args,
TVMRetValue* rv) {
- ObjectRef obj = args[0];
- const auto& adt = Downcast<ADT>(obj);
- *rv = static_cast<int64_t>(adt.size());
-});
-
-TVM_REGISTER_GLOBAL("runtime.GetADTFields").set_body([](TVMArgs args,
TVMRetValue* rv) {
- ObjectRef obj = args[0];
- int idx = args[1];
- const auto& adt = Downcast<ADT>(obj);
- ICHECK_LT(idx, adt.size());
- *rv = adt[idx];
-});
-
-TVM_REGISTER_GLOBAL("runtime.Tuple").set_body([](TVMArgs args, TVMRetValue*
rv) {
- std::vector<ObjectRef> fields;
- for (auto i = 0; i < args.size(); ++i) {
- fields.push_back(args[i]);
- }
- *rv = ADT::Tuple(fields);
-});
-
-TVM_REGISTER_GLOBAL("runtime.ADT").set_body([](TVMArgs args, TVMRetValue* rv) {
- int itag = args[0];
- size_t tag = static_cast<size_t>(itag);
- std::vector<ObjectRef> fields;
- for (int i = 1; i < args.size(); i++) {
- fields.push_back(args[i]);
- }
- *rv = ADT(tag, fields);
-});
-
// String
TVM_REGISTER_OBJECT_TYPE(StringObj);
@@ -180,9 +136,6 @@ TVM_REGISTER_GLOBAL("runtime.MapItems").set_body([](TVMArgs
args, TVMRetValue* r
*ret = std::move(rkvs);
});
-// Closure
-TVM_REGISTER_OBJECT_TYPE(ClosureObj);
-
// ShapeTuple
TVM_REGISTER_OBJECT_TYPE(ShapeTupleObj);
diff --git a/src/runtime/relax_vm/vm.cc b/src/runtime/relax_vm/vm.cc
index ebb5afb1f4..1442f6cd06 100644
--- a/src/runtime/relax_vm/vm.cc
+++ b/src/runtime/relax_vm/vm.cc
@@ -70,12 +70,12 @@ PackedFunc VMClosure::BindLastArgs(PackedFunc func,
std::vector<TVMRetValue> las
// Utility functions.
//-----------------------------------------------------------
// Use the args after `starting_arg_idx` as a series of indices into `obj`,
-// indexing into nested ADTs and returning the final indexed object.
+// indexing into nested Array and returning the final indexed object.
ObjectRef IndexIntoNestedObject(ObjectRef obj, TVMArgs args, int
starting_arg_idx) {
for (int i = starting_arg_idx; i < args.size(); i++) {
- // the object must be an ADT to be able to index into it
+ // the object must be an Array to be able to index into it
if (!obj.as<ArrayNode>()) {
- LOG(FATAL) << "ValueError: Attempted to index into an object that is not
an ADT.";
+ LOG(FATAL) << "ValueError: Attempted to index into an object that is not
an Array.";
}
int index = args[i];
auto arr = Downcast<Array<ObjectRef>>(obj);
@@ -283,7 +283,7 @@ class VirtualMachineImpl : public VirtualMachine {
* \param save_name The saved name of the function.
* \param include_return Whether forward the return value, set it to false
allows
* us to ignore forwarding return value, which can be helpful to do
benchmarking
- * in RPC environment when return value is complicated ADT.
+ * in RPC environment when return value is complicated Array.
*
* \param args The arguments to bound to the function.
* \note This function is used by RPC server to help benchmarking.
diff --git a/tests/cpp/container_test.cc b/tests/cpp/container_test.cc
index 0a089eaebd..6f0c47c0ea 100644
--- a/tests/cpp/container_test.cc
+++ b/tests/cpp/container_test.cc
@@ -18,7 +18,6 @@
*/
#include <gtest/gtest.h>
-#include <tvm/runtime/container/adt.h>
#include <tvm/runtime/container/array.h>
#include <tvm/runtime/container/map.h>
#include <tvm/runtime/container/string.h>
@@ -99,19 +98,6 @@ class TestArrayObj : public Object, public
InplaceArrayBase<TestArrayObj, TestEr
friend class InplaceArrayBase;
};
-TEST(ADT, Constructor) {
- std::vector<ObjectRef> fields;
- auto f1 = ADT::Tuple(fields);
- auto f2 = ADT::Tuple(fields);
- ADT v1{1, {f1, f2}};
- ASSERT_EQ(f1.tag(), 0);
- ASSERT_EQ(f2.size(), 0);
- ASSERT_EQ(v1.tag(), 1);
- ASSERT_EQ(v1.size(), 2);
- ASSERT_EQ(Downcast<ADT>(v1[0]).tag(), 0);
- ASSERT_EQ(Downcast<ADT>(v1[1]).size(), 0);
-}
-
TEST(InplaceArrayBase, BadExceptionSafety) {
auto wrong_init = []() {
TestErrorSwitch f1{false};
diff --git a/tests/python/relax/test_relax_operators.py
b/tests/python/relax/test_relax_operators.py
index a80b988d06..1fdded9239 100644
--- a/tests/python/relax/test_relax_operators.py
+++ b/tests/python/relax/test_relax_operators.py
@@ -378,7 +378,7 @@ def test_op_call_inplace_packed(exec_mode):
for j in range(len(arr_a[i])):
arr_a[i][j] = arr_a[i][j] + arr_b[i][j]
a.copyfrom(arr_a)
- return tvm.runtime.container.ADT(0, [a, c])
+ return tvm.runtime.convert([a, c])
@tvm.script.ir_module
class CallInplaceTuple: