aboutsummaryrefslogtreecommitdiff
path: root/gcc/reorg.c
diff options
context:
space:
mode:
authorJeff Law <law@gcc.gnu.org>1995-12-31 16:05:16 -0700
committerJeff Law <law@gcc.gnu.org>1995-12-31 16:05:16 -0700
commit126db1fa3288458f6b3149df32f392cde227f54c (patch)
tree3482aec1d685bbe0734d65cde36134f329d41ff7 /gcc/reorg.c
parent98d654f60c98701a785d7764d80ed3537d9caa9b (diff)
downloadgcc-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.c15
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,