mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-24 04:10:29 +08:00
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:
parent
728acca06e
commit
7a76df7f95
@ -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>
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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>
|
||||
|
||||
|
25
gcc/testsuite/gcc.c-torture/compile/pr52714.c
Normal file
25
gcc/testsuite/gcc.c-torture/compile/pr52714.c
Normal 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;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user