aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1994-11-15 19:33:56 -0500
committerRichard Kenner <kenner@gcc.gnu.org>1994-11-15 19:33:56 -0500
commit9e8b2461bd1f8b308ca1d0fe406e46a97822316c (patch)
treeeeea59ec6818a934db499319c58434037bd8197e
parent1324c5deb7f14b9b44806c91c1589fe396fec7f9 (diff)
downloadgcc-9e8b2461bd1f8b308ca1d0fe406e46a97822316c.zip
gcc-9e8b2461bd1f8b308ca1d0fe406e46a97822316c.tar.gz
gcc-9e8b2461bd1f8b308ca1d0fe406e46a97822316c.tar.bz2
(relax_delay_slots): When invert a conditional jump over a single unconditional jump...
(relax_delay_slots): When invert a conditional jump over a single unconditional jump, invert the INSN_FROM_TARGET_P bit of insns in the delay slots. From-SVN: r8452
-rw-r--r--gcc/reorg.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/gcc/reorg.c b/gcc/reorg.c
index ec21a35..cd7d652 100644
--- a/gcc/reorg.c
+++ b/gcc/reorg.c
@@ -3972,6 +3972,17 @@ relax_delay_slots (first)
if (invert_jump (delay_insn, label))
{
+ int i;
+
+ /* Must update the INSN_FROM_TARGET_P bits now that
+ the branch is reversed, so that mark_target_live_regs
+ will handle the delay slot insn correctly. */
+ for (i = 1; i < XVECLEN (PATTERN (insn), 0); i++)
+ {
+ rtx slot = XVECEXP (PATTERN (insn), 0, i);
+ INSN_FROM_TARGET_P (slot) = ! INSN_FROM_TARGET_P (slot);
+ }
+
delete_insn (next);
next = insn;
}