tqchen opened a new pull request, #20062:
URL: https://github.com/apache/tvm/pull/20062
This refactors TIRx buffers into ordinary `ir.Var` identities carrying an
immutable `BufferType`.
## Rationale
The old representation kept a standalone Buffer object, its logical metadata,
and a separate pointer-typed data Var. Generic Var substitution and
buffer-specific rebuilding could therefore let identity, metadata, and
pointer
type drift apart. In this change, `BufferType` is the single source of the
logical contract and `buffer_data(buffer)` is the explicit physical-pointer
projection; `DeclBuffer` records a view's binding.
## Simplification
- Generic Var scoping, substitution, undefined-variable analysis, and
identity
maps now apply directly to buffers.
- The pointer type is derived from `BufferType`, so the physical pointer and
buffer metadata cannot disagree.
- The common IR path no longer needs a second Buffer object, duplicate
constructor state, or a parallel buffer-only substitution mechanism.
- Metadata-changing transforms create a fresh typed Var and bind it
explicitly
at the replacing `AllocBuffer` or `DeclBuffer`.
Physical-root tracking remains deliberately local to the passes whose
correctness depends on allocation ownership:
1. Storage liveness/reuse attributes alias accesses to the owning allocation.
2. Pointer vector-type inference and rewriting aggregate evidence at that
root.
3. LowerTIRx cleanup projects aliases to the remapped physical allocation.
4. Thread-allreduce's deferred remapper replaces/removes the owning
allocation.
Each is a plain pass-local `Map<Var, Var>` flattened when a `DeclBuffer` is
visited. Parameters, `buffer_map`, and `AllocBuffer` seed roots; an alias
to an
unseen typed source is rejected rather than silently treated as a new root.
Simpler passes decode the one-step `buffer_data` projection locally.
## Migration guide
### C++
- Treat `BufferVar` as a checked view over an ordinary `Var`.
- Read logical metadata through `buffer->...`; use `buffer.var()` for
identity.
- Use `buffer.data()` or `builtin::buffer_data()` only when a physical
pointer
expression is required.
- To change metadata, rebuild `BufferType`, create a fresh Var, and bind it
at
the replacement definition site.
- A transformed `DeclBuffer` replaces its superseded declaration
consistently;
it must not leave a stale declaration beside the new binding.
### Python
- Buffer constructors return `tvm.ir.Var`; `.ty` contains `BufferType`.
- Use `tvm.tirx.is_buffer_var(value)` for runtime discrimination.
- `tvm.tirx.Buffer` remains an import/annotation compatibility alias for
`tvm.ir.Var`, so `isinstance(value, Buffer)` matches every Var.
- Importing `tvm.tirx` installs the legacy metadata properties on Var.
Non-buffer Vars raise `AttributeError`; buffer `.dtype` keeps its
historical
`DataType` result.
## Behavior-preserving follow-up
The second commit restores the original LowerTIRx, FlattenBuffer, and BF16
outputs; restores the alias-lifetime regression; replaces superseded
declarations; keeps ownership logic pass-local; and fixes tagged
shared-memory
children after their parent allocation is rebuilt.
## Validation
- C++ build (`USE_LLVM=OFF`): passed.
- Focused matrix: **239 passed, 3 skipped**.
- Complete unfiltered TIRx/S-TIR Python run:
**62 failed, 2248 passed, 1668 skipped, 11 xfailed, 1 xpassed,
1 warning, 10 collection errors** in 290.09s.
- The broad run exposed 12 genuine Python dtype-compatibility failures; those
were fixed and rerun green. The remaining failures and collection errors
require LLVM/target globals, CUDA, NKI, Torch, or
target-feature/target-build
support unavailable on this node.
- `git diff --check`: passed.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]