[Mlir-commits] [mlir] [mlir][arith] Add division integration tests (PR #98181)

Andrzej Warzyński llvmlistbot at llvm.org
Mon Jul 29 03:19:32 PDT 2024


================
@@ -0,0 +1,188 @@
+// Tests division operations and their variants (e.g. ceil/floordiv, rem etc)
+
+// RUN: mlir-opt %s --arith-expand --test-lower-to-llvm | \
+// RUN:   mlir-cpu-runner -e entry -entry-point-result=void \
+// RUN:                   --shared-libs=%mlir_c_runner_utils | \
+// RUN:   FileCheck %s --match-full-lines
+
+func.func @divsi_i8(%v1 : i8, %v2 : i8) {
+  vector.print str "@divsi_i8\n"
+  %0 = arith.divsi %v1, %v2 : i8
+  vector.print %0 : i8
+  return
+}
+
+func.func @divsi_i1(%v1 : i1, %v2 : i1) {
+  vector.print str "@divsi_i1\n"
+  %0 = arith.divsi %v1, %v2 : i1
+  vector.print %0 : i1
+  return
+}
+
+func.func @remsi_i8(%v1 : i8, %v2 : i8) {
+  vector.print str "@remsi_i8\n"
+  %0 = arith.remsi %v1, %v2 : i8
+  vector.print %0 : i8
+  return
+}
+
+func.func @ceildivsi_i8(%v1 : i8, %v2 : i8) {
+  vector.print str "@ceildivsi_i8\n"
+  %0 = arith.ceildivsi %v1, %v2 : i8
+  vector.print %0 : i8
+  return
+}
+
+func.func @divsi() {
+  // ------------------------------------------------
+  // Test i8
+  // ------------------------------------------------
+  %c68 = arith.constant 68 : i8
+  %cn97 = arith.constant -97 : i8
+  %c0 = arith.constant 0 : i8
+  %c1 = arith.constant 1 : i8
+
+  // divsi should round towards zero (rather than -infinity)
+  // divsi -97 68 = -1
+  // CHECK-LABEL: @divsi_i8
+  // CHECK-NEXT:  -1
+  func.call @divsi_i8(%cn97, %c68) : (i8, i8) -> ()
+
+  // divsi x x == 1
+  // note that i1 (booleans) are printed as:
+  //  false/true -> 0/1
----------------
banach-space wrote:

```suggestion
  // Note that i1 (booleans) are printed as:
  //  false/true -> 0/1
```
[nit] 

Also, IMO it would be good to expand this comment - this is quite tricky part and I'd rather avoid having to re-discover this again in the future 😅 How about:
```
Note that i1 (booleans) are zero-extended by `ConvertVectorToLLVM` (see `emitScalarPrint`). For that reason, non-zero value is always printed as "1" rather that "-1" (even though the bit representation for both is identical).
```

Also, shouldn't this comment be moved near where `i1` is tested? ;-)

https://github.com/llvm/llvm-project/pull/98181


More information about the Mlir-commits mailing list