Skip to content

[BugFix][TIRx] Keep unsigned branch bounds conservative - #74

Open
anerli wants to merge 1 commit into
tile-ai:tilelang_mainfrom
magnitudedev:pr/unsigned-branch-bounds
Open

anerli wants to merge 1 commit into
tile-ai:tilelang_mainfrom
magnitudedev:pr/unsigned-branch-bounds

Conversation

@anerli

@anerli anerli commented Sep 15, 2026

Copy link
Copy Markdown

Problem and root cause

Access-region analysis can crash while solving a branch condition involving an unsigned variable, for example when the solver constructs a negative unsigned literal. The linear solver subtracts terms and constructs negative coefficients, but unsigned arithmetic is modular and does not satisfy the signed-integer assumptions used by this path.

Change

  • src/tirx/transform/ir_utils.cc: admit only signed scalar integer variables to this conditional-bounds solver. Leave other conditions unresolved so access analysis retains conservative bounds.
  • tests/python/s_tir/analysis/test_sblock_access_region.py: add ten unsigned cases covering uint32/uint64 equality, inequality, ordering, and wraparound, plus a signed control case confirming that signed bounds still refine.

This deliberately trades refinement of unsupported conditions for correctness.

Tests and validation

All 11 new cases pass. Eight unsigned cases crash on unmodified upstream. The whole test file produces 21 passed, 2 failed, 0 skipped on this branch. Both remaining failures also occur on unmodified upstream with the same configuration:

  • test_block_access_region_detector: structural-equality mismatch in the inferred region.
  • test_opaque_access_with_tvm_access_ptr: expected ValueError is not raised.
PYTHONPATH=$PWD/python python -m pytest -q \
  tests/python/s_tir/analysis/test_sblock_access_region.py
pre-commit run --files src/tirx/transform/ir_utils.cc \
  tests/python/s_tir/analysis/test_sblock_access_region.py

Validation environment: Apple M4 Max, macOS/Darwin 24.5.0 arm64, Python 3.12.11. Each branch was rebuilt separately from upstream 907a88c87 with:

cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release \
  -DUSE_METAL=ON -DUSE_LLVM=OFF -DUSE_CUDA=OFF -DUSE_Z3=OFF
cmake --build build --target tvm tvm_compiler tvm_runtime -j 8

git diff --check passes. The applicable formatting and other pre-commit hooks pass. The repository-wide ASF-header hook reports 11 existing violations, reproduced on unmodified upstream; none is in the changed files.

Related

No duplicate open PR was found. This conditional-solver change is independent of the analyzer work in #67 and #72.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant