re PR rtl-optimization/52714 (ICE in fixup_reorder_chain, at cfglayout.c:880)

PR rtl-optimization/52714
	* combine.c (try_combine): When splitting an unrecognized PARALLEL
	into two independent simple sets, if I3 is a jump, ensure the
	pattern we place into I3 is a (set (pc) ...)

	PR rtl-optimization/52714
	* gcc.c-torture/compile/pr52714.c: New test.

From-SVN: r208204
This commit is contained in:
Jeff Law 2014-02-27 12:28:40 -07:00 committed by Jeff Law
parent 728acca06e
commit 7a76df7f95
4 changed files with 43 additions and 0 deletions

View File

@ -1,3 +1,10 @@
2014-02-27 Jeff Law <law@redhat.com>
PR rtl-optimization/52714
* combine.c (try_combine): When splitting an unrecognized PARALLEL
into two independent simple sets, if I3 is a jump, ensure the
pattern we place into I3 is a (set (pc) ...)
2014-02-27 Mikael Pettersson <mikpe@it.uu.se>
Jeff Law <law@redhat.com>

View File

@ -3712,6 +3712,9 @@ try_combine (rtx i3, rtx i2, rtx i1, rtx i0, int *new_direct_jump_p,
#ifdef HAVE_cc0
&& !reg_referenced_p (cc0_rtx, set0)
#endif
/* If I3 is a jump, ensure that set0 is a jump so that
we do not create invalid RTL. */
&& (!JUMP_P (i3) || SET_DEST (set0) == pc_rtx)
)
{
newi2pat = set1;
@ -3726,6 +3729,9 @@ try_combine (rtx i3, rtx i2, rtx i1, rtx i0, int *new_direct_jump_p,
#ifdef HAVE_cc0
&& !reg_referenced_p (cc0_rtx, set1)
#endif
/* If I3 is a jump, ensure that set1 is a jump so that
we do not create invalid RTL. */
&& (!JUMP_P (i3) || SET_DEST (set1) == pc_rtx)
)
{
newi2pat = set0;

View File

@ -1,3 +1,8 @@
2014-02-27 Jeff Law <law@redhat.com>
PR rtl-optimization/52714
* gcc.c-torture/compile/pr52714.c: New test.
2014-02-27 Mikael Pettersson <mikpe@it.uu.se>
Jeff Law <law@redhat.com>

View File

@ -0,0 +1,25 @@
int __re_compile_fastmap(unsigned char *p)
{
unsigned char **stack;
unsigned size;
unsigned avail;
stack = __builtin_alloca(5 * sizeof(unsigned char*));
if (stack == 0)
return -2;
size = 5;
avail = 0;
for (;;) {
switch (*p++) {
case 0:
if (avail == size)
return -2;
stack[avail++] = p;
}
}
return 0;
}