diff options
author | Jeff Law <law@gcc.gnu.org> | 1995-12-31 16:05:16 -0700 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 1995-12-31 16:05:16 -0700 |
commit | 126db1fa3288458f6b3149df32f392cde227f54c (patch) | |
tree | 3482aec1d685bbe0734d65cde36134f329d41ff7 /gcc/reorg.c | |
parent | 98d654f60c98701a785d7764d80ed3537d9caa9b (diff) | |
download | gcc-126db1fa3288458f6b3149df32f392cde227f54c.zip gcc-126db1fa3288458f6b3149df32f392cde227f54c.tar.gz gcc-126db1fa3288458f6b3149df32f392cde227f54c.tar.bz2 |
reorg.c (fill_simple_delay_slots): Try to fill from the target of an unconditional branch if necessary.
* reorg.c (fill_simple_delay_slots): Try to fill from the
target of an unconditional branch if necessary.
From-SVN: r10920
Diffstat (limited to 'gcc/reorg.c')
-rw-r--r-- | gcc/reorg.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/gcc/reorg.c b/gcc/reorg.c index edd76d5..2bee648 100644 --- a/gcc/reorg.c +++ b/gcc/reorg.c @@ -2804,7 +2804,7 @@ fill_simple_delay_slots (first, non_jumps_p) register int i, j; int num_unfilled_slots = unfilled_slots_next - unfilled_slots_base; struct resources needed, set; - register int slots_to_fill, slots_filled; + int slots_to_fill, slots_filled; rtx delay_list; for (i = 0; i < num_unfilled_slots; i++) @@ -3136,6 +3136,19 @@ fill_simple_delay_slots (first, non_jumps_p) } } + /* If this is an unconditional jump, then try to get insns from the + target of the jump. */ + if (GET_CODE (insn) == JUMP_INSN + && simplejump_p (insn) + && slots_filled != slots_to_fill) + delay_list + = fill_slots_from_thread (insn, const_true_rtx, + next_active_insn (JUMP_LABEL (insn)), + NULL, 1, 1, + own_thread_p (JUMP_LABEL (insn), + JUMP_LABEL (insn), 0), + 0, slots_to_fill, &slots_filled); + if (delay_list) unfilled_slots_base[i] = emit_delay_sequence (insn, delay_list, |