[Mlir-commits] [mlir] 8031481 - [mlir][int-range] `IntRangeNarrowingPass` was missing `SparseConstantPropagation` analysis (#174088)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Wed Dec 31 06:13:37 PST 2025
Author: Ivan Butygin
Date: 2025-12-31T17:13:33+03:00
New Revision: 80314817b55facda688e9583c74abca9a6c6a49f
URL: https://github.com/llvm/llvm-project/commit/80314817b55facda688e9583c74abca9a6c6a49f
DIFF: https://github.com/llvm/llvm-project/commit/80314817b55facda688e9583c74abca9a6c6a49f.diff
LOG: [mlir][int-range] `IntRangeNarrowingPass` was missing `SparseConstantPropagation` analysis (#174088)
This was causing it to skip nested scf ops in some cases (see `scf.for`
test). Use convenience `loadBaselineAnalyses` func.
Added:
Modified:
mlir/lib/Dialect/Arith/Transforms/IntRangeOptimizations.cpp
mlir/test/Dialect/Arith/int-range-narrowing.mlir
Removed:
################################################################################
diff --git a/mlir/lib/Dialect/Arith/Transforms/IntRangeOptimizations.cpp b/mlir/lib/Dialect/Arith/Transforms/IntRangeOptimizations.cpp
index 2017905587b26..a85d3bb43a372 100644
--- a/mlir/lib/Dialect/Arith/Transforms/IntRangeOptimizations.cpp
+++ b/mlir/lib/Dialect/Arith/Transforms/IntRangeOptimizations.cpp
@@ -9,6 +9,7 @@
#include <utility>
#include "mlir/Analysis/DataFlow/ConstantPropagationAnalysis.h"
+#include "mlir/Analysis/DataFlow/Utils.h"
#include "mlir/Analysis/DataFlowFramework.h"
#include "mlir/Dialect/Arith/Transforms/Passes.h"
@@ -485,8 +486,7 @@ struct IntRangeOptimizationsPass final
Operation *op = getOperation();
MLIRContext *ctx = op->getContext();
DataFlowSolver solver;
- solver.load<DeadCodeAnalysis>();
- solver.load<SparseConstantPropagation>();
+ loadBaselineAnalyses(solver);
solver.load<IntegerRangeAnalysis>();
if (failed(solver.initializeAndRun(op)))
return signalPassFailure();
@@ -511,7 +511,7 @@ struct IntRangeNarrowingPass final
Operation *op = getOperation();
MLIRContext *ctx = op->getContext();
DataFlowSolver solver;
- solver.load<DeadCodeAnalysis>();
+ loadBaselineAnalyses(solver);
solver.load<IntegerRangeAnalysis>();
if (failed(solver.initializeAndRun(op)))
return signalPassFailure();
diff --git a/mlir/test/Dialect/Arith/int-range-narrowing.mlir b/mlir/test/Dialect/Arith/int-range-narrowing.mlir
index e16db6293560e..42dd4294b86e9 100644
--- a/mlir/test/Dialect/Arith/int-range-narrowing.mlir
+++ b/mlir/test/Dialect/Arith/int-range-narrowing.mlir
@@ -347,3 +347,33 @@ func.func @clamp_to_loop_bound_and_id() {
}
return
}
+
+func.func private @use(index)
+
+// CHECK-LABEL: func.func @loop_with_iter_arg
+func.func @loop_with_iter_arg() {
+ %c0 = arith.constant 0 : index
+ %c1 = arith.constant 0 : index
+ %c16 = arith.constant 16 : index
+
+ %cst = arith.constant dense<0.000000e+00> : vector<4xf32>
+
+// CHECK: %[[POS:.*]] = test.with_bounds {smax = 1 : index, smin = 0 : index, umax = 1 : index, umin = 0 : index} : index
+// CHECK: %[[NEG:.*]] = test.with_bounds {smax = 0 : index, smin = -1 : index, umax = -1 : index, umin = 0 : index} : index
+// Check iter args are still present
+// CHECK: scf.for {{.*}} iter_args({{.*}})
+// CHECK: %[[POS_I8:.*]] = arith.index_castui %[[POS]] : index to i8
+// CHECK: %[[NEG_I8:.*]] = arith.index_cast %[[NEG]] : index to i8
+// CHECK: %[[RES_I8:.*]] = arith.addi %[[POS_I8]], %[[NEG_I8]] : i8
+// CHECK: %[[RES:.*]] = arith.index_cast %[[RES_I8]] : i8 to index
+// CHECK: call @use(%[[RES]])
+
+ %0 = test.with_bounds { umin = 0 : index, umax = 1 : index, smin = 0 : index, smax = 1 : index } : index
+ %1 = test.with_bounds { umin = 0 : index, umax = -1 : index, smin = -1 : index, smax = 0 : index } : index
+ %res = scf.for %arg0 = %c0 to %c16 step %c1 iter_args(%arg1 = %cst) -> (vector<4xf32>) {
+ %2 = arith.addi %0, %1 : index
+ func.call @use(%2) : (index) -> ()
+ scf.yield %arg1 : vector<4xf32>
+ }
+ return
+}
More information about the Mlir-commits
mailing list