middle-end/104467 - fix vector extract simplification

This fixes a bogus vector type used for a CTOR build as part of
vector extract simplification.  The code failed to consider a
CTOR of vector elements.

2022-02-10  Richard Biener  <rguenther@suse.de>

	PR middle-end/104467
	* match.pd (vector extract simplification): Multiply the
	number of CTOR elements with the number of element elements.

	* gcc.dg/torture/pr104467.c: New testcase.
This commit is contained in:
Richard Biener 2022-02-10 10:01:20 +01:00
parent 1b72d456b2
commit 4a8083285c
2 changed files with 12 additions and 1 deletions

View File

@ -6943,7 +6943,7 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
TREE_TYPE (TREE_TYPE (ctor)))
? type
: build_vector_type (TREE_TYPE (TREE_TYPE (ctor)),
count));
count * k));
res = (constant_p ? build_vector_from_ctor (evtype, vals)
: build_constructor (evtype, vals));
}

View File

@ -0,0 +1,11 @@
/* { dg-do compile } */
/* { dg-additional-options "-mavx" { target x86_64-*-* i?86-*-* } } */
unsigned long __attribute__((__vector_size__ (8 * sizeof (long)))) u;
signed long __attribute__((__vector_size__ (8 * sizeof (long)))) s;
void
foo (void)
{
s &= u + (0, 0);
}