https://gcc.gnu.org/g:a87ea5b3cfc0a680c25865a83c1380ffb8bd72b2

commit r17-3915-ga87ea5b3cfc0a680c25865a83c1380ffb8bd72b2
Author: Pan Li <[email protected]>
Date:   Thu Sep 3 11:33:25 2026 +0800

    RISC-V: Add test cases for vwmaccu.vx undef reg overlap
    
    Add test cases for register group overlap, please
    note it is not overlap as much as possible.
    
    gcc/testsuite/ChangeLog:
    
            * 
gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx_undef-u16-m1.c: New test.
            * 
gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx_undef-u16-m2.c: New test.
            * 
gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx_undef-u16-m4.c: New test.
            * 
gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx_undef-u16-mf2.c: New test.
            * 
gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx_undef-u16-mf4.c: New test.
            * 
gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx_undef-u32-m1.c: New test.
            * 
gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx_undef-u32-m2.c: New test.
            * 
gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx_undef-u32-m4.c: New test.
            * 
gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx_undef-u32-mf2.c: New test.
            * 
gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx_undef-u8-m1.c: New test.
            * 
gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx_undef-u8-m2.c: New test.
            * 
gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx_undef-u8-m4.c: New test.
            * 
gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx_undef-u8-mf2.c: New test.
            * 
gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx_undef-u8-mf4.c: New test.
            * 
gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx_undef-u8-mf8.c: New test.
    
    Signed-off-by: Pan Li <[email protected]>

Diff:
---
 .../group_overlap/vwmaccu_vx_undef-u16-m1.c        | 21 ++++++++++++++++
 .../group_overlap/vwmaccu_vx_undef-u16-m2.c        | 23 +++++++++++++++++
 .../group_overlap/vwmaccu_vx_undef-u16-m4.c        | 26 +++++++++++++++++++
 .../group_overlap/vwmaccu_vx_undef-u16-mf2.c       | 19 ++++++++++++++
 .../group_overlap/vwmaccu_vx_undef-u16-mf4.c       | 19 ++++++++++++++
 .../group_overlap/vwmaccu_vx_undef-u32-m1.c        | 21 ++++++++++++++++
 .../group_overlap/vwmaccu_vx_undef-u32-m2.c        | 21 ++++++++++++++++
 .../group_overlap/vwmaccu_vx_undef-u32-m4.c        | 23 +++++++++++++++++
 .../group_overlap/vwmaccu_vx_undef-u32-mf2.c       | 19 ++++++++++++++
 .../autovec/group_overlap/vwmaccu_vx_undef-u8-m1.c | 23 +++++++++++++++++
 .../autovec/group_overlap/vwmaccu_vx_undef-u8-m2.c | 26 +++++++++++++++++++
 .../autovec/group_overlap/vwmaccu_vx_undef-u8-m4.c | 29 ++++++++++++++++++++++
 .../group_overlap/vwmaccu_vx_undef-u8-mf2.c        | 19 ++++++++++++++
 .../group_overlap/vwmaccu_vx_undef-u8-mf4.c        | 19 ++++++++++++++
 .../group_overlap/vwmaccu_vx_undef-u8-mf8.c        | 19 ++++++++++++++
 15 files changed, 327 insertions(+)

diff --git 
a/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx_undef-u16-m1.c
 
b/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx_undef-u16-m1.c
new file mode 100644
index 000000000000..7c33fa79b8ba
--- /dev/null
+++ 
b/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx_undef-u16-m1.c
@@ -0,0 +1,21 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gcv -mabi=lp64d -mrvv-vector-bits=zvl" } */
+
+typedef unsigned int   u32x8_t __attribute__ ((vector_size (32)));
+typedef unsigned int   u32x4_t __attribute__ ((vector_size (16)));
+typedef unsigned short u16x8_t __attribute__ ((vector_size (16)));
+
+u32x8_t
+test_group_overlap_vwmaccu_vx_undef_u16 (u32x8_t acc, unsigned int x)
+{
+  u32x4_t hi = __builtin_shufflevector (acc, acc, 4, 5, 6, 7);
+  u16x8_t narrow = (u16x8_t) hi;
+  u32x8_t widen = __builtin_convertvector (narrow, u32x8_t);
+  unsigned int nx = x & 0xffff;
+  u32x8_t vx = { nx, nx, nx, nx, nx, nx, nx, nx };
+
+  return acc + widen * vx;
+}
+
+/* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v2,a2,v3([^0-9]|$)} 1 } } 
*/
+/* { dg-final { scan-assembler-not {vmv[0-9]+r\.v} } } */
diff --git 
a/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx_undef-u16-m2.c
 
b/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx_undef-u16-m2.c
new file mode 100644
index 000000000000..b7c6a4e56132
--- /dev/null
+++ 
b/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx_undef-u16-m2.c
@@ -0,0 +1,23 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gcv -mabi=lp64d -mrvv-vector-bits=zvl" } */
+
+typedef unsigned int   u32x16_t __attribute__ ((vector_size (64)));
+typedef unsigned int   u32x8_t  __attribute__ ((vector_size (32)));
+typedef unsigned short u16x16_t __attribute__ ((vector_size (32)));
+
+u32x16_t
+test_group_overlap_vwmaccu_vx_undef_u16 (u32x16_t acc, unsigned int x)
+{
+  u32x8_t hi = __builtin_shufflevector (acc, acc, 8, 9, 10, 11, 12, 13, 14, 
15);
+  u16x16_t narrow = (u16x16_t) hi;
+  u32x16_t widen = __builtin_convertvector (narrow, u32x16_t);
+  unsigned int nx = x & 0xffff;
+  u32x16_t vx = {
+    nx, nx, nx, nx, nx, nx, nx, nx, nx, nx, nx, nx, nx, nx, nx, nx
+  };
+
+  return acc + widen * vx;
+}
+
+/* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v4,a2,v6([^0-9]|$)} 1 } } 
*/
+/* { dg-final { scan-assembler-not {vmv[0-9]+r\.v} } } */
diff --git 
a/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx_undef-u16-m4.c
 
b/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx_undef-u16-m4.c
new file mode 100644
index 000000000000..4bb61dc2fdf7
--- /dev/null
+++ 
b/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx_undef-u16-m4.c
@@ -0,0 +1,26 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gcv -mabi=lp64d -mrvv-vector-bits=zvl" } */
+
+typedef unsigned int   u32x32_t __attribute__ ((vector_size (128)));
+typedef unsigned int   u32x16_t __attribute__ ((vector_size (64)));
+typedef unsigned short u16x32_t __attribute__ ((vector_size (64)));
+
+u32x32_t
+test_group_overlap_vwmaccu_vx_undef_u16 (u32x32_t acc, unsigned int x)
+{
+  u32x16_t hi = __builtin_shufflevector (
+    acc, acc,
+    16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31);
+  u16x32_t narrow = (u16x32_t) hi;
+  u32x32_t widen = __builtin_convertvector (narrow, u32x32_t);
+  unsigned int nx = x & 0xffff;
+  u32x32_t vx = {
+    nx, nx, nx, nx, nx, nx, nx, nx, nx, nx, nx, nx, nx, nx, nx, nx,
+    nx, nx, nx, nx, nx, nx, nx, nx, nx, nx, nx, nx, nx, nx, nx, nx
+  };
+
+  return acc + widen * vx;
+}
+
+/* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v8,a2,v12([^0-9]|$)} 1 } } 
*/
+/* { dg-final { scan-assembler-not {vmv[0-9]+r\.v} } } */
diff --git 
a/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx_undef-u16-mf2.c
 
b/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx_undef-u16-mf2.c
new file mode 100644
index 000000000000..ef80ef7fa4d6
--- /dev/null
+++ 
b/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx_undef-u16-mf2.c
@@ -0,0 +1,19 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gcv -mabi=lp64d -mrvv-vector-bits=zvl" } */
+
+typedef unsigned int   u32x4_t __attribute__ ((vector_size (16)));
+typedef unsigned short u16x4_t __attribute__ ((vector_size (8)));
+
+u32x4_t
+test_group_overlap_vwmaccu_vx_undef_u16 (u32x4_t acc, u16x4_t narrow,
+                                         unsigned int x)
+{
+  u32x4_t widen = __builtin_convertvector (narrow, u32x4_t);
+  unsigned int nx = x & 0xffff;
+  u32x4_t vx = { nx, nx, nx, nx };
+
+  return acc + widen * vx;
+}
+
+/* { dg-final { scan-assembler-times {vwmaccu\.vx} 1 } } */
+/* { dg-final { scan-assembler-not 
{vwmaccu\.vx\s+(v[0-9]+),[a-z0-9]+,\1([^0-9]|$)} } } */
diff --git 
a/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx_undef-u16-mf4.c
 
b/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx_undef-u16-mf4.c
new file mode 100644
index 000000000000..08588d06215b
--- /dev/null
+++ 
b/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx_undef-u16-mf4.c
@@ -0,0 +1,19 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gcv -mabi=lp64d -mrvv-vector-bits=zvl" } */
+
+typedef unsigned int   u32x2_t __attribute__ ((vector_size (8)));
+typedef unsigned short u16x2_t __attribute__ ((vector_size (4)));
+
+u32x2_t
+test_group_overlap_vwmaccu_vx_undef_u16 (u32x2_t acc, u16x2_t narrow,
+                                         unsigned int x)
+{
+  u32x2_t widen = __builtin_convertvector (narrow, u32x2_t);
+  unsigned int nx = x & 0xffff;
+  u32x2_t vx = { nx, nx };
+
+  return acc + widen * vx;
+}
+
+/* { dg-final { scan-assembler-times {vwmaccu\.vx} 1 } } */
+/* { dg-final { scan-assembler-not 
{vwmaccu\.vx\s+(v[0-9]+),[a-z0-9]+,\1([^0-9]|$)} } } */
diff --git 
a/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx_undef-u32-m1.c
 
b/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx_undef-u32-m1.c
new file mode 100644
index 000000000000..af57bacc9a33
--- /dev/null
+++ 
b/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx_undef-u32-m1.c
@@ -0,0 +1,21 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gcv -mabi=lp64d -mrvv-vector-bits=zvl" } */
+
+typedef unsigned long long u64x4_t __attribute__ ((vector_size (32)));
+typedef unsigned long long u64x2_t __attribute__ ((vector_size (16)));
+typedef unsigned int       u32x4_t __attribute__ ((vector_size (16)));
+
+u64x4_t
+test_group_overlap_vwmaccu_vx_undef_u32 (u64x4_t acc, unsigned long long x)
+{
+  u64x2_t hi = __builtin_shufflevector (acc, acc, 2, 3);
+  u32x4_t narrow = (u32x4_t) hi;
+  u64x4_t widen = __builtin_convertvector (narrow, u64x4_t);
+  unsigned long long nx = x & 0xffffffff;
+  u64x4_t vx = { nx, nx, nx, nx };
+
+  return acc + widen * vx;
+}
+
+/* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v2,a2,v3([^0-9]|$)} 1 } } 
*/
+/* { dg-final { scan-assembler-not {vmv[0-9]+r\.v} } } */
diff --git 
a/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx_undef-u32-m2.c
 
b/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx_undef-u32-m2.c
new file mode 100644
index 000000000000..3b106acad064
--- /dev/null
+++ 
b/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx_undef-u32-m2.c
@@ -0,0 +1,21 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gcv -mabi=lp64d -mrvv-vector-bits=zvl" } */
+
+typedef unsigned long long u64x8_t __attribute__ ((vector_size (64)));
+typedef unsigned long long u64x4_t __attribute__ ((vector_size (32)));
+typedef unsigned int       u32x8_t __attribute__ ((vector_size (32)));
+
+u64x8_t
+test_group_overlap_vwmaccu_vx_undef_u32 (u64x8_t acc, unsigned long long x)
+{
+  u64x4_t hi = __builtin_shufflevector (acc, acc, 4, 5, 6, 7);
+  u32x8_t narrow = (u32x8_t) hi;
+  u64x8_t widen = __builtin_convertvector (narrow, u64x8_t);
+  unsigned long long nx = x & 0xffffffff;
+  u64x8_t vx = { nx, nx, nx, nx, nx, nx, nx, nx };
+
+  return acc + widen * vx;
+}
+
+/* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v4,a2,v6([^0-9]|$)} 1 } } 
*/
+/* { dg-final { scan-assembler-not {vmv[0-9]+r\.v} } } */
diff --git 
a/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx_undef-u32-m4.c
 
b/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx_undef-u32-m4.c
new file mode 100644
index 000000000000..d3080a16aef5
--- /dev/null
+++ 
b/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx_undef-u32-m4.c
@@ -0,0 +1,23 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gcv -mabi=lp64d -mrvv-vector-bits=zvl" } */
+
+typedef unsigned long long u64x16_t __attribute__ ((vector_size (128)));
+typedef unsigned long long u64x8_t  __attribute__ ((vector_size (64)));
+typedef unsigned int       u32x16_t __attribute__ ((vector_size (64)));
+
+u64x16_t
+test_group_overlap_vwmaccu_vx_undef_u32 (u64x16_t acc, unsigned long long x)
+{
+  u64x8_t hi = __builtin_shufflevector (acc, acc, 8, 9, 10, 11, 12, 13, 14, 
15);
+  u32x16_t narrow = (u32x16_t) hi;
+  u64x16_t widen = __builtin_convertvector (narrow, u64x16_t);
+  unsigned long long nx = x & 0xffffffff;
+  u64x16_t vx = {
+    nx, nx, nx, nx, nx, nx, nx, nx, nx, nx, nx, nx, nx, nx, nx, nx
+  };
+
+  return acc + widen * vx;
+}
+
+/* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v8,a2,v12([^0-9]|$)} 1 } } 
*/
+/* { dg-final { scan-assembler-not {vmv[0-9]+r\.v} } } */
diff --git 
a/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx_undef-u32-mf2.c
 
b/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx_undef-u32-mf2.c
new file mode 100644
index 000000000000..c41bff3e4e36
--- /dev/null
+++ 
b/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx_undef-u32-mf2.c
@@ -0,0 +1,19 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gcv -mabi=lp64d -mrvv-vector-bits=zvl" } */
+
+typedef unsigned long long u64x2_t __attribute__ ((vector_size (16)));
+typedef unsigned int       u32x2_t __attribute__ ((vector_size (8)));
+
+u64x2_t
+test_group_overlap_vwmaccu_vx_undef_u32 (u64x2_t acc, u32x2_t narrow,
+                                         unsigned long long x)
+{
+  u64x2_t widen = __builtin_convertvector (narrow, u64x2_t);
+  unsigned long long nx = x & 0xffffffff;
+  u64x2_t vx = { nx, nx };
+
+  return acc + widen * vx;
+}
+
+/* { dg-final { scan-assembler-times {vwmaccu\.vx} 1 } } */
+/* { dg-final { scan-assembler-not 
{vwmaccu\.vx\s+(v[0-9]+),[a-z0-9]+,\1([^0-9]|$)} } } */
diff --git 
a/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx_undef-u8-m1.c
 
b/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx_undef-u8-m1.c
new file mode 100644
index 000000000000..799eefd7e6cc
--- /dev/null
+++ 
b/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx_undef-u8-m1.c
@@ -0,0 +1,23 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gcv -mabi=lp64d -mrvv-vector-bits=zvl" } */
+
+typedef unsigned short u16x16_t __attribute__ ((vector_size (32)));
+typedef unsigned short u16x8_t  __attribute__ ((vector_size (16)));
+typedef unsigned char  u8x16_t  __attribute__ ((vector_size (16)));
+
+u16x16_t
+test_group_overlap_vwmaccu_vx_undef_u8 (u16x16_t acc, unsigned short x)
+{
+  u16x8_t hi = __builtin_shufflevector (acc, acc, 8, 9, 10, 11, 12, 13, 14, 
15);
+  u8x16_t narrow = (u8x16_t) hi;
+  u16x16_t widen = __builtin_convertvector (narrow, u16x16_t);
+  unsigned short nx = x & 0xff;
+  u16x16_t vx = {
+    nx, nx, nx, nx, nx, nx, nx, nx, nx, nx, nx, nx, nx, nx, nx, nx
+  };
+
+  return acc + widen * vx;
+}
+
+/* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v2,a2,v3([^0-9]|$)} 1 } } 
*/
+/* { dg-final { scan-assembler-not {vmv[0-9]+r\.v} } } */
diff --git 
a/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx_undef-u8-m2.c
 
b/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx_undef-u8-m2.c
new file mode 100644
index 000000000000..094c680c6f9f
--- /dev/null
+++ 
b/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx_undef-u8-m2.c
@@ -0,0 +1,26 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gcv -mabi=lp64d -mrvv-vector-bits=zvl" } */
+
+typedef unsigned short u16x32_t __attribute__ ((vector_size (64)));
+typedef unsigned short u16x16_t __attribute__ ((vector_size (32)));
+typedef unsigned char  u8x32_t  __attribute__ ((vector_size (32)));
+
+u16x32_t
+test_group_overlap_vwmaccu_vx_undef_u8 (u16x32_t acc, unsigned short x)
+{
+  u16x16_t hi = __builtin_shufflevector (
+    acc, acc,
+    16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31);
+  u8x32_t narrow = (u8x32_t) hi;
+  u16x32_t widen = __builtin_convertvector (narrow, u16x32_t);
+  unsigned short nx = x & 0xff;
+  u16x32_t vx = {
+    nx, nx, nx, nx, nx, nx, nx, nx, nx, nx, nx, nx, nx, nx, nx, nx,
+    nx, nx, nx, nx, nx, nx, nx, nx, nx, nx, nx, nx, nx, nx, nx, nx
+  };
+
+  return acc + widen * vx;
+}
+
+/* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v4,a2,v6([^0-9]|$)} 1 } } 
*/
+/* { dg-final { scan-assembler-not {vmv[0-9]+r\.v} } } */
diff --git 
a/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx_undef-u8-m4.c
 
b/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx_undef-u8-m4.c
new file mode 100644
index 000000000000..9fc3c20f5978
--- /dev/null
+++ 
b/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx_undef-u8-m4.c
@@ -0,0 +1,29 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gcv -mabi=lp64d -mrvv-vector-bits=zvl" } */
+
+typedef unsigned short u16x64_t __attribute__ ((vector_size (128)));
+typedef unsigned short u16x32_t __attribute__ ((vector_size (64)));
+typedef unsigned char  u8x64_t  __attribute__ ((vector_size (64)));
+
+u16x64_t
+test_group_overlap_vwmaccu_vx_undef_u8 (u16x64_t acc, unsigned short x)
+{
+  u16x32_t hi = __builtin_shufflevector (
+    acc, acc,
+    32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
+    48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63);
+  u8x64_t narrow = (u8x64_t) hi;
+  u16x64_t widen = __builtin_convertvector (narrow, u16x64_t);
+  unsigned short nx = x & 0xff;
+  u16x64_t vx = {
+    nx, nx, nx, nx, nx, nx, nx, nx, nx, nx, nx, nx, nx, nx, nx, nx,
+    nx, nx, nx, nx, nx, nx, nx, nx, nx, nx, nx, nx, nx, nx, nx, nx,
+    nx, nx, nx, nx, nx, nx, nx, nx, nx, nx, nx, nx, nx, nx, nx, nx,
+    nx, nx, nx, nx, nx, nx, nx, nx, nx, nx, nx, nx, nx, nx, nx, nx
+  };
+
+  return acc + widen * vx;
+}
+
+/* { dg-final { scan-assembler-times {vwmaccu\.vx\s+v8,a2,v12([^0-9]|$)} 1 } } 
*/
+/* { dg-final { scan-assembler-not {vmv[0-9]+r\.v} } } */
diff --git 
a/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx_undef-u8-mf2.c
 
b/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx_undef-u8-mf2.c
new file mode 100644
index 000000000000..c78fc378b2c0
--- /dev/null
+++ 
b/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx_undef-u8-mf2.c
@@ -0,0 +1,19 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gcv -mabi=lp64d -mrvv-vector-bits=zvl" } */
+
+typedef unsigned short u16x8_t __attribute__ ((vector_size (16)));
+typedef unsigned char  u8x8_t  __attribute__ ((vector_size (8)));
+
+u16x8_t
+test_group_overlap_vwmaccu_vx_undef_u8 (u16x8_t acc, u8x8_t narrow,
+                                        unsigned short x)
+{
+  u16x8_t widen = __builtin_convertvector (narrow, u16x8_t);
+  unsigned short nx = x & 0xff;
+  u16x8_t vx = { nx, nx, nx, nx, nx, nx, nx, nx };
+
+  return acc + widen * vx;
+}
+
+/* { dg-final { scan-assembler-times {vwmaccu\.vx} 1 } } */
+/* { dg-final { scan-assembler-not 
{vwmaccu\.vx\s+(v[0-9]+),[a-z0-9]+,\1([^0-9]|$)} } } */
diff --git 
a/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx_undef-u8-mf4.c
 
b/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx_undef-u8-mf4.c
new file mode 100644
index 000000000000..e8f15f87950e
--- /dev/null
+++ 
b/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx_undef-u8-mf4.c
@@ -0,0 +1,19 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gcv -mabi=lp64d -mrvv-vector-bits=zvl" } */
+
+typedef unsigned short u16x4_t __attribute__ ((vector_size (8)));
+typedef unsigned char  u8x4_t  __attribute__ ((vector_size (4)));
+
+u16x4_t
+test_group_overlap_vwmaccu_vx_undef_u8 (u16x4_t acc, u8x4_t narrow,
+                                        unsigned short x)
+{
+  u16x4_t widen = __builtin_convertvector (narrow, u16x4_t);
+  unsigned short nx = x & 0xff;
+  u16x4_t vx = { nx, nx, nx, nx };
+
+  return acc + widen * vx;
+}
+
+/* { dg-final { scan-assembler-times {vwmaccu\.vx} 1 } } */
+/* { dg-final { scan-assembler-not 
{vwmaccu\.vx\s+(v[0-9]+),[a-z0-9]+,\1([^0-9]|$)} } } */
diff --git 
a/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx_undef-u8-mf8.c
 
b/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx_undef-u8-mf8.c
new file mode 100644
index 000000000000..1cacf5236f67
--- /dev/null
+++ 
b/gcc/testsuite/gcc.target/riscv/rvv/autovec/group_overlap/vwmaccu_vx_undef-u8-mf8.c
@@ -0,0 +1,19 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gcv -mabi=lp64d -mrvv-vector-bits=zvl" } */
+
+typedef unsigned short u16x2_t __attribute__ ((vector_size (4)));
+typedef unsigned char  u8x2_t  __attribute__ ((vector_size (2)));
+
+u16x2_t
+test_group_overlap_vwmaccu_vx_undef_u8 (u16x2_t acc, u8x2_t narrow,
+                                        unsigned short x)
+{
+  u16x2_t widen = __builtin_convertvector (narrow, u16x2_t);
+  unsigned short nx = x & 0xff;
+  u16x2_t vx = { nx, nx };
+
+  return acc + widen * vx;
+}
+
+/* { dg-final { scan-assembler-times {vwmaccu\.vx} 1 } } */
+/* { dg-final { scan-assembler-not 
{vwmaccu\.vx\s+(v[0-9]+),[a-z0-9]+,\1([^0-9]|$)} } } */

Reply via email to