diff options
| author | hp <hp@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-05-07 03:20:24 +0000 |
|---|---|---|
| committer | hp <hp@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-05-07 03:20:24 +0000 |
| commit | f17979aa28f0882c2083d518948e151dfdb2c81e (patch) | |
| tree | 3fe1cd6d6776b02a4fb490e24bba2280f1a34c0b | |
| parent | c5ae29610f9e579c2dc3d27dca834f5e4b07a1d5 (diff) | |
| download | ppe42-gcc-f17979aa28f0882c2083d518948e151dfdb2c81e.tar.gz ppe42-gcc-f17979aa28f0882c2083d518948e151dfdb2c81e.zip | |
PR optimization/15296
* reorg.c (fill_simple_delay_slots): Use next_real_insn when
getting last consecutive label at a branch.
(relax_delay_slots): Similar, near top of loop.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@81600 138bc75d-0d04-0410-961f-82ee72b054a4
| -rw-r--r-- | gcc/ChangeLog | 7 | ||||
| -rw-r--r-- | gcc/reorg.c | 8 |
2 files changed, 13 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c87394fb900..b0eee233a4a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2004-05-07 Hans-Peter Nilsson <hp@axis.com> + + PR optimization/15296 + * reorg.c (fill_simple_delay_slots): Use next_real_insn when + getting last consecutive label at a branch. + (relax_delay_slots): Similar, near top of loop. + 2004-05-06 John David Anglin <dave.anglin@nrc-cnrc.gc.ca> PR target/15202 diff --git a/gcc/reorg.c b/gcc/reorg.c index 9a58d34b29f..2ae0a8f2259 100644 --- a/gcc/reorg.c +++ b/gcc/reorg.c @@ -2349,7 +2349,9 @@ fill_simple_delay_slots (int non_jumps_p) && eligible_for_delay (insn, slots_filled, next_trial, flags) && ! can_throw_internal (trial)) { - rtx new_label = next_active_insn (next_trial); + /* See comment in relax_delay_slots about necessity of using + next_real_insn here. */ + rtx new_label = next_real_insn (next_trial); if (new_label != 0) new_label = get_label_before (new_label); @@ -3074,7 +3076,9 @@ relax_delay_slots (rtx first) && (target_label = JUMP_LABEL (insn)) != 0) { target_label = follow_jumps (target_label); - target_label = prev_label (next_active_insn (target_label)); + /* See comment further down why we must use next_real_insn here, + instead of next_active_insn. */ + target_label = prev_label (next_real_insn (target_label)); if (target_label == 0) target_label = find_end_label (); |

