[gcc r17-3249] RISC-V: Add more test cases for vwmacc[u].vv

Pan Li via Gcc-cvs <[email protected]>
Newsgroups gmane.comp.gcc.cvs
Message-ID <[email protected]>
https://gcc.gnu.org/g:c5d147d7370fb36834c9348c5d3bab229d89fb3e

commit r17-3249-gc5d147d7370fb36834c9348c5d3bab229d89fb3e
Author: Pan Li <[email protected]>
Date:   Wed Aug 12 10:42:29 2026 +0800

    RISC-V: Add more test cases for vwmacc[u].vv
    
    For csrr not asm check when enable overlap enabled.
    
    gcc/testsuite/ChangeLog:
    
            * gcc.target/riscv/rvv/base/pr112431-49.c: New test.
            * gcc.target/riscv/rvv/base/pr112431-50.c: New test.
    
    Signed-off-by: Pan Li <[email protected]>

Diff:
---
 .../gcc.target/riscv/rvv/base/pr112431-49.c        | 59 ++++++++++++++++++++++
 .../gcc.target/riscv/rvv/base/pr112431-50.c        | 59 ++++++++++++++++++++++
 2 files changed, 118 insertions(+)

diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-49.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-49.c
new file mode 100644
index 000000000000..9eec487e9f09
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-49.c
@@ -0,0 +1,59 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gcv -mabi=lp64d -O3" } */
+
+#include "riscv_vector.h"
+
+void
+foo (void *in, void *out, int n)
+{
+  for (int i = 0; i < n; i++)
+    {
+      asm volatile("nop" ::: "memory");
+      vint16m4_t v0 = __riscv_vle16_v_i16m4 (in, 4);in+=100;
+      vint8m2_t v0_n = __riscv_vreinterpret_v_i16m2_i8m2 (__riscv_vget_v_i16m4_i16m2 (v0, 1));
+      v0 = __riscv_vwmacc_vv_i16m4_tu (v0, v0_n, v0_n, 4);
+      asm volatile("nop" ::: "memory");
+      vint16m4_t v1 = __riscv_vle16_v_i16m4 (in, 4);in+=100;
+      vint8m2_t v1_n = __riscv_vreinterpret_v_i16m2_i8m2 (__riscv_vget_v_i16m4_i16m2 (v1, 1));
+      v1 = __riscv_vwmacc_vv_i16m4_tu (v1, v1_n, v1_n, 4);
+      asm volatile("nop" ::: "memory");
+      vint16m4_t v2 = __riscv_vle16_v_i16m4 (in, 4);in+=100;
+      vint8m2_t v2_n = __riscv_vreinterpret_v_i16m2_i8m2 (__riscv_vget_v_i16m4_i16m2 (v2, 1));
+      v2 = __riscv_vwmacc_vv_i16m4_tu (v2, v2_n, v2_n, 4);
+      asm volatile("nop" ::: "memory");
+      vint16m4_t v3 = __riscv_vle16_v_i16m4 (in, 4);in+=100;
+      vint8m2_t v3_n = __riscv_vreinterpret_v_i16m2_i8m2 (__riscv_vget_v_i16m4_i16m2 (v3, 1));
+      v3 = __riscv_vwmacc_vv_i16m4_tu (v3, v3_n, v3_n, 4);
+      asm volatile("nop" ::: "memory");
+      vint16m4_t v4 = __riscv_vle16_v_i16m4 (in, 4);in+=100;
+      vint8m2_t v4_n = __riscv_vreinterpret_v_i16m2_i8m2 (__riscv_vget_v_i16m4_i16m2 (v4, 1));
+      v4 = __riscv_vwmacc_vv_i16m4_tu (v4, v4_n, v4_n, 4);
+      asm volatile("nop" ::: "memory");
+      vint16m4_t v5 = __riscv_vle16_v_i16m4 (in, 4);in+=100;
+      vint8m2_t v5_n = __riscv_vreinterpret_v_i16m2_i8m2 (__riscv_vget_v_i16m4_i16m2 (v5, 1));
+      v5 = __riscv_vwmacc_vv_i16m4_tu (v5, v5_n, v5_n, 4);
+      asm volatile("nop" ::: "memory");
+      vint16m4_t v6 = __riscv_vle16_v_i16m4 (in, 4);in+=100;
+      vint8m2_t v6_n = __riscv_vreinterpret_v_i16m2_i8m2 (__riscv_vget_v_i16m4_i16m2 (v6, 1));
+      v6 = __riscv_vwmacc_vv_i16m4_tu (v6, v6_n, v6_n, 4);
+      asm volatile("nop" ::: "memory");
+      vint8m2_t v7_n = __riscv_vle8_v_i8m2 (in, 4);in+=100;
+      vint16m4_t v7 = __riscv_vwcvt_x_x_v_i16m4 (v7_n, 4);
+
+      asm volatile("nop" ::: "memory");
+      __riscv_vsse16_v_i16m4 (out, 4, v0, 4);out+=100;
+      __riscv_vsse16_v_i16m4 (out, 4, v1, 4);out+=100;
+      __riscv_vsse16_v_i16m4 (out, 4, v2, 4);out+=100;
+      __riscv_vsse16_v_i16m4 (out, 4, v3, 4);out+=100;
+      __riscv_vsse16_v_i16m4 (out, 4, v4, 4);out+=100;
+      __riscv_vsse16_v_i16m4 (out, 4, v5, 4);out+=100;
+      __riscv_vsse16_v_i16m4 (out, 4, v6, 4);out+=100;
+      __riscv_vsse16_v_i16m4 (out, 4, v7, 4);out+=100;
+    }
+}
+
+/* { dg-final { scan-assembler-not {vmv1r} } } */
+/* { dg-final { scan-assembler-not {vmv2r} } } */
+/* { dg-final { scan-assembler-not {vmv4r} { xfail riscv*-*-* } } } */
+/* { dg-final { scan-assembler-not {vmv8r} } } */
+/* { dg-final { scan-assembler-not {csrr} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-50.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-50.c
new file mode 100644
index 000000000000..49c779128fb4
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-50.c
@@ -0,0 +1,59 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gcv -mabi=lp64d -O3" } */
+
+#include "riscv_vector.h"
+
+void
+foo (void *in, void *out, int n)
+{
+  for (int i = 0; i < n; i++)
+    {
+      asm volatile("nop" ::: "memory");
+      vuint16m4_t v0 = __riscv_vle16_v_u16m4 (in, 4);in+=100;
+      vuint8m2_t v0_n = __riscv_vreinterpret_v_u16m2_u8m2 (__riscv_vget_v_u16m4_u16m2 (v0, 1));
+      v0 = __riscv_vwmaccu_vv_u16m4_tu (v0, v0_n, v0_n, 4);
+      asm volatile("nop" ::: "memory");
+      vuint16m4_t v1 = __riscv_vle16_v_u16m4 (in, 4);in+=100;
+      vuint8m2_t v1_n = __riscv_vreinterpret_v_u16m2_u8m2 (__riscv_vget_v_u16m4_u16m2 (v1, 1));
+      v1 = __riscv_vwmaccu_vv_u16m4_tu (v1, v1_n, v1_n, 4);
+      asm volatile("nop" ::: "memory");
+      vuint16m4_t v2 = __riscv_vle16_v_u16m4 (in, 4);in+=100;
+      vuint8m2_t v2_n = __riscv_vreinterpret_v_u16m2_u8m2 (__riscv_vget_v_u16m4_u16m2 (v2, 1));
+      v2 = __riscv_vwmaccu_vv_u16m4_tu (v2, v2_n, v2_n, 4);
+      asm volatile("nop" ::: "memory");
+      vuint16m4_t v3 = __riscv_vle16_v_u16m4 (in, 4);in+=100;
+      vuint8m2_t v3_n = __riscv_vreinterpret_v_u16m2_u8m2 (__riscv_vget_v_u16m4_u16m2 (v3, 1));
+      v3 = __riscv_vwmaccu_vv_u16m4_tu (v3, v3_n, v3_n, 4);
+      asm volatile("nop" ::: "memory");
+      vuint16m4_t v4 = __riscv_vle16_v_u16m4 (in, 4);in+=100;
+      vuint8m2_t v4_n = __riscv_vreinterpret_v_u16m2_u8m2 (__riscv_vget_v_u16m4_u16m2 (v4, 1));
+      v4 = __riscv_vwmaccu_vv_u16m4_tu (v4, v4_n, v4_n, 4);
+      asm volatile("nop" ::: "memory");
+      vuint16m4_t v5 = __riscv_vle16_v_u16m4 (in, 4);in+=100;
+      vuint8m2_t v5_n = __riscv_vreinterpret_v_u16m2_u8m2 (__riscv_vget_v_u16m4_u16m2 (v5, 1));
+      v5 = __riscv_vwmaccu_vv_u16m4_tu (v5, v5_n, v5_n, 4);
+      asm volatile("nop" ::: "memory");
+      vuint16m4_t v6 = __riscv_vle16_v_u16m4 (in, 4);in+=100;
+      vuint8m2_t v6_n = __riscv_vreinterpret_v_u16m2_u8m2 (__riscv_vget_v_u16m4_u16m2 (v6, 1));
+      v6 = __riscv_vwmaccu_vv_u16m4_tu (v6, v6_n, v6_n, 4);
+      asm volatile("nop" ::: "memory");
+      vuint8m2_t v7_n = __riscv_vle8_v_u8m2 (in, 4);in+=100;
+      vuint16m4_t v7 = __riscv_vwcvtu_x_x_v_u16m4 (v7_n, 4);
+
+      asm volatile("nop" ::: "memory");
+      __riscv_vsse16_v_u16m4 (out, 4, v0, 4);out+=100;
+      __riscv_vsse16_v_u16m4 (out, 4, v1, 4);out+=100;
+      __riscv_vsse16_v_u16m4 (out, 4, v2, 4);out+=100;
+      __riscv_vsse16_v_u16m4 (out, 4, v3, 4);out+=100;
+      __riscv_vsse16_v_u16m4 (out, 4, v4, 4);out+=100;
+      __riscv_vsse16_v_u16m4 (out, 4, v5, 4);out+=100;
+      __riscv_vsse16_v_u16m4 (out, 4, v6, 4);out+=100;
+      __riscv_vsse16_v_u16m4 (out, 4, v7, 4);out+=100;
+    }
+}
+
+/* { dg-final { scan-assembler-not {vmv1r} } } */
+/* { dg-final { scan-assembler-not {vmv2r} } } */
+/* { dg-final { scan-assembler-not {vmv4r} { xfail riscv*-*-* } } } */
+/* { dg-final { scan-assembler-not {vmv8r} } } */
+/* { dg-final { scan-assembler-not {csrr} } } */
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.