From: Pan Li <[email protected]>

Add test cases for the mis combine of the vwadd/vwsub vx combine.

        PR target/123317

gcc/testsuite/ChangeLog:

        * gcc.target/riscv/rvv/autovec/pr123317-run-1.c: New test.
        * gcc.target/riscv/rvv/autovec/pr123317-run-2.c: New test.
        * gcc.target/riscv/rvv/autovec/pr123317-run-3.c: New test.
        * gcc.target/riscv/rvv/autovec/pr123317-run-4.c: New test.
        * gcc.target/riscv/rvv/autovec/pr123317-run.h: New test.

Signed-off-by: Pan Li <[email protected]>
---
 .../riscv/rvv/autovec/pr123317-run-1.c        |  8 +++
 .../riscv/rvv/autovec/pr123317-run-2.c        |  8 +++
 .../riscv/rvv/autovec/pr123317-run-3.c        |  8 +++
 .../riscv/rvv/autovec/pr123317-run-4.c        |  8 +++
 .../riscv/rvv/autovec/pr123317-run.h          | 49 +++++++++++++++++++
 5 files changed, 81 insertions(+)
 create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/pr123317-run-1.c
 create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/pr123317-run-2.c
 create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/pr123317-run-3.c
 create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/pr123317-run-4.c
 create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/pr123317-run.h

diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr123317-run-1.c 
b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr123317-run-1.c
new file mode 100644
index 00000000000..9ef18efd065
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr123317-run-1.c
@@ -0,0 +1,8 @@
+/* { dg-do run } */
+/* { dg-require-effective-target riscv_v } */
+/* { dg-additional-options "-std=c99 -Os --param=gpr2vr-cost=0 -Wno-pedantic" 
} */
+
+#define OP -=
+#define EXPECT 0x881
+
+#include "pr123317-run.h"
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr123317-run-2.c 
b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr123317-run-2.c
new file mode 100644
index 00000000000..ceab87fb5ad
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr123317-run-2.c
@@ -0,0 +1,8 @@
+/* { dg-do run } */
+/* { dg-require-effective-target riscv_v } */
+/* { dg-additional-options "-std=c99 -O2 --param=gpr2vr-cost=0 -Wno-pedantic" 
} */
+
+#define OP -=
+#define EXPECT 0x881
+
+#include "pr123317-run.h"
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr123317-run-3.c 
b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr123317-run-3.c
new file mode 100644
index 00000000000..8abe890af9e
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr123317-run-3.c
@@ -0,0 +1,8 @@
+/* { dg-do run } */
+/* { dg-require-effective-target riscv_v } */
+/* { dg-additional-options "-std=c99 -Os --param=gpr2vr-cost=0 -Wno-pedantic" 
} */
+
+#define OP +=
+#define EXPECT 0x350000000000005c
+
+#include "pr123317-run.h"
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr123317-run-4.c 
b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr123317-run-4.c
new file mode 100644
index 00000000000..bdbd12681fc
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr123317-run-4.c
@@ -0,0 +1,8 @@
+/* { dg-do run } */
+/* { dg-require-effective-target riscv_v } */
+/* { dg-additional-options "-std=c99 -O2 --param=gpr2vr-cost=0 -Wno-pedantic" 
} */
+
+#define OP +=
+#define EXPECT 0x350000000000005c
+
+#include "pr123317-run.h"
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr123317-run.h 
b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr123317-run.h
new file mode 100644
index 00000000000..b5255b26e9c
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr123317-run.h
@@ -0,0 +1,49 @@
+#ifndef HAVE_DEFINED_PR123317_RUN_H
+#define HAVE_DEFINED_PR123317_RUN_H
+
+#include <stdint.h>
+
+#define BS_VEC(type, num) type __attribute__((vector_size(num * sizeof(type))))
+#define safe_mod_func_uint32_t_u_u(_ui1, _ui2)                                 
\
+  ({                                                                           
\
+    uint32_t ui1 = _ui1;                                                       
\
+    uint32_t ui2 = _ui2;                                                       
\
+    ui2 == 0 ? ui1 : 0;                                                        
\
+  })
+
+uint64_t BS_CHECKSUM;
+int32_t g_1577;
+
+void func_5(int32_t p_8, int32_t p_9, uint64_t p_10) {
+  BS_VEC(uint64_t, 4) BS_VAR_1[9] = {};
+  uint64_t LOCAL_CHECKSUM = 0;
+  int32_t l_1981 = 0;
+
+  for (p_10 = 0; p_10 <= 4; p_10 += g_1577 -= 1) {
+    l_1981 ^= safe_mod_func_uint32_t_u_u(p_8, p_9);
+    BS_VAR_1[0] OP (BS_VEC(uint64_t, 4)){l_1981, l_1981, l_1981, l_1981};
+  }
+
+  for (uint32_t BS_TEMP_121 = 0; BS_TEMP_121 < 9; BS_TEMP_121++)
+    for (uint32_t BS_TEMP_122 = 0; BS_TEMP_122 < 4; BS_TEMP_122++)
+      LOCAL_CHECKSUM ^=
+          BS_VAR_1[BS_TEMP_121][BS_TEMP_122] + LOCAL_CHECKSUM >> 2;
+
+  BS_CHECKSUM += LOCAL_CHECKSUM;
+}
+
+void func_1() {
+  int16_t l_32 = (int16_t)42122;
+  func_5(l_32, 0, l_32);
+}
+
+int main() {
+  func_1();
+
+  if (BS_CHECKSUM != EXPECT)
+    __builtin_abort();
+
+  return 0;
+}
+
+#endif
-- 
2.43.0

Reply via email to