aarch64: Don't fold svundef* at the gimple level

As the testcase shows, folding svundef*() at the gimple level
has the unfortunate side-effect of introducing -Wuninitialized
or -Wmaybe-uninitialized warnings.  We don't have a testcase
that relies on the fold, so the easiest fix seems to be to
remove it.

gcc/
	* config/aarch64/aarch64-sve-builtins-base.cc (svundef_impl::fold):
	Delete.

gcc/testsuite/
	* gcc.target/aarch64/sve/acle/general/undef_1.c: New test.
This commit is contained in:
Richard Sandiford 2020-12-03 15:22:52 +00:00
parent 277ff3406d
commit 9c68134376
2 changed files with 12 additions and 11 deletions

View file

@ -2295,17 +2295,6 @@ public:
CONSTEXPR svundef_impl (unsigned int vectors_per_tuple)
: quiet<multi_vector_function> (vectors_per_tuple) {}
gimple *
fold (gimple_folder &f) const OVERRIDE
{
/* Don't fold svundef at the gimple level. There's no exact
correspondence for SSA_NAMEs, and we explicitly don't want
to generate a specific value (like an all-zeros vector). */
if (vectors_per_tuple () == 1)
return NULL;
return gimple_build_assign (f.lhs, build_clobber (TREE_TYPE (f.lhs)));
}
rtx
expand (function_expander &e) const OVERRIDE
{

View file

@ -0,0 +1,12 @@
/* { dg-options "-O2 -W -Wall -Werror" } */
#include <arm_sve.h>
svfloat32x2_t
foo (svfloat32_t x, svfloat32_t y)
{
svfloat32x2_t res = svundef2_f32 ();
res = svset2 (res, 0, x);
res = svset2 (res, 1, y);
return res;
}