diff options
author | Maxim Kuvyrkov <mkuvyrkov@ispras.ru> | 2006-10-06 21:45:13 +0000 |
---|---|---|
committer | Maxim Kuvyrkov <mkuvyrkov@gcc.gnu.org> | 2006-10-06 21:45:13 +0000 |
commit | 7ea84dc44cd48f9b7833248a2f0b716bbf37df2b (patch) | |
tree | d4aed27cfc02ff872c40550b81096f52a7e90e14 /gcc/sched-ebb.c | |
parent | b5b8e31b32799ad6e13518d987c890fd2f0da1b4 (diff) | |
download | gcc-7ea84dc44cd48f9b7833248a2f0b716bbf37df2b.zip gcc-7ea84dc44cd48f9b7833248a2f0b716bbf37df2b.tar.gz gcc-7ea84dc44cd48f9b7833248a2f0b716bbf37df2b.tar.bz2 |
re PR rtl-optimization/29128 (ICE: in move_block_after_check, at haifa-sched.c:4337)
2006-10-06 Maxim Kuvyrkov <mkuvyrkov@ispras.ru>
PR rtl-optimization/29128
* sched-int.h (IS_SPECULATION_BRANCHY_CHECK_P): New macro.
* sched-ebb.c (advance_target_bb): Use it to fix condition to
allow interblock movement of speculation checks.
* gcc.c-torture/compile/pr29128.c: New test.
From-SVN: r117515
Diffstat (limited to 'gcc/sched-ebb.c')
-rw-r--r-- | gcc/sched-ebb.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/gcc/sched-ebb.c b/gcc/sched-ebb.c index b220348..599241a 100644 --- a/gcc/sched-ebb.c +++ b/gcc/sched-ebb.c @@ -719,9 +719,13 @@ advance_target_bb (basic_block bb, rtx insn) { if (BLOCK_FOR_INSN (insn) != bb && control_flow_insn_p (insn) - && !RECOVERY_BLOCK (insn) - && !RECOVERY_BLOCK (BB_END (bb))) + /* We handle interblock movement of the speculation check + or over a speculation check in + haifa-sched.c: move_block_after_check (). */ + && !IS_SPECULATION_BRANCHY_CHECK_P (insn) + && !IS_SPECULATION_BRANCHY_CHECK_P (BB_END (bb))) { + /* Assert that we don't move jumps across blocks. */ gcc_assert (!control_flow_insn_p (BB_END (bb)) && NOTE_INSN_BASIC_BLOCK_P (BB_HEAD (bb->next_bb))); return bb; |