diff options
author | Jeff Law <law@gcc.gnu.org> | 1992-08-21 16:33:02 -0600 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 1992-08-21 16:33:02 -0600 |
commit | 2f9ba5a9a32a37740571bbd4ab2cf10b1411ef4e (patch) | |
tree | f0fc322e22898dabfceb711e764bb8a91a3af542 /gcc | |
parent | 415f583ec9b62469e67afe8500102a9d362576dd (diff) | |
download | gcc-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.c | 31 |
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) |