summaryrefslogtreecommitdiff
path: root/gcc/final.c
diff options
context:
space:
mode:
authorkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>1995-10-26 12:01:21 +0000
committerkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>1995-10-26 12:01:21 +0000
commit1208daeb416accd8188704e4e662a3c618aa8ef5 (patch)
tree4e66eb419efcfa6d954c780a8a1d04c475a0781a /gcc/final.c
parent801acb81b93af935a279083c5192fa66c9d3c05d (diff)
downloadgcc-1208daeb416accd8188704e4e662a3c618aa8ef5.tar.gz
(final_scan_insn): When recur for instruction in delay slot, add loop
around recursive call in case the instruction gets split. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@10511 138bc75d-0d04-0410-961f-82ee72b054a4
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 8ab4bdc855a..19b968301c5 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