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>