mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-16 13:01:21 +08:00
re PR tree-optimization/92715 (error: position plus size exceeds size of referenced object in ‘bit_field_ref’)
2019-11-29 Richard Biener <rguenther@suse.de> PR tree-optimization/92715 * tree-ssa-forwprop.c (simplify_vector_constructor): Bail out for uniform vectors and source vectors with less elements than the destination. * gcc.dg/torture/pr92715.c: New testcase. From-SVN: r278833
This commit is contained in:
parent
52702016ad
commit
438d9c4afa
@ -1,3 +1,10 @@
|
||||
2019-11-29 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/92715
|
||||
* tree-ssa-forwprop.c (simplify_vector_constructor): Bail
|
||||
out for uniform vectors and source vectors with less elements
|
||||
than the destination.
|
||||
|
||||
2019-11-29 Martin Liska <mliska@suse.cz>
|
||||
|
||||
PR lto/91574
|
||||
|
@ -1,3 +1,8 @@
|
||||
2019-11-29 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/92715
|
||||
* gcc.dg/torture/pr92715.c: New testcase.
|
||||
|
||||
2019-11-29 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR c++/60228
|
||||
|
17
gcc/testsuite/gcc.dg/torture/pr92715.c
Normal file
17
gcc/testsuite/gcc.dg/torture/pr92715.c
Normal file
@ -0,0 +1,17 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-additional-options "-mavx2" { target x86_64-*-* i?86-*-* } } */
|
||||
|
||||
typedef double v4si __attribute__((vector_size(32)));
|
||||
typedef double v2si __attribute__((vector_size(16)));
|
||||
|
||||
void foo (v4si *dstp, v2si *srcp)
|
||||
{
|
||||
v2si src = *srcp;
|
||||
*dstp = (v4si) { src[0], src[1], src[0], src[1] };
|
||||
}
|
||||
|
||||
void bar (v4si *dstp, v2si *srcp)
|
||||
{
|
||||
v2si src = *srcp;
|
||||
*dstp = (v4si) { src[0], src[0], src[0], src[0] };
|
||||
}
|
@ -2038,13 +2038,13 @@ simplify_vector_constructor (gimple_stmt_iterator *gsi)
|
||||
constructor_elt *elt;
|
||||
bool maybe_ident;
|
||||
|
||||
gcc_checking_assert (gimple_assign_rhs_code (stmt) == CONSTRUCTOR);
|
||||
|
||||
op = gimple_assign_rhs1 (stmt);
|
||||
type = TREE_TYPE (op);
|
||||
gcc_checking_assert (TREE_CODE (type) == VECTOR_TYPE);
|
||||
gcc_checking_assert (TREE_CODE (op) == CONSTRUCTOR
|
||||
&& TREE_CODE (type) == VECTOR_TYPE);
|
||||
|
||||
if (!TYPE_VECTOR_SUBPARTS (type).is_constant (&nelts))
|
||||
if (!TYPE_VECTOR_SUBPARTS (type).is_constant (&nelts)
|
||||
|| uniform_vector_p (op))
|
||||
return false;
|
||||
elem_type = TREE_TYPE (type);
|
||||
elem_size = TREE_INT_CST_LOW (TYPE_SIZE (elem_type));
|
||||
@ -2136,6 +2136,9 @@ simplify_vector_constructor (gimple_stmt_iterator *gsi)
|
||||
|| ! VECTOR_TYPE_P (TREE_TYPE (orig[0])))
|
||||
return false;
|
||||
refnelts = TYPE_VECTOR_SUBPARTS (TREE_TYPE (orig[0])).to_constant ();
|
||||
/* We currently do not handle larger destination vectors. */
|
||||
if (refnelts < nelts)
|
||||
return false;
|
||||
|
||||
if (maybe_ident)
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user