re PR rtl-optimization/66076 (ICE: in vec_safe_grow, at vec.h:618 with -funroll-loops -mno-prefer-avx128 -march=bdver4)

gcc/
	PR rtl-optimization/66076
	* rtlanal.c (generic_subrtx_iterator <T>::add_single_to_queue):
	Don't grow the heap array if it is already big enough from a
	previous iteration.

gcc/testsuite/
	PR rtl-optimization/66076
	* gcc.dg/torture/pr66076.c: New test.

From-SVN: r222999
This commit is contained in:
Richard Sandiford 2015-05-11 09:35:53 +00:00 committed by Richard Sandiford
parent 258619bb2d
commit cb6f459119
4 changed files with 27 additions and 1 deletions

View File

@ -1,3 +1,10 @@
2015-05-11 Richard Sandiford <richard.sandiford@arm.com>
PR rtl-optimization/66076
* rtlanal.c (generic_subrtx_iterator <T>::add_single_to_queue):
Don't grow the heap array if it is already big enough from a
previous iteration.
2015-05-11 Christian Bruel <christian.bruel@st.com>
* config/arm/arm-protos.h (arm_declare_function_name): Declare.

View File

@ -104,7 +104,10 @@ generic_subrtx_iterator <T>::add_single_to_queue (array_type &array,
return base;
}
gcc_checking_assert (i == LOCAL_ELEMS);
vec_safe_grow (array.heap, i + 1);
/* A previous iteration might also have moved from the stack to the
heap, in which case the heap array will already be big enough. */
if (vec_safe_length (array.heap) <= i)
vec_safe_grow (array.heap, i + 1);
base = array.heap->address ();
memcpy (base, array.stack, sizeof (array.stack));
base[LOCAL_ELEMS] = x;

View File

@ -1,3 +1,8 @@
2015-05-11 Richard Sandiford <richard.sandiford@arm.com>
PR rtl-optimization/66076
* gcc.dg/torture/pr66076.c: New test.
2015-05-10 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/66041

View File

@ -0,0 +1,11 @@
/* { dg-do compile } */
/* { dg-options "" } */
/* { dg-options "-mno-prefer-avx128 -march=bdver4" { target i?86-*-* x86_64-*-* } } */
void
f0a (char *result, char *arg1, char *arg4, char temp_6)
{
int idx = 0;
for (idx = 0; idx < 416; idx += 1)
result[idx] = (arg1[idx] + arg4[idx]) * temp_6;
}