aboutsummaryrefslogtreecommitdiff
path: root/gcc/final.c
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1995-10-26 08:01:21 -0400
committerRichard Kenner <kenner@gcc.gnu.org>1995-10-26 08:01:21 -0400
commitc7eee2df1d729c52112e5388f6d4146780ae77d5 (patch)
tree4e66eb419efcfa6d954c780a8a1d04c475a0781a /gcc/final.c
parentfe464cafd9157578e3f8bb6dee341d470d0e96e7 (diff)
downloadgcc-c7eee2df1d729c52112e5388f6d4146780ae77d5.zip
gcc-c7eee2df1d729c52112e5388f6d4146780ae77d5.tar.gz
gcc-c7eee2df1d729c52112e5388f6d4146780ae77d5.tar.bz2
(final_scan_insn): When recur for instruction in delay slot...
(final_scan_insn): When recur for instruction in delay slot, add loop around recursive call in case the instruction gets split. From-SVN: r10511
Diffstat (limited to 'gcc/final.c')
-rw-r--r--gcc/final.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/gcc/final.c b/gcc/final.c
index 8ab4bdc..19b9683 100644
--- a/gcc/final.c
+++ b/gcc/final.c
@@ -1686,7 +1686,15 @@ final_scan_insn (insn, file, optimize, prescan, nopeepholes)
}
for (i = 1; i < XVECLEN (body, 0); i++)
- final_scan_insn (XVECEXP (body, 0, i), file, 0, prescan, 1);
+ {
+ rtx insn = XVECEXP (body, 0, i);
+ rtx next = NEXT_INSN (insn);
+ /* We loop in case any instruction in a delay slot gets
+ split. */
+ do
+ insn = final_scan_insn (insn, file, 0, prescan, 1);
+ while (insn != next);
+ }
#ifdef DBR_OUTPUT_SEQEND
DBR_OUTPUT_SEQEND (file);
#endif