aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJim Wilson <wilson@gcc.gnu.org>1995-03-10 10:53:01 -0800
committerJim Wilson <wilson@gcc.gnu.org>1995-03-10 10:53:01 -0800
commitfe41a98eb213c6fd3307b57551f9b837a882f1b9 (patch)
tree311bcaff38237286fb6d9250e910caf612aefdc6
parent63a33c946357af5aa88605e00226d3ee6509f0f0 (diff)
downloadgcc-fe41a98eb213c6fd3307b57551f9b837a882f1b9.zip
gcc-fe41a98eb213c6fd3307b57551f9b837a882f1b9.tar.gz
gcc-fe41a98eb213c6fd3307b57551f9b837a882f1b9.tar.bz2
(steal_delay_list_from_target): Exit at the top if the
branch in SEQ is not a single set. From-SVN: r9158
-rw-r--r--gcc/reorg.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/gcc/reorg.c b/gcc/reorg.c
index 6c72f4c..7c5e3c8 100644
--- a/gcc/reorg.c
+++ b/gcc/reorg.c
@@ -1592,12 +1592,17 @@ steal_delay_list_from_target (insn, condition, seq, delay_list,
/* We can't do anything if there are more delay slots in SEQ than we
can handle, or if we don't know that it will be a taken branch.
-
We know that it will be a taken branch if it is either an unconditional
- branch or a conditional branch with a stricter branch condition. */
+ branch or a conditional branch with a stricter branch condition.
+
+ Also, exit if the branch has more than one set, since then it is computing
+ other results that can't be ignored, e.g. the HPPA mov&branch instruction.
+ ??? It may be possible to move other sets into INSN in addition to
+ moving the instructions in the delay slots. */
if (XVECLEN (seq, 0) - 1 > slots_remaining
- || ! condition_dominates_p (condition, XVECEXP (seq, 0, 0)))
+ || ! condition_dominates_p (condition, XVECEXP (seq, 0, 0))
+ || ! single_set (XVECEXP (seq, 0, 0)))
return delay_list;
for (i = 1; i < XVECLEN (seq, 0); i++)