aboutsummaryrefslogtreecommitdiff
path: root/gcc/loop.c
diff options
context:
space:
mode:
authorJames E Wilson <wilson@tuliptree.org>2003-07-10 23:44:40 -0700
committerJim Wilson <wilson@gcc.gnu.org>2003-07-10 23:44:40 -0700
commitac8354b1da5fff96c50a9f6a1f9a441c221f3a17 (patch)
tree61032f35b38631d7d417c84e9e248af1d2d2a114 /gcc/loop.c
parentc3c359327077fc9bb020ef9306dfbd7c4a483e39 (diff)
downloadgcc-ac8354b1da5fff96c50a9f6a1f9a441c221f3a17.zip
gcc-ac8354b1da5fff96c50a9f6a1f9a441c221f3a17.tar.gz
gcc-ac8354b1da5fff96c50a9f6a1f9a441c221f3a17.tar.bz2
re PR rtl-optimization/9745 ([powerpc] miscompiles libmcrypt (alias problem during loop))
PR optimization/9745 * loop.c (loop_iv_add_mult_emit_before): Call loop_regs_update before loop_insn_emit_before. (loop_iv_add_mult_sink, loop_iv_add_mult_hoist): Likewise. From-SVN: r69220
Diffstat (limited to 'gcc/loop.c')
-rw-r--r--gcc/loop.c21
1 files changed, 12 insertions, 9 deletions
diff --git a/gcc/loop.c b/gcc/loop.c
index b3c5517..fdb8995 100644
--- a/gcc/loop.c
+++ b/gcc/loop.c
@@ -7737,11 +7737,12 @@ loop_iv_add_mult_emit_before (const struct loop *loop, rtx b, rtx m, rtx a,
update_reg_last_use (b, before_insn);
update_reg_last_use (m, before_insn);
- loop_insn_emit_before (loop, before_bb, before_insn, seq);
-
/* It is possible that the expansion created lots of new registers.
- Iterate over the sequence we just created and record them all. */
+ Iterate over the sequence we just created and record them all. We
+ must do this before inserting the sequence. */
loop_regs_update (loop, seq);
+
+ loop_insn_emit_before (loop, before_bb, before_insn, seq);
}
@@ -7764,11 +7765,12 @@ loop_iv_add_mult_sink (const struct loop *loop, rtx b, rtx m, rtx a, rtx reg)
update_reg_last_use (b, loop->sink);
update_reg_last_use (m, loop->sink);
- loop_insn_sink (loop, seq);
-
/* It is possible that the expansion created lots of new registers.
- Iterate over the sequence we just created and record them all. */
+ Iterate over the sequence we just created and record them all. We
+ must do this before inserting the sequence. */
loop_regs_update (loop, seq);
+
+ loop_insn_sink (loop, seq);
}
@@ -7784,11 +7786,12 @@ loop_iv_add_mult_hoist (const struct loop *loop, rtx b, rtx m, rtx a, rtx reg)
/* Use copy_rtx to prevent unexpected sharing of these rtx. */
seq = gen_add_mult (copy_rtx (b), copy_rtx (m), copy_rtx (a), reg);
- loop_insn_hoist (loop, seq);
-
/* It is possible that the expansion created lots of new registers.
- Iterate over the sequence we just created and record them all. */
+ Iterate over the sequence we just created and record them all. We
+ must do this before inserting the sequence. */
loop_regs_update (loop, seq);
+
+ loop_insn_hoist (loop, seq);
}