re PR rtl-optimization/53589 (ICE in maybe_record_trace_start with asm goto)
PR rtl-optimization/53589 * cfgrtl.c (force_nonfallthru_and_redirect): Do asm_goto_edge discovery even when e->dest != target. If any LABEL_REF points to e->dest label, redirect it to target's label. * gcc.dg/torture/pr53589.c: New test. From-SVN: r188428
This commit is contained in:
parent
ed6a1ff987
commit
891ca07d49
4 changed files with 33 additions and 6 deletions
|
@ -1,3 +1,10 @@
|
|||
2012-06-12 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR rtl-optimization/53589
|
||||
* cfgrtl.c (force_nonfallthru_and_redirect): Do asm_goto_edge
|
||||
discovery even when e->dest != target. If any LABEL_REF points
|
||||
to e->dest label, redirect it to target's label.
|
||||
|
||||
2012-06-12 Chung-Lin Tang <cltang@codesourcery.com>
|
||||
|
||||
* config/sh/sh.c (output_stack_adjust): Remove !epilogue_p
|
||||
|
|
12
gcc/cfgrtl.c
12
gcc/cfgrtl.c
|
@ -1293,21 +1293,21 @@ force_nonfallthru_and_redirect (edge e, basic_block target, rtx jump_label)
|
|||
}
|
||||
|
||||
/* If e->src ends with asm goto, see if any of the ASM_OPERANDS_LABELs
|
||||
don't point to target label. */
|
||||
don't point to the target or fallthru label. */
|
||||
if (JUMP_P (BB_END (e->src))
|
||||
&& target != EXIT_BLOCK_PTR
|
||||
&& e->dest == target
|
||||
&& (e->flags & EDGE_FALLTHRU)
|
||||
&& (note = extract_asm_operands (PATTERN (BB_END (e->src)))))
|
||||
{
|
||||
int i, n = ASM_OPERANDS_LABEL_LENGTH (note);
|
||||
|
||||
for (i = 0; i < n; ++i)
|
||||
if (XEXP (ASM_OPERANDS_LABEL (note, i), 0) == BB_HEAD (target))
|
||||
{
|
||||
{
|
||||
if (XEXP (ASM_OPERANDS_LABEL (note, i), 0) == BB_HEAD (e->dest))
|
||||
XEXP (ASM_OPERANDS_LABEL (note, i), 0) = block_label (target);
|
||||
if (XEXP (ASM_OPERANDS_LABEL (note, i), 0) == BB_HEAD (target))
|
||||
asm_goto_edge = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (EDGE_COUNT (e->src->succs) >= 2 || abnormal_edge_flags || asm_goto_edge)
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2012-06-12 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR rtl-optimization/53589
|
||||
* gcc.dg/torture/pr53589.c: New test.
|
||||
|
||||
2012-06-12 Oleg Endo <olegendo@gcc.gnu.org>
|
||||
|
||||
PR target/50749
|
||||
|
|
15
gcc/testsuite/gcc.dg/torture/pr53589.c
Normal file
15
gcc/testsuite/gcc.dg/torture/pr53589.c
Normal file
|
@ -0,0 +1,15 @@
|
|||
/* PR rtl-optimization/53589 */
|
||||
/* { dg-do compile } */
|
||||
|
||||
extern void foo (void) __attribute__ ((__noreturn__));
|
||||
|
||||
void
|
||||
bar (int x)
|
||||
{
|
||||
if (x < 0)
|
||||
foo ();
|
||||
if (x == 0)
|
||||
return;
|
||||
__asm goto ("# %l[lab]" : : : : lab);
|
||||
lab:;
|
||||
}
|
Loading…
Add table
Reference in a new issue