[Mlir-commits] [mlir] [mlir][arith] Remove some e2e tests (PR #112012)
Andrzej WarzyĆski
llvmlistbot at llvm.org
Fri Oct 11 08:56:26 PDT 2024
https://github.com/banach-space created https://github.com/llvm/llvm-project/pull/112012
I am removing the recently added integration test for various Arith Ops.
These operations and their lowerings are effectively already verified by
the Arith-to-LLVM conversion tests in:
* "mlir/test/Conversion/ArithToLLVM/arith-to-llvm.mlir"
I've noticed that a few variants of arith.cmpi were missing in that file
- those are added here as well.
This is a follow-up for this discussion:
* https://github.com/llvm/llvm-project/pull/92272
See also the recent update to our guidelines on e2e tests in MLIR:
* https://github.com/llvm/mlir-www/pull/203
>From c21504290b76c11c86a7106d07e3b8cf93a57bf3 Mon Sep 17 00:00:00 2001
From: Andrzej Warzynski <andrzej.warzynski at arm.com>
Date: Fri, 11 Oct 2024 16:32:33 +0100
Subject: [PATCH] [mlir][arith] Remove some e2e tests
I am removing the recently added integration test for various Arith Ops.
These operations and their lowerings are effectively already verified by
the Arith-to-LLVM conversion tests in:
* "mlir/test/Conversion/ArithToLLVM/arith-to-llvm.mlir"
I've noticed that a few variants of arith.cmpi were missing in that file
- those are added here as well.
This is a follow-up for this discussion:
* https://github.com/llvm/llvm-project/pull/92272
See also the recent update to our guidelines on e2e tests in MLIR:
* https://github.com/llvm/mlir-www/pull/203
---
.../Conversion/ArithToLLVM/arith-to-llvm.mlir | 40 ++--
.../Dialect/Arith/CPU/addition.mlir | 88 ---------
.../Dialect/Arith/CPU/comparison.mlir | 174 ------------------
.../Dialect/Arith/CPU/multiplication.mlir | 119 ------------
4 files changed, 26 insertions(+), 395 deletions(-)
delete mode 100644 mlir/test/Integration/Dialect/Arith/CPU/addition.mlir
delete mode 100644 mlir/test/Integration/Dialect/Arith/CPU/comparison.mlir
delete mode 100644 mlir/test/Integration/Dialect/Arith/CPU/multiplication.mlir
diff --git a/mlir/test/Conversion/ArithToLLVM/arith-to-llvm.mlir b/mlir/test/Conversion/ArithToLLVM/arith-to-llvm.mlir
index d3bdbe89a54876..64c40f1aba43bc 100644
--- a/mlir/test/Conversion/ArithToLLVM/arith-to-llvm.mlir
+++ b/mlir/test/Conversion/ArithToLLVM/arith-to-llvm.mlir
@@ -46,33 +46,45 @@ func.func @ops(f32, f32, i32, i32, f64) -> (f32, i32) {
%1 = arith.subi %arg2, %arg3: i32
// CHECK: = llvm.icmp "slt" %arg2, %1 : i32
%2 = arith.cmpi slt, %arg2, %1 : i32
+// CHECK: = llvm.icmp "sle" %arg2, %1 : i32
+ %3 = arith.cmpi sle, %arg2, %1 : i32
+// CHECK: = llvm.icmp "sgt" %arg2, %1 : i32
+ %4 = arith.cmpi sgt, %arg2, %1 : i32
+// CHECK: = llvm.icmp "ult" %arg2, %1 : i32
+ %5 = arith.cmpi ult, %arg2, %1 : i32
+// CHECK: = llvm.icmp "ule" %arg2, %1 : i32
+ %6 = arith.cmpi ule, %arg2, %1 : i32
+// CHECK: = llvm.icmp "ugt" %arg2, %1 : i32
+ %7 = arith.cmpi ugt, %arg2, %1 : i32
+// CHECK: = llvm.icmp "eq" %arg2, %1 : i32
+ %8 = arith.cmpi eq, %arg2, %1 : i32
// CHECK: = llvm.sdiv %arg2, %arg3 : i32
- %3 = arith.divsi %arg2, %arg3 : i32
+ %9 = arith.divsi %arg2, %arg3 : i32
// CHECK: = llvm.udiv %arg2, %arg3 : i32
- %4 = arith.divui %arg2, %arg3 : i32
+ %10 = arith.divui %arg2, %arg3 : i32
// CHECK: = llvm.srem %arg2, %arg3 : i32
- %5 = arith.remsi %arg2, %arg3 : i32
+ %11 = arith.remsi %arg2, %arg3 : i32
// CHECK: = llvm.urem %arg2, %arg3 : i32
- %6 = arith.remui %arg2, %arg3 : i32
+ %12 = arith.remui %arg2, %arg3 : i32
// CHECK: = llvm.fdiv %arg0, %arg1 : f32
- %8 = arith.divf %arg0, %arg1 : f32
+ %13 = arith.divf %arg0, %arg1 : f32
// CHECK: = llvm.frem %arg0, %arg1 : f32
- %9 = arith.remf %arg0, %arg1 : f32
+ %14 = arith.remf %arg0, %arg1 : f32
// CHECK: = llvm.and %arg2, %arg3 : i32
- %10 = arith.andi %arg2, %arg3 : i32
+ %15 = arith.andi %arg2, %arg3 : i32
// CHECK: = llvm.or %arg2, %arg3 : i32
- %11 = arith.ori %arg2, %arg3 : i32
+ %16 = arith.ori %arg2, %arg3 : i32
// CHECK: = llvm.xor %arg2, %arg3 : i32
- %12 = arith.xori %arg2, %arg3 : i32
+ %17 = arith.xori %arg2, %arg3 : i32
// CHECK: = llvm.mlir.constant(7.900000e-01 : f64) : f64
- %15 = arith.constant 7.9e-01 : f64
+ %18 = arith.constant 7.9e-01 : f64
// CHECK: = llvm.shl %arg2, %arg3 : i32
- %16 = arith.shli %arg2, %arg3 : i32
+ %19 = arith.shli %arg2, %arg3 : i32
// CHECK: = llvm.ashr %arg2, %arg3 : i32
- %17 = arith.shrsi %arg2, %arg3 : i32
+ %20 = arith.shrsi %arg2, %arg3 : i32
// CHECK: = llvm.lshr %arg2, %arg3 : i32
- %18 = arith.shrui %arg2, %arg3 : i32
- return %0, %4 : f32, i32
+ %21 = arith.shrui %arg2, %arg3 : i32
+ return %0, %10 : f32, i32
}
// Checking conversion of index types to integers using i1, assuming no target
diff --git a/mlir/test/Integration/Dialect/Arith/CPU/addition.mlir b/mlir/test/Integration/Dialect/Arith/CPU/addition.mlir
deleted file mode 100644
index b6acfd53c1f5d9..00000000000000
--- a/mlir/test/Integration/Dialect/Arith/CPU/addition.mlir
+++ /dev/null
@@ -1,88 +0,0 @@
-// RUN: mlir-opt %s --convert-scf-to-cf --convert-cf-to-llvm --convert-vector-to-llvm \
-// RUN: --convert-func-to-llvm --convert-arith-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 @addi_i1(%v1 : i1, %v2 : i1) {
- vector.print str "@addi_i1\n"
- %res = arith.addi %v1, %v2 : i1
- vector.print %res : i1
- return
-}
-
-func.func @addi() {
- // ------------------------------------------------
- // Test i1
- // ------------------------------------------------
-
- // addi on i1
- // addi(0, 1) : i1 = 1 : i1; addi(0, -1) : i1 = 1
- %false = arith.constant 0 : i1
- %true = arith.constant 1 : i1
-
- // CHECK-LABEL: @addi_i1
- // CHECK-NEXT: 1
- func.call @addi_i1(%false, %true) : (i1, i1) -> ()
-
- // CHECK-LABEL: @addi_i1
- // CHECK-NEXT: 1
- %true_based_on_non_zero_val = arith.constant -1 : i1
- func.call @addi_i1(%false, %true_based_on_non_zero_val) : (i1, i1) -> ()
-
- // ------------------------------------------------
- // TODO: Test i8, i16 etc..
- // ------------------------------------------------
-
- return
-}
-
-func.func @addui_extended_i1(%v1 : i1, %v2 : i1) {
- vector.print str "@addui_extended_i1\n"
- %res, %overflow = arith.addui_extended %v1, %v2 : i1, i1
- vector.print %res : i1
- vector.print %overflow : i1
- return
-}
-
-func.func @addi_extended() {
- // ------------------------------------------------
- // Test i1
- // ------------------------------------------------
-
- // addui_extended on i1
- // addui_extended 1 1 : i1 = 0, 1
- %true = arith.constant 1 : i1
- %false = arith.constant 0 : i1
-
- // CHECK-LABEL: @addui_extended_i1
- // CHECK-NEXT: 0
- // CHECK-NEXT: 1
- func.call @addui_extended_i1(%true, %true) : (i1, i1) -> ()
-
- // CHECK-LABEL: @addui_extended_i1
- // CHECK-NEXT: 1
- // CHECK-NEXT: 0
- func.call @addui_extended_i1(%true, %false) : (i1, i1) -> ()
-
- // CHECK-LABEL: @addui_extended_i1
- // CHECK-NEXT: 1
- // CHECK-NEXT: 0
- func.call @addui_extended_i1(%false, %true) : (i1, i1) -> ()
-
- // CHECK-LABEL: @addui_extended_i1
- // CHECK-NEXT: 0
- // CHECK-NEXT: 0
- func.call @addui_extended_i1(%false, %false) : (i1, i1) -> ()
-
- // ------------------------------------------------
- // TODO: Test i8, i16 etc..
- // ------------------------------------------------
- return
-}
-
-func.func @entry() {
- func.call @addi() : () -> ()
- func.call @addi_extended() : () -> ()
- return
-}
diff --git a/mlir/test/Integration/Dialect/Arith/CPU/comparison.mlir b/mlir/test/Integration/Dialect/Arith/CPU/comparison.mlir
deleted file mode 100644
index 418fbb0c0a94c7..00000000000000
--- a/mlir/test/Integration/Dialect/Arith/CPU/comparison.mlir
+++ /dev/null
@@ -1,174 +0,0 @@
-// RUN: mlir-opt %s --convert-scf-to-cf --convert-cf-to-llvm --convert-vector-to-llvm \
-// RUN: --convert-func-to-llvm --convert-arith-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 @cmpi_eq_i1(%v1 : i1, %v2 : i1) {
- vector.print str "@cmpi_eq_i1\n"
- %res = arith.cmpi eq, %v1, %v2 : i1
- vector.print %res : i1
- return
-}
-
-func.func @cmpi_slt_i1(%v1 : i1, %v2 : i1) {
- vector.print str "@cmpi_slt_i1\n"
- %res = arith.cmpi slt, %v1, %v2 : i1
- vector.print %res : i1
- return
-}
-
-func.func @cmpi_sle_i1(%v1 : i1, %v2 : i1) {
- vector.print str "@cmpi_sle_i1\n"
- %res = arith.cmpi sle, %v1, %v2 : i1
- vector.print %res : i1
- return
-}
-
-func.func @cmpi_sgt_i1(%v1 : i1, %v2 : i1) {
- vector.print str "@cmpi_sgt_i1\n"
- %res = arith.cmpi sgt, %v1, %v2 : i1
- vector.print %res : i1
- return
-}
-
-func.func @cmpi_sge_i1(%v1 : i1, %v2 : i1) {
- vector.print str "@cmpi_sge_i1\n"
- %res = arith.cmpi sge, %v1, %v2 : i1
- vector.print %res : i1
- return
-}
-
-func.func @cmpi_eq() {
- // ------------------------------------------------
- // Test i1
- // ------------------------------------------------
- %false_i1 = arith.constant 0 : i1
- %true_i1 = arith.constant 1 : i1
- %true_i1_n1 = arith.constant -1 : i1
-
- // int values 1 and -1 are represented with the same bitvector (`0b1`)
- // CHECK-LABEL: @cmpi_eq_i1
- // CHECK-NEXT: 1
- func.call @cmpi_eq_i1(%true_i1, %true_i1_n1) : (i1, i1) -> ()
-
- // CHECK-LABEL: @cmpi_eq_i1
- // CHECK-NEXT: 0
- func.call @cmpi_eq_i1(%false_i1, %true_i1) : (i1, i1) -> ()
-
- // CHECK-LABEL: @cmpi_eq_i1
- // CHECK-NEXT: 0
- func.call @cmpi_eq_i1(%true_i1, %false_i1) : (i1, i1) -> ()
-
- // CHECK-LABEL: @cmpi_eq_i1
- // CHECK-NEXT: 1
- func.call @cmpi_eq_i1(%true_i1, %true_i1) : (i1, i1) -> ()
-
- // CHECK-LABEL: @cmpi_eq_i1
- // CHECK-NEXT: 1
- func.call @cmpi_eq_i1(%false_i1, %false_i1) : (i1, i1) -> ()
-
- %false = arith.constant false
- %true = arith.constant true
-
- // CHECK-LABEL: @cmpi_eq_i1
- // CHECK-NEXT: 1
- func.call @cmpi_eq_i1(%true, %true_i1) : (i1, i1) -> ()
-
- // CHECK-LABEL: @cmpi_eq_i1
- // CHECK-NEXT: 1
- func.call @cmpi_eq_i1(%false, %false_i1) : (i1, i1) -> ()
-
- // CHECK-LABEL: @cmpi_eq_i1
- // CHECK-NEXT: 1
- func.call @cmpi_eq_i1(%true, %true_i1_n1) : (i1, i1) -> ()
-
- // ------------------------------------------------
- // TODO: Test i8, i16 etc..
- // ------------------------------------------------
- return
-}
-
-func.func @cmpi_signed() {
- // ------------------------------------------------
- // Test i1
- // ------------------------------------------------
- %false_i1 = arith.constant 0 : i1
- %true_i1 = arith.constant 1 : i1
- %true_i1_n1 = arith.constant -1 : i1
-
- // int values 1 and -1 are represented with the same bitvector (`0b1`)
- // But, bitvector `1` is interpreted as int value -1 in signed comparison
-
- // CHECK-LABEL: @cmpi_sge_i1
- // CHECK-NEXT: 1
- func.call @cmpi_sge_i1(%false_i1, %true_i1_n1) : (i1, i1) -> ()
-
- // CHECK-LABEL: @cmpi_sge_i1
- // CHECK-NEXT: 1
- func.call @cmpi_sge_i1(%false_i1, %true_i1) : (i1, i1) -> ()
-
- // CHECK-LABEL: @cmpi_sge_i1
- // CHECK-NEXT: 0
- func.call @cmpi_sge_i1(%true_i1, %false_i1) : (i1, i1) -> ()
-
- %false = arith.constant false
- %true = arith.constant true
-
- // CHECK-LABEL: @cmpi_slt_i1
- // CHECK-NEXT: 0
- func.call @cmpi_slt_i1(%false, %true) : (i1, i1) -> ()
-
- // CHECK-LABEL: @cmpi_sle_i1
- // CHECK-NEXT: 0
- func.call @cmpi_sle_i1(%false, %true) : (i1, i1) -> ()
-
- // CHECK-LABEL: @cmpi_sgt_i1
- // CHECK-NEXT: 1
- func.call @cmpi_sgt_i1(%false, %true) : (i1, i1) -> ()
-
- // CHECK-LABEL: @cmpi_sge_i1
- // CHECK-NEXT: 1
- func.call @cmpi_sge_i1(%false, %true) : (i1, i1) -> ()
-
- // CHECK-LABEL: @cmpi_sge_i1
- // CHECK-NEXT: 0
- func.call @cmpi_sge_i1(%true, %false) : (i1, i1) -> ()
-
- // ------------------------------------------------
- // TODO: Test i8, i16 etc..
- // ------------------------------------------------
- return
-}
-
-func.func @cmpi_ult_index(%v1 : index, %v2 : index) {
- vector.print str "@cmpi_ult_index\n"
- %res = arith.cmpi ult, %v1, %v2 : index
- vector.print %res : i1
- return
-}
-
-func.func @cmpi_unsigned() {
- // ------------------------------------------------
- // Test index
- // ------------------------------------------------
- // 0 `ult` -2^63 = true
- %zero = arith.constant 0 : index
- %index_min = arith.constant -9223372036854775808 : index
-
- // CHECK-LABEL: @cmpi_ult_index
- // CHECK-NEXT: 1
- func.call @cmpi_ult_index(%zero, %index_min) : (index, index) -> ()
-
- // ------------------------------------------------
- // TODO: i1, i8, i16, uge, ule etc..
- // ------------------------------------------------
- return
-}
-
-func.func @entry() {
- func.call @cmpi_eq() : () -> ()
- func.call @cmpi_signed() : () -> ()
- func.call @cmpi_unsigned() : () -> ()
- return
-}
diff --git a/mlir/test/Integration/Dialect/Arith/CPU/multiplication.mlir b/mlir/test/Integration/Dialect/Arith/CPU/multiplication.mlir
deleted file mode 100644
index 21fd816788431e..00000000000000
--- a/mlir/test/Integration/Dialect/Arith/CPU/multiplication.mlir
+++ /dev/null
@@ -1,119 +0,0 @@
-// RUN: mlir-opt %s --convert-scf-to-cf --convert-cf-to-llvm --convert-vector-to-llvm \
-// RUN: --convert-func-to-llvm --convert-arith-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 @mulsi_extended_i1(%v1 : i1, %v2 : i1) {
- vector.print str "@mulsi_extended_i1\n"
- %low, %high = arith.mulsi_extended %v1, %v2 : i1
- vector.print %low : i1
- vector.print %high : i1
- return
-}
-
-func.func @mulsi_extended_i8(%v1 : i8, %v2 : i8) {
- vector.print str "@mulsi_extended_i8\n"
- %low, %high = arith.mulsi_extended %v1, %v2 : i8
- vector.print %low : i8
- vector.print %high : i8
- return
-}
-
-func.func @mulsi_extended() {
- // ------------------------------------------------
- // Test i1
- // ------------------------------------------------
-
- // mulsi_extended on i1, tests for overflow bit
- // mulsi_extended 1, 1 : i1 = (1, 0)
- %true = arith.constant true
- %false = arith.constant false
-
- // CHECK-LABEL: @mulsi_extended_i1
- // CHECK-NEXT: 1
- // CHECK-NEXT: 0
- func.call @mulsi_extended_i1(%true, %true) : (i1, i1) -> ()
-
- // CHECK-LABEL: @mulsi_extended_i1
- // CHECK-NEXT: 0
- // CHECK-NEXT: 0
- func.call @mulsi_extended_i1(%true, %false) : (i1, i1) -> ()
-
- // CHECK-LABEL: @mulsi_extended_i1
- // CHECK-NEXT: 0
- // CHECK-NEXT: 0
- func.call @mulsi_extended_i1(%false, %true) : (i1, i1) -> ()
-
- // CHECK-LABEL: @mulsi_extended_i1
- // CHECK-NEXT: 0
- // CHECK-NEXT: 0
- func.call @mulsi_extended_i1(%false, %false) : (i1, i1) -> ()
-
- // ------------------------------------------------
- // Test i8
- // ------------------------------------------------
- // mulsi extended versions, with overflow
- %c_100_i8 = arith.constant -100 : i8
-
- // mulsi_extended -100, -100 : i8 = (16, 39)
- // CHECK-LABEL: @mulsi_extended_i8
- // CHECK-NEXT: 16
- // CHECK-NEXT: 39
- func.call @mulsi_extended_i8(%c_100_i8, %c_100_i8) : (i8, i8) -> ()
-
- // ------------------------------------------------
- // TODO: Test i16, i32 etc..
- // ------------------------------------------------
- return
-}
-
-func.func @mului_extended_i8(%v1 : i8, %v2 : i8) {
- vector.print str "@mului_extended_i8\n"
- %low, %high = arith.mului_extended %v1, %v2 : i8
- vector.print %low : i8
- vector.print %high : i8
- return
-}
-
-func.func @mului_extended() {
- // ------------------------------------------------
- // Test i8
- // ------------------------------------------------
- %c_n100_i8 = arith.constant -100 : i8
- %c_156_i8 = arith.constant 156 : i8
-
- // mului_extended -100, -100 : i8 = (16, 95)
- // and on equivalent representations (e.g. 156 === -100 (mod 256))
-
- // CHECK-LABEL: @mului_extended_i8
- // CHECK-NEXT: 16
- // CHECK-NEXT: 95
- func.call @mului_extended_i8(%c_n100_i8, %c_n100_i8) : (i8, i8) -> ()
-
- // CHECK-LABEL: @mului_extended_i8
- // CHECK-NEXT: 16
- // CHECK-NEXT: 95
- func.call @mului_extended_i8(%c_n100_i8, %c_156_i8) : (i8, i8) -> ()
-
- // CHECK-LABEL: @mului_extended_i8
- // CHECK-NEXT: 16
- // CHECK-NEXT: 95
- func.call @mului_extended_i8(%c_156_i8, %c_n100_i8) : (i8, i8) -> ()
-
- // CHECK-LABEL: @mului_extended_i8
- // CHECK-NEXT: 16
- // CHECK-NEXT: 95
- func.call @mului_extended_i8(%c_156_i8, %c_156_i8) : (i8, i8) -> ()
-
- // ------------------------------------------------
- // TODO: Test i1, i16, i32 etc..
- // ------------------------------------------------
- return
-}
-
-func.func @entry() {
- func.call @mulsi_extended() : () -> ()
- func.call @mului_extended() : () -> ()
- return
-}
More information about the Mlir-commits
mailing list