aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJeff Law <law@gcc.gnu.org>1992-08-21 16:33:02 -0600
committerJeff Law <law@gcc.gnu.org>1992-08-21 16:33:02 -0600
commit2f9ba5a9a32a37740571bbd4ab2cf10b1411ef4e (patch)
treef0fc322e22898dabfceb711e764bb8a91a3af542 /gcc
parent415f583ec9b62469e67afe8500102a9d362576dd (diff)
downloadgcc-2f9ba5a9a32a37740571bbd4ab2cf10b1411ef4e.zip
gcc-2f9ba5a9a32a37740571bbd4ab2cf10b1411ef4e.tar.gz
gcc-2f9ba5a9a32a37740571bbd4ab2cf10b1411ef4e.tar.bz2
reorg.c (fill_simple_delay_slots): Always try to fill empty delay slots with insns from beyond the delay insn...
* reorg.c (fill_simple_delay_slots): Always try to fill empty delay slots with insns from beyond the delay insn, even if optimize_skip was attempted. (fill_simple_delay_slots): When filling with insns from after the delay insn, make sure to always account for sets and references in the delay insn. From-SVN: r1931
Diffstat (limited to 'gcc')
-rw-r--r--gcc/reorg.c31
1 files changed, 18 insertions, 13 deletions
diff --git a/gcc/reorg.c b/gcc/reorg.c
index 5c35fb8..57539e3 100644
--- a/gcc/reorg.c
+++ b/gcc/reorg.c
@@ -2342,15 +2342,13 @@ fill_simple_delay_slots (first, non_jumps_p)
mark_referenced_resources (trial, &needed, 1);
}
- if (slots_filled == slots_to_fill)
- /* happy. */ ;
-
/* If all needed slots haven't been filled, we come here. */
/* Try to optimize case of jumping around a single insn. */
#if defined(ANNUL_IFFALSE_SLOTS) || defined(ANNUL_IFTRUE_SLOTS)
- else if (delay_list == 0
- && GET_CODE (insn) == JUMP_INSN && condjump_p (insn))
+ if (slots_filled != slots_to_fill
+ && delay_list == 0
+ && GET_CODE (insn) == JUMP_INSN && condjump_p (insn))
{
delay_list = optimize_skip (insn);
if (delay_list)
@@ -2382,9 +2380,10 @@ fill_simple_delay_slots (first, non_jumps_p)
later unconditional jump branches to. In that case, we don't
care about the number of uses of our label. */
- else if (GET_CODE (insn) != JUMP_INSN
- || (condjump_p (insn) && ! simplejump_p (insn)
- && JUMP_LABEL (insn) != 0))
+ if (slots_filled != slots_to_fill
+ && (GET_CODE (insn) != JUMP_INSN
+ || (condjump_p (insn) && ! simplejump_p (insn)
+ && JUMP_LABEL (insn) != 0)))
{
rtx target = 0;
int maybe_never = 0;
@@ -2401,12 +2400,18 @@ fill_simple_delay_slots (first, non_jumps_p)
mark_referenced_resources (insn, &needed, 1);
maybe_never = 1;
}
- else if (GET_CODE (insn) == JUMP_INSN)
+ else
{
- /* Get our target and show how many more uses we want to
- see before we hit the label. */
- target = JUMP_LABEL (insn);
- target_uses = LABEL_NUSES (target) - 1;
+ mark_set_resources (insn, &set, 0, 0);
+ mark_referenced_resources (insn, &needed, 0);
+ if (GET_CODE (insn) == JUMP_INSN)
+ {
+ /* Get our target and show how many more uses we want to
+ see before we hit the label. */
+ target = JUMP_LABEL (insn);
+ target_uses = LABEL_NUSES (target) - 1;
+ }
+
}
for (trial = next_nonnote_insn (insn); trial; trial = next_trial)