diff options
author | Maxim Kuvyrkov <mkuvyrkov@ispras.ru> | 2006-11-16 06:57:59 +0000 |
---|---|---|
committer | Maxim Kuvyrkov <mkuvyrkov@gcc.gnu.org> | 2006-11-16 06:57:59 +0000 |
commit | 96370780ab54d139fcba44fcc63051de6acad09c (patch) | |
tree | e42fd46715b58df86d89a5108120bf34ad75b583 /gcc/haifa-sched.c | |
parent | db21bbf90c02ca0a342e7fd9acdc778b2e758692 (diff) | |
download | gcc-96370780ab54d139fcba44fcc63051de6acad09c.zip gcc-96370780ab54d139fcba44fcc63051de6acad09c.tar.gz gcc-96370780ab54d139fcba44fcc63051de6acad09c.tar.bz2 |
re PR target/29201 (ICE in create_recovery_block, at haifa-sched.c:3692 at -O3)
2006-11-16 Maxim Kuvyrkov <mkuvyrkov@ispras.ru>
PR target/29201
* cfgrtl.c (rtl_delete_block): Move the code for getting last insn of
bb to ...
(get_last_bb_insn): ... new global function.
(basic_block.h): Declare it.
* haifa-sched.c (create_recovery_block): Use it.
2006-11-16 Maxim Kuvyrkov <mkuvyrkov@ispras.ru>
PR target/29201
* gcc.c-torture/compile/pr29201.c: New test for ia64 target.
From-SVN: r118882
Diffstat (limited to 'gcc/haifa-sched.c')
-rw-r--r-- | gcc/haifa-sched.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/gcc/haifa-sched.c b/gcc/haifa-sched.c index 6cd1fe1..3fda068 100644 --- a/gcc/haifa-sched.c +++ b/gcc/haifa-sched.c @@ -3544,18 +3544,22 @@ static basic_block create_recovery_block (void) { rtx label; + rtx barrier; basic_block rec; added_recovery_block_p = true; if (!before_recovery) init_before_recovery (); - - label = gen_label_rtx (); - gcc_assert (BARRIER_P (NEXT_INSN (BB_END (before_recovery)))); - label = emit_label_after (label, NEXT_INSN (BB_END (before_recovery))); - rec = create_basic_block (label, label, before_recovery); + barrier = get_last_bb_insn (before_recovery); + gcc_assert (BARRIER_P (barrier)); + + label = emit_label_after (gen_label_rtx (), barrier); + + rec = create_basic_block (label, label, before_recovery); + + /* Recovery block always end with an unconditional jump. */ emit_barrier_after (BB_END (rec)); if (BB_PARTITION (before_recovery) != BB_UNPARTITIONED) |