aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite
diff options
context:
space:
mode:
authorRobin Dapp <rdapp@ventanamicro.com>2025-02-21 07:19:40 +0100
committerRobin Dapp <rdapp@ventanamicro.com>2025-02-24 13:11:15 +0100
commitf3d4208e798afafcba5246334004e9646e390681 (patch)
tree123f8fd9075160df42d18183bd47b5039da55ba6 /gcc/testsuite
parent5806279610783805286ebcd0af3b455602a3a8f9 (diff)
downloadgcc-f3d4208e798afafcba5246334004e9646e390681.zip
gcc-f3d4208e798afafcba5246334004e9646e390681.tar.gz
gcc-f3d4208e798afafcba5246334004e9646e390681.tar.bz2
vect: Use original LHS type for gather pattern [PR118950].
In PR118950 we do not zero masked elements in a gather load. While recognizing a gather/scatter pattern we do not use the original type of the LHS. This matters because the type can differ with bool patterns (e.g. _Bool vs unsigned char) and we don't notice the need for zeroing out the padding bytes. This patch just uses the original LHS's type. PR middle-end/118950 gcc/ChangeLog: * tree-vect-patterns.cc (vect_recog_gather_scatter_pattern): Use original LHS's type. gcc/testsuite/ChangeLog: * gcc.target/riscv/rvv/autovec/pr118950.c: New test.
Diffstat (limited to 'gcc/testsuite')
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/pr118950.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr118950.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr118950.c
new file mode 100644
index 0000000..604d426
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr118950.c
@@ -0,0 +1,29 @@
+/* { dg-do run } */
+/* { dg-require-effective-target riscv_v_ok } */
+/* { dg-add-options riscv_v } */
+/* { dg-additional-options "-std=gnu99 -Wno-pedantic" } */
+
+unsigned char a;
+long long r;
+_Bool h = 1;
+short j[23];
+_Bool k[3][23];
+
+void b(_Bool h, short j[], _Bool k[][23]) {
+ for (int m = 0; m < 23; m += 3)
+ for (short n = 0; n < 22; n += 4)
+ a = ({
+ unsigned char o = a;
+ unsigned char p = j[n] ? h : k[m][n];
+ o > p ? o : p;
+ });
+}
+
+int main() {
+ for (int m = 0; m < 23; ++m)
+ j[m] = 10;
+ b(h, j, k);
+ r = a;
+ if (r != 1)
+ __builtin_abort ();
+}