[all-commits] [llvm/llvm-project] 377efc: [mlir][arith] Fix SelectOp unsafe int range infere...
Longsheng Du via All-commits
all-commits at lists.llvm.org
Tue Jan 13 09:17:46 PST 2026
Branch: refs/heads/main
Home: https://github.com/llvm/llvm-project
Commit: 377efc730beb292d1f51025d51ea27d86196ff06
https://github.com/llvm/llvm-project/commit/377efc730beb292d1f51025d51ea27d86196ff06
Author: Longsheng Du <longshengd at nvidia.com>
Date: 2026-01-13 (Tue, 13 Jan 2026)
Changed paths:
M mlir/lib/Dialect/Arith/IR/InferIntRangeInterfaceImpls.cpp
M mlir/lib/Dialect/LLVMIR/IR/NVVMDialect.cpp
M mlir/test/Dialect/Arith/int-range-interface.mlir
M mlir/test/Dialect/LLVMIR/nvvm-test-range.mlir
M mlir/test/lib/Dialect/Test/TestOpDefs.cpp
M mlir/test/lib/Dialect/Test/TestOps.td
Log Message:
-----------
[mlir][arith] Fix SelectOp unsafe int range inference with uninitialized range case (#173716)
This PR fixes a bug in `arith::SelectOp::inferResultRangesFromOptional`
where uninitialized SelectOp branch int ranges were incorrectly joined
with initialized int ranges during dataflow analysis, leading to
incorrect folding in `-int-range-optimizations`.
**The Issue:**
When a `arith.select` branch has an uninitialized range (e.g., from an
op like `nvvm.read.ptx.sreg.cluster.ctaid.x`, `scf.switch`, `llvm.call`,
... that lacks range inference), the analysis computed
`IntegerValueRange::join(Uninitialized, Constant) = Constant`. This
caused the `arith.select` to be replaced with the constant, ignoring the
dynamic branch.
**Example:**
```mlir
// The bug before fix: -int-range-optimizations replaces %1 with %c32
// led to incorrect results and unsafe behaviours
%0 = nvvm.read.ptx.sreg.cluster.ctaid.x : i32 // Uninitialized int range
%c32 = arith.constant 32 : i32
%1 = arith.select %cond, %0, %c32 : i32
```
**The Fix:**
Explicitly ensure `inferResultRangesFromOptional` all select cases have
initialized ranges before combining them. If any case is uninitialized,
the result is now treated as max range. Also added default max range for
`nvvmInferResultRanges` and `test.without_bounds` op to simulate and
test uninitialized ranges.
---------
Co-authored-by: Jakub Kuderski <kubakuderski at gmail.com>
To unsubscribe from these emails, change your notification settings at https://github.com/llvm/llvm-project/settings/notifications
More information about the All-commits
mailing list