Author: William Moses Date: 2026-10-09T08:50:45-05:00 New Revision: c3f237649f5f3b84ad1c196109a167ddd27a38c9
URL: https://github.com/llvm/llvm-project/commit/c3f237649f5f3b84ad1c196109a167ddd27a38c9 DIFF: https://github.com/llvm/llvm-project/commit/c3f237649f5f3b84ad1c196109a167ddd27a38c9.diff LOG: Revert "[mlir][affine] Admit signless integers for affine.parallel maxs/mins/…" This reverts commit 380fcd8b4334846838412960c1117932b6a60364. Added: Modified: mlir/lib/Dialect/Affine/IR/AffineOps.cpp mlir/test/Conversion/AffineToStandard/lower-affine.mlir mlir/test/Dialect/Affine/invalid.mlir mlir/test/Dialect/Affine/ops.mlir mlir/test/Dialect/Affine/parallelize.mlir Removed: ################################################################################ diff --git a/mlir/lib/Dialect/Affine/IR/AffineOps.cpp b/mlir/lib/Dialect/Affine/IR/AffineOps.cpp index a58b39ff5aac98..ad9845d8935fa3 100644 --- a/mlir/lib/Dialect/Affine/IR/AffineOps.cpp +++ b/mlir/lib/Dialect/Affine/IR/AffineOps.cpp @@ -4279,18 +4279,21 @@ static bool isResultTypeMatchAtomicRMWKind(Type resultType, case arith::AtomicRMWKind::minimumf: case arith::AtomicRMWKind::minnumf: return isa<FloatType>(resultType); - // The kind carries the signedness of the comparison; the integer is - // signless (what arith's maxsi/minsi/maxui/minui, which the reduction - // lowers to, operate on) or of that signedness. - case arith::AtomicRMWKind::maxs: + case arith::AtomicRMWKind::maxs: { + auto intType = dyn_cast<IntegerType>(resultType); + return intType && intType.isSigned(); + } case arith::AtomicRMWKind::mins: { auto intType = dyn_cast<IntegerType>(resultType); - return intType && !intType.isUnsigned(); + return intType && intType.isSigned(); + } + case arith::AtomicRMWKind::maxu: { + auto intType = dyn_cast<IntegerType>(resultType); + return intType && intType.isUnsigned(); } - case arith::AtomicRMWKind::maxu: case arith::AtomicRMWKind::minu: { auto intType = dyn_cast<IntegerType>(resultType); - return intType && !intType.isSigned(); + return intType && intType.isUnsigned(); } case arith::AtomicRMWKind::ori: case arith::AtomicRMWKind::andi: diff --git a/mlir/test/Conversion/AffineToStandard/lower-affine.mlir b/mlir/test/Conversion/AffineToStandard/lower-affine.mlir index dacbd1c4f7dd6d..09edb404a8375e 100644 --- a/mlir/test/Conversion/AffineToStandard/lower-affine.mlir +++ b/mlir/test/Conversion/AffineToStandard/lower-affine.mlir @@ -817,40 +817,6 @@ func.func @affine_parallel_simple_dynamic_bounds(%arg0: memref<?x?xf32>, %arg1: ///////////////////////////////////////////////////////////////////// -func.func @affine_parallel_with_int_min_max(%arg0: memref<3xi32>) -> (i32, i32, i32, i32) { - %0:4 = affine.parallel (%k) = (0) to (3) reduce ("maxs", "mins", "maxu", "minu") -> (i32, i32, i32, i32) { - %1 = affine.load %arg0[%k] : memref<3xi32> - affine.yield %1, %1, %1, %1 : i32, i32, i32, i32 - } - return %0#0, %0#1, %0#2, %0#3 : i32, i32, i32, i32 -} -// CHECK-LABEL: func @affine_parallel_with_int_min_max -// CHECK: %[[INIT_1:.*]] = arith.constant -2147483648 : i32 -// CHECK-NEXT: %[[INIT_2:.*]] = arith.constant 2147483647 : i32 -// CHECK-NEXT: %[[INIT_3:.*]] = arith.constant 0 : i32 -// CHECK-NEXT: %[[INIT_4:.*]] = arith.constant -1 : i32 -// CHECK-NEXT: %[[RES:.*]]:4 = scf.parallel (%[[I:.*]]) = (%{{.*}}) to (%{{.*}}) step (%{{.*}}) init (%[[INIT_1]], %[[INIT_2]], %[[INIT_3]], %[[INIT_4]]) -> (i32, i32, i32, i32) { -// CHECK-NEXT: %[[VAL:.*]] = memref.load -// CHECK-NEXT: scf.reduce(%[[VAL]], %[[VAL]], %[[VAL]], %[[VAL]] : i32, i32, i32, i32) { -// CHECK-NEXT: ^bb0(%[[LHS:.*]]: i32, %[[RHS:.*]]: i32): -// CHECK-NEXT: %[[R:.*]] = arith.maxsi %[[LHS]], %[[RHS]] : i32 -// CHECK-NEXT: scf.reduce.return %[[R]] : i32 -// CHECK-NEXT: }, { -// CHECK-NEXT: ^bb0(%[[LHS:.*]]: i32, %[[RHS:.*]]: i32): -// CHECK-NEXT: %[[R:.*]] = arith.minsi %[[LHS]], %[[RHS]] : i32 -// CHECK-NEXT: scf.reduce.return %[[R]] : i32 -// CHECK-NEXT: }, { -// CHECK-NEXT: ^bb0(%[[LHS:.*]]: i32, %[[RHS:.*]]: i32): -// CHECK-NEXT: %[[R:.*]] = arith.maxui %[[LHS]], %[[RHS]] : i32 -// CHECK-NEXT: scf.reduce.return %[[R]] : i32 -// CHECK-NEXT: }, { -// CHECK-NEXT: ^bb0(%[[LHS:.*]]: i32, %[[RHS:.*]]: i32): -// CHECK-NEXT: %[[R:.*]] = arith.minui %[[LHS]], %[[RHS]] : i32 -// CHECK-NEXT: scf.reduce.return %[[R]] : i32 -// CHECK-NEXT: } -// CHECK-NEXT: } -// CHECK-NEXT: return %[[RES]]#0, %[[RES]]#1, %[[RES]]#2, %[[RES]]#3 : i32, i32, i32, i32 - func.func @affine_parallel_with_reductions(%arg0: memref<3x3xf32>, %arg1: memref<3x3xf32>) -> (f32, f32) { %0:2 = affine.parallel (%kx, %ky) = (0, 0) to (2, 2) reduce ("addf", "mulf") -> (f32, f32) { %1 = affine.load %arg0[%kx, %ky] : memref<3x3xf32> diff --git a/mlir/test/Dialect/Affine/invalid.mlir b/mlir/test/Dialect/Affine/invalid.mlir index 87a40e7382b2ea..3afebfcc076285 100644 --- a/mlir/test/Dialect/Affine/invalid.mlir +++ b/mlir/test/Dialect/Affine/invalid.mlir @@ -297,30 +297,6 @@ func.func @affine_parallel(%arg0 : index, %arg1 : index, %arg2 : index) { // ----- -func.func @affine_parallel_maxs_unsigned() { - %0 = memref.alloc() : memref<100x100xui32> - // expected-error@+1 {{result type cannot match reduction attribute}} - %1 = affine.parallel (%i, %j) = (0, 0) to (100, 100) step (10, 10) reduce ("maxs") -> (ui32) { - %2 = affine.load %0[%i, %j] : memref<100x100xui32> - affine.yield %2 : ui32 - } - return -} - -// ----- - -func.func @affine_parallel_minu_signed() { - %0 = memref.alloc() : memref<100x100xsi32> - // expected-error@+1 {{result type cannot match reduction attribute}} - %1 = affine.parallel (%i, %j) = (0, 0) to (100, 100) step (10, 10) reduce ("minu") -> (si32) { - %2 = affine.load %0[%i, %j] : memref<100x100xsi32> - affine.yield %2 : si32 - } - return -} - -// ----- - func.func @no_upper_bound_affine_parallel() { // expected-error@+1 {{expected lower bound map to have at least one result}} affine.parallel (%arg2) = (max()) to (1) { diff --git a/mlir/test/Dialect/Affine/ops.mlir b/mlir/test/Dialect/Affine/ops.mlir index 54e35b9ad06b4b..f5bcb384bc9cd7 100644 --- a/mlir/test/Dialect/Affine/ops.mlir +++ b/mlir/test/Dialect/Affine/ops.mlir @@ -192,18 +192,6 @@ func.func @parallel(%A : memref<100x100xf32>, %N : index) { // ----- -// CHECK-LABEL: func @parallel_int_min_max -func.func @parallel_int_min_max(%A : memref<100xi32>) { - // CHECK: affine.parallel (%{{.*}}) = (0) to (100) reduce ("maxs", "mins", "maxu", "minu") -> (i32, i32, i32, i32) - %0:4 = affine.parallel (%i) = (0) to (100) reduce ("maxs", "mins", "maxu", "minu") -> (i32, i32, i32, i32) { - %1 = affine.load %A[%i] : memref<100xi32> - affine.yield %1, %1, %1, %1 : i32, i32, i32, i32 - } - return -} - -// ----- - // CHECK-LABEL: @parallel_min_max // CHECK: %[[A:.*]]: index, %[[B:.*]]: index, %[[C:.*]]: index, %[[D:.*]]: index func.func @parallel_min_max(%a: index, %b: index, %c: index, %d: index) { diff --git a/mlir/test/Dialect/Affine/parallelize.mlir b/mlir/test/Dialect/Affine/parallelize.mlir index 3a85a209135351..17992f0111e9ed 100644 --- a/mlir/test/Dialect/Affine/parallelize.mlir +++ b/mlir/test/Dialect/Affine/parallelize.mlir @@ -195,25 +195,6 @@ func.func @iter_args(%in: memref<10xf32>) { return } -// CHECK-LABEL: @iter_args_max -// REDUCE-LABEL: @iter_args_max -func.func @iter_args_max(%in: memref<10xi32>) { - // REDUCE: %[[init:.*]] = arith.constant - %c0 = arith.constant 0 : i32 - // CHECK-NOT: affine.parallel - // REDUCE: %[[reduced:.*]] = affine.parallel (%{{.*}}) = (0) to (10) reduce ("maxs") -> (i32) - %final_red = affine.for %i = 0 to 10 iter_args(%red_iter = %c0) -> (i32) { - // REDUCE: %[[red_value:.*]] = affine.load - %ld = affine.load %in[%i] : memref<10xi32> - // REDUCE-NOT: arith.maxsi - %max = arith.maxsi %red_iter, %ld : i32 - // REDUCE: affine.yield %[[red_value]] - affine.yield %max : i32 - } - // REDUCE: arith.maxsi %[[init]], %[[reduced]] - return -} - // CHECK-LABEL: @nested_iter_args // REDUCE-LABEL: @nested_iter_args func.func @nested_iter_args(%in: memref<20x10xf32>) { _______________________________________________ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
