1a4e037bbb
## Summary - bump tvm-ffi and include the device definition where its `DLDevice` traits are instantiated - keep only the required Tensor wrapper layout fix and register `ir.Type` before reflected `Expr` fields can materialize a fallback wrapper - preserve `BaseFunc.with_attr` callers by moving only method-private results, never the canonical `self` wrapper ## Rationale The tvm-ffi lifetime update requires a replacement wrapper to fit the layout already registered for the same type index. `runtime.Tensor` replaces the core `ffi.Tensor` wrapper, so it must use empty slots. The ordinary TVM mixins are first-registered with their concrete descendants and may safely retain normal Python dictionaries; the additional mixin and explicit-dictionary slot changes are not required. Object tying also means `BaseFuncCopy(self)` may return `self`. Passing that wrapper through `_move()` invalidates the caller. The first update now passes the alias as an lvalue, forcing native copy-on-write to create a private result. Only later dictionary updates move a result that is not `self` and has not escaped the method. ## Validation - built an exact CPython 3.12 wheel from tvm-ffi `21e30c3b1d` and rebuilt TVM against it - direct Type/function/detach regressions: 3 passed - complete IR plus focused Relax coverage: 111 passed - prior Relax failure set: 157 passed, 9 skipped - runtime probe for `relax.Function`, `relax.ExternFunc`, and `tirx.PrimFunc`: original wrappers preserved; single- and multi-attribute results distinct and valid - all touched-file pre-commit hooks passed --------- Co-authored-by: Yaxing Cai <caiyaxing666@gmail.com>
44 lines
1.6 KiB
Python
44 lines
1.6 KiB
Python
# isort: skip_file
|
|
# 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=unused-import
|
|
"""Common data structures across all IR variants."""
|
|
|
|
from . import instrument, transform
|
|
from .attrs import Attrs, DictAttrs, make_node
|
|
from .base import (
|
|
EnvFunc,
|
|
Node,
|
|
SourceName,
|
|
Span,
|
|
SequentialSpan,
|
|
assert_structural_equal,
|
|
load_json,
|
|
save_json,
|
|
)
|
|
|
|
# Register Type before Expr. Expr's reflected ``ty`` field otherwise creates
|
|
# an auto-generated Type wrapper before the concrete Python class is available.
|
|
from .type import FuncType, PointerType, PrimType, TupleType, Type
|
|
from .expr import Call, Expr, GlobalVar, Range, Var, is_prim_expr, is_prim_var
|
|
from .function import BaseFunc, CallingConv
|
|
from .global_info import GlobalInfo, DummyGlobalInfo, VDevice
|
|
from .module import IRModule
|
|
from .op import Op, register_intrin_lowering, register_op_attr
|
|
|
|
from tvm_ffi import Array, Map
|