[Mlir-commits] [mlir] 971076f - [NFC][mlir][SPIR-V] Test ceildivui/ceildivsi/floordivsi via test-convert-to-spirv (#198766)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Wed Jun 3 14:51:34 PDT 2026
Author: Arseniy Obolenskiy
Date: 2026-06-03T17:51:28-04:00
New Revision: 971076f616e6c6f07580c506375b700b207224f9
URL: https://github.com/llvm/llvm-project/commit/971076f616e6c6f07580c506375b700b207224f9
DIFF: https://github.com/llvm/llvm-project/commit/971076f616e6c6f07580c506375b700b207224f9.diff
LOG: [NFC][mlir][SPIR-V] Test ceildivui/ceildivsi/floordivsi via test-convert-to-spirv (#198766)
SPIR-V has no direct opcode for these ops. Verify that using
`--test-convert-to-spirv` pass is sufficient to convert these ops to
SPIR-V
Added:
Modified:
mlir/test/Conversion/ConvertToSPIRV/arith.mlir
Removed:
################################################################################
diff --git a/mlir/test/Conversion/ConvertToSPIRV/arith.mlir b/mlir/test/Conversion/ConvertToSPIRV/arith.mlir
index d9a33a1f7b6e8..fa204c4df8ace 100644
--- a/mlir/test/Conversion/ConvertToSPIRV/arith.mlir
+++ b/mlir/test/Conversion/ConvertToSPIRV/arith.mlir
@@ -34,6 +34,61 @@ func.func @int32_scalar_srem(%lhs: i32, %rhs: i32) {
return
}
+// CHECK-LABEL: @scalar_ceildivui
+// CHECK-SAME: (%[[LHS:.+]]: i32, %[[RHS:.+]]: i32)
+func.func @scalar_ceildivui(%lhs: i32, %rhs: i32) -> i32 {
+ // CHECK: %[[ISZERO:.+]] = spirv.IEqual %[[LHS]], %{{.+}} : i32
+ // CHECK: %[[MINUSONE:.+]] = spirv.ISub %[[LHS]], %{{.+}} : i32
+ // CHECK: %[[Q:.+]] = spirv.UDiv %[[MINUSONE]], %[[RHS]] : i32
+ // CHECK: %[[PLUSONE:.+]] = spirv.IAdd %[[Q]], %{{.+}} : i32
+ // CHECK: %[[R:.+]] = spirv.Select %[[ISZERO]], %{{.+}}, %[[PLUSONE]] : i1, i32
+ // CHECK: spirv.ReturnValue %[[R]]
+ %0 = arith.ceildivui %lhs, %rhs : i32
+ return %0 : i32
+}
+
+// CHECK-LABEL: @scalar_ceildivsi
+// CHECK-SAME: (%[[LHS:.+]]: i32, %[[RHS:.+]]: i32)
+func.func @scalar_ceildivsi(%lhs: i32, %rhs: i32) -> i32 {
+ // CHECK: %[[Q:.+]] = spirv.SDiv %[[LHS]], %[[RHS]] : i32
+ // CHECK: %[[PROD:.+]] = spirv.IMul %[[Q]], %[[RHS]] : i32
+ // CHECK: %[[NE:.+]] = spirv.INotEqual %[[LHS]], %[[PROD]] : i32
+ // CHECK: %[[LNEG:.+]] = spirv.SLessThan %[[LHS]], %{{.+}} : i32
+ // CHECK: %[[RNEG:.+]] = spirv.SLessThan %[[RHS]], %{{.+}} : i32
+ // CHECK: %[[SAMESIGN:.+]] = spirv.LogicalEqual %[[LNEG]], %[[RNEG]] : i1
+ // CHECK: %[[COND:.+]] = spirv.LogicalAnd %[[NE]], %[[SAMESIGN]] : i1
+ // CHECK: %[[QP1:.+]] = spirv.IAdd %[[Q]], %{{.+}} : i32
+ // CHECK: %[[R:.+]] = spirv.Select %[[COND]], %[[QP1]], %[[Q]] : i1, i32
+ // CHECK: spirv.ReturnValue %[[R]]
+ %0 = arith.ceildivsi %lhs, %rhs : i32
+ return %0 : i32
+}
+
+// CHECK-LABEL: @scalar_floordivsi
+// CHECK-SAME: (%[[LHS:.+]]: i32, %[[RHS:.+]]: i32)
+func.func @scalar_floordivsi(%lhs: i32, %rhs: i32) -> i32 {
+ // CHECK: %[[Q:.+]] = spirv.SDiv %[[LHS]], %[[RHS]] : i32
+ // CHECK: %[[PROD:.+]] = spirv.IMul %[[Q]], %[[RHS]] : i32
+ // CHECK: %[[NE:.+]] = spirv.INotEqual %[[LHS]], %[[PROD]] : i32
+ // CHECK: %[[LNEG:.+]] = spirv.SLessThan %[[LHS]], %{{.+}} : i32
+ // CHECK: %[[RNEG:.+]] = spirv.SLessThan %[[RHS]], %{{.+}} : i32
+ // CHECK: %[[DIFFSIGN:.+]] = spirv.LogicalNotEqual %[[LNEG]], %[[RNEG]] : i1
+ // CHECK: %[[COND:.+]] = spirv.LogicalAnd %[[NE]], %[[DIFFSIGN]] : i1
+ // CHECK: %[[QM1:.+]] = spirv.IAdd %[[Q]], %{{.+}} : i32
+ // CHECK: %[[R:.+]] = spirv.Select %[[COND]], %[[QM1]], %[[Q]] : i1, i32
+ // CHECK: spirv.ReturnValue %[[R]]
+ %0 = arith.floordivsi %lhs, %rhs : i32
+ return %0 : i32
+}
+
+// CHECK-LABEL: @vector_ceildivsi
+func.func @vector_ceildivsi(%lhs: vector<4xi32>, %rhs: vector<4xi32>) -> vector<4xi32> {
+ // CHECK: spirv.SDiv %{{.*}}, %{{.*}} : vector<4xi32>
+ // CHECK: spirv.Select %{{.*}}, %{{.*}}, %{{.*}} : vector<4xi1>, vector<4xi32>
+ %0 = arith.ceildivsi %lhs, %rhs : vector<4xi32>
+ return %0 : vector<4xi32>
+}
+
// -----
//===----------------------------------------------------------------------===//
More information about the Mlir-commits
mailing list