summaryrefslogtreecommitdiff
path: root/gcc/sched-ebb.c
diff options
context:
space:
mode:
authormkuvyrkov <mkuvyrkov@138bc75d-0d04-0410-961f-82ee72b054a4>2006-08-17 08:48:37 +0000
committermkuvyrkov <mkuvyrkov@138bc75d-0d04-0410-961f-82ee72b054a4>2006-08-17 08:48:37 +0000
commit6fcfdb19d48536721bed5e00b79c0942e8b8ee28 (patch)
treebad9e0947d0370b8e14e1ea87041d779fe235cdb /gcc/sched-ebb.c
parent318a328178a8984bb2a0cc17e8c23ed21015b5fe (diff)
downloadgcc-6fcfdb19d48536721bed5e00b79c0942e8b8ee28.tar.gz
2006-08-17 Maxim Kuvyrkov <mkuvyrkov@ispras.ru>
PR rtl-optimization/28489 * sched-ebb.c (begin_schedule_ready): Create basic block at the right place. (advance_target_bb): Skip empty blocks. * haifa-sched.c (bb_note): Make global. * sched-int.h (bb_note): Add prototype. 2006-08-17 Maxim Kuvyrkov <mkuvyrkov@ispras.ru> PR rtl-optimization/28489 * gcc.c-torture/compile/pr28489.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@116214 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/sched-ebb.c')
-rw-r--r--gcc/sched-ebb.c18
1 files changed, 14 insertions, 4 deletions
diff --git a/gcc/sched-ebb.c b/gcc/sched-ebb.c
index d7a3db9b61d..b220348da7b 100644
--- a/gcc/sched-ebb.c
+++ b/gcc/sched-ebb.c
@@ -166,7 +166,8 @@ begin_schedule_ready (rtx insn, rtx last)
gcc_assert (NOTE_INSN_BASIC_BLOCK_P (BB_END (bb)));
}
else
- bb = create_basic_block (insn, 0, last_bb);
+ /* Create an empty unreachable block after the INSN. */
+ bb = create_basic_block (NEXT_INSN (insn), NULL_RTX, last_bb);
/* split_edge () creates BB before E->DEST. Keep in mind, that
this operation extends scheduling region till the end of BB.
@@ -728,10 +729,19 @@ advance_target_bb (basic_block bb, rtx insn)
else
return 0;
}
- else if (bb != last_bb)
- return bb->next_bb;
else
- gcc_unreachable ();
+ /* Return next non empty block. */
+ {
+ do
+ {
+ gcc_assert (bb != last_bb);
+
+ bb = bb->next_bb;
+ }
+ while (bb_note (bb) == BB_END (bb));
+
+ return bb;
+ }
}
/* Fix internal data after interblock movement of jump instruction.