diff options
author | YunQiang Su <yunqiang@isrc.iscas.ac.cn> | 2024-07-11 20:43:54 +0800 |
---|---|---|
committer | YunQiang Su <syq@gcc.gnu.org> | 2024-07-12 16:30:51 +0800 |
commit | c6f38e5e6d900b8ed6a4f5c126d3197946cad4dd (patch) | |
tree | ade3b99242c915e057352e4603aaf0d022e733f2 | |
parent | a55d24b3cf7f4d07492bb8e6fcee557175b47ea3 (diff) | |
download | gcc-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.cc | 6 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/vect/pr115840.c | 11 |
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; +} |