summaryrefslogtreecommitdiff
path: root/gcc/loop.c
diff options
context:
space:
mode:
authorsayle <sayle@138bc75d-0d04-0410-961f-82ee72b054a4>2003-10-24 00:53:05 +0000
committersayle <sayle@138bc75d-0d04-0410-961f-82ee72b054a4>2003-10-24 00:53:05 +0000
commit0a5370530729695532e72ecf176973d9454682d6 (patch)
tree16169e3b0ae191a2517d3ca85d8440981607daa7 /gcc/loop.c
parent9ceb2045ecea5dabfdfb8893f8b17942f2e158d9 (diff)
downloadgcc-0a5370530729695532e72ecf176973d9454682d6.tar.gz
PR middle-end/11414
* loop.c (load_mems): Use redirect_jump to forward jumps from the original loop end label to the new "loop sink" block's label. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@72876 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/loop.c')
-rw-r--r--gcc/loop.c18
1 files changed, 5 insertions, 13 deletions
diff --git a/gcc/loop.c b/gcc/loop.c
index c5b40608142..667833d64a5 100644
--- a/gcc/loop.c
+++ b/gcc/loop.c
@@ -10005,20 +10005,12 @@ load_mems (const struct loop *loop)
}
}
+ /* Now, we need to replace all references to the previous exit
+ label with the new one. */
if (label != NULL_RTX && end_label != NULL_RTX)
- {
- /* Now, we need to replace all references to the previous exit
- label with the new one. */
- replace_label_data rr;
- rr.r1 = end_label;
- rr.r2 = label;
- rr.update_label_nuses = true;
-
- for (p = loop->start; p != loop->end; p = NEXT_INSN (p))
- {
- for_each_rtx (&p, replace_label, &rr);
- }
- }
+ for (p = loop->start; p != loop->end; p = NEXT_INSN (p))
+ if (GET_CODE (p) == JUMP_INSN && JUMP_LABEL (p) == end_label)
+ redirect_jump (p, label, false);
cselib_finish ();
}