mirror of git://gcc.gnu.org/git/gcc.git
re PR rtl-optimization/46777 (ICE: in rtl_verify_flow_info, at cfgrtl.c:2164 with -O -fgcse -fno-tree-dominator-opts -funroll-loops)
PR rtl-optimization/46777 * cfglayout.c (duplicate_insn_chain): Avoid duplicating also barrier after tablejump. * gcc.dg/pr46777.c: New test. From-SVN: r167513
This commit is contained in:
parent
ce7190e503
commit
150bd82096
|
@ -1,3 +1,9 @@
|
||||||
|
2010-12-06 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
PR rtl-optimization/46777
|
||||||
|
* cfglayout.c (duplicate_insn_chain): Avoid duplicating
|
||||||
|
also barrier after tablejump.
|
||||||
|
|
||||||
2010-12-06 Joern Rennecke <amylaar@spamcop.net>
|
2010-12-06 Joern Rennecke <amylaar@spamcop.net>
|
||||||
Richard Henderson <rth@redhat.com>
|
Richard Henderson <rth@redhat.com>
|
||||||
|
|
||||||
|
|
|
@ -1177,7 +1177,20 @@ duplicate_insn_chain (rtx from, rtx to)
|
||||||
moved far from original jump. */
|
moved far from original jump. */
|
||||||
if (GET_CODE (PATTERN (insn)) == ADDR_VEC
|
if (GET_CODE (PATTERN (insn)) == ADDR_VEC
|
||||||
|| GET_CODE (PATTERN (insn)) == ADDR_DIFF_VEC)
|
|| GET_CODE (PATTERN (insn)) == ADDR_DIFF_VEC)
|
||||||
break;
|
{
|
||||||
|
/* Avoid copying following barrier as well if any
|
||||||
|
(and debug insns in between). */
|
||||||
|
rtx next;
|
||||||
|
|
||||||
|
for (next = NEXT_INSN (insn);
|
||||||
|
next != NEXT_INSN (to);
|
||||||
|
next = NEXT_INSN (next))
|
||||||
|
if (!DEBUG_INSN_P (next))
|
||||||
|
break;
|
||||||
|
if (next != NEXT_INSN (to) && BARRIER_P (next))
|
||||||
|
insn = next;
|
||||||
|
break;
|
||||||
|
}
|
||||||
copy = emit_copy_of_insn_after (insn, get_last_insn ());
|
copy = emit_copy_of_insn_after (insn, get_last_insn ());
|
||||||
maybe_copy_prologue_epilogue_insn (insn, copy);
|
maybe_copy_prologue_epilogue_insn (insn, copy);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
2010-12-06 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
PR rtl-optimization/46777
|
||||||
|
* gcc.dg/pr46777.c: New test.
|
||||||
|
|
||||||
2010-12-06 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
|
2010-12-06 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
|
||||||
|
|
||||||
* ada/acats/run_acats (which): Assign output to temporary
|
* ada/acats/run_acats (which): Assign output to temporary
|
||||||
|
|
|
@ -0,0 +1,49 @@
|
||||||
|
/* PR rtl-optimization/46777 */
|
||||||
|
/* { dg-do compile } */
|
||||||
|
/* { dg-options "-fgcse -O -fno-tree-dominator-opts -funroll-loops" } */
|
||||||
|
|
||||||
|
struct S { char s[256]; };
|
||||||
|
|
||||||
|
static inline int
|
||||||
|
foo (int x, int y)
|
||||||
|
{
|
||||||
|
switch (x)
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
case 2:
|
||||||
|
return 3;
|
||||||
|
case 3:
|
||||||
|
case 4:
|
||||||
|
return 2;
|
||||||
|
case 5:
|
||||||
|
switch (y)
|
||||||
|
{
|
||||||
|
case 4:
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
bar (struct S *x, int *y, int *z, int **w)
|
||||||
|
{
|
||||||
|
switch (*y ? x->s[*y] : foo (y[1], y[0]))
|
||||||
|
{
|
||||||
|
case 3:
|
||||||
|
if (y + 2 == z)
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
y += 2;
|
||||||
|
switch (*y ? x->s[*y] : foo (y[1], y[0]))
|
||||||
|
{
|
||||||
|
case 6:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
*w = y;
|
||||||
|
}
|
||||||
|
if (y == z)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue