aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYunQiang Su <yunqiang@isrc.iscas.ac.cn>2024-07-11 20:43:54 +0800
committerYunQiang Su <syq@gcc.gnu.org>2024-07-12 16:30:51 +0800
commitc6f38e5e6d900b8ed6a4f5c126d3197946cad4dd (patch)
treeade3b99242c915e057352e4603aaf0d022e733f2
parenta55d24b3cf7f4d07492bb8e6fcee557175b47ea3 (diff)
downloadgcc-c6f38e5e6d900b8ed6a4f5c126d3197946cad4dd.zip
gcc-c6f38e5e6d900b8ed6a4f5c126d3197946cad4dd.tar.gz
gcc-c6f38e5e6d900b8ed6a4f5c126d3197946cad4dd.tar.bz2
RISC-V: NO_WARNING preferred else value for RVV
PR target/115840. In riscv_preferred_else_value, we create an uninitialized tmp var for else value, instead of the 0 (as default_preferred_else_value) or the pre-exists VAR (as aarch64 does), so that we can use agnostic policy. The problem is that `warn_uninit` will emit a warning: '({anonymous})' may be used uninitialized Let's mark this tmp var as NO_WARNING. This problem is found when I try to build glibc with V extension. gcc PR target/115840 * config/riscv/riscv.cc(riscv_preferred_else_value): Mark tmp_var as NO_WARNING. gcc/testsuite * gcc.dg/vect/pr115840.c: New testcase.
-rw-r--r--gcc/config/riscv/riscv.cc6
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr115840.c11
2 files changed, 16 insertions, 1 deletions
diff --git a/gcc/config/riscv/riscv.cc b/gcc/config/riscv/riscv.cc
index 16b210f3..d50ac61 100644
--- a/gcc/config/riscv/riscv.cc
+++ b/gcc/config/riscv/riscv.cc
@@ -11432,7 +11432,11 @@ riscv_preferred_else_value (unsigned ifn, tree vectype, unsigned int nops,
tree *ops)
{
if (riscv_v_ext_mode_p (TYPE_MODE (vectype)))
- return get_or_create_ssa_default_def (cfun, create_tmp_var (vectype));
+ {
+ tree tmp_var = create_tmp_var (vectype);
+ TREE_NO_WARNING (tmp_var) = 1;
+ return get_or_create_ssa_default_def (cfun, tmp_var);
+ }
return default_preferred_else_value (ifn, vectype, nops, ops);
}
diff --git a/gcc/testsuite/gcc.dg/vect/pr115840.c b/gcc/testsuite/gcc.dg/vect/pr115840.c
new file mode 100644
index 0000000..09dc9e4
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr115840.c
@@ -0,0 +1,11 @@
+/* { dg-do compile } */
+/* { dg-additional-options "-Wall -Werror" } */
+
+double loads[16];
+
+void
+foo (double loadavg[], int count)
+{
+ for (int i = 0; i < count; i++)
+ loadavg[i] = loads[i] / 1.5;
+}