Commit 438d9c4a by Richard Biener Committed by Richard Biener

re PR tree-optimization/92715 (error: position plus size exceeds size of…

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
parent 52702016
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
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
......
/* { 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)
{
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment