aboutsummaryrefslogtreecommitdiff
path: root/gcc/store-motion.c
diff options
context:
space:
mode:
authorUros Bizjak <ubizjak@gmail.com>2019-01-24 21:48:01 +0100
committerUros Bizjak <uros@gcc.gnu.org>2019-01-24 21:48:01 +0100
commit53f2f08b057b6b57b5d8b99db10b63de0634715c (patch)
tree7683639a9a2979015a7efcd9b91d92cf8cb3caea /gcc/store-motion.c
parent83e23dcd562191e102a63f83822848fa5a3a68ea (diff)
downloadgcc-53f2f08b057b6b57b5d8b99db10b63de0634715c.zip
gcc-53f2f08b057b6b57b5d8b99db10b63de0634715c.tar.gz
gcc-53f2f08b057b6b57b5d8b99db10b63de0634715c.tar.bz2
re PR rtl-optimization/88948 (ICE in elimination_costs_in_insn, at reload1.c:3640 since r264148)
PR target/88948 * rtl.h (prepare_copy_insn): New prototype. * gcse.c (prepare_copy_insn): New function, split out from process_insert_insn. (process_insert_insn): Use prepare_copy_insn. * store-motion.c (replace_store_insn): Use prepare_copy_insn instead of gen_move_insn. testsuite/ChangeLog: PR target/88948 * gcc.target/i386/pr88948.c: New test. From-SVN: r268249
Diffstat (limited to 'gcc/store-motion.c')
-rw-r--r--gcc/store-motion.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/gcc/store-motion.c b/gcc/store-motion.c
index 28c4825..a0838f6 100644
--- a/gcc/store-motion.c
+++ b/gcc/store-motion.c
@@ -912,8 +912,7 @@ replace_store_insn (rtx reg, rtx_insn *del, basic_block bb,
rtx_insn *insn;
rtx mem, note, set;
- mem = smexpr->pattern;
- insn = gen_move_insn (reg, SET_SRC (single_set (del)));
+ insn = prepare_copy_insn (reg, SET_SRC (single_set (del)));
unsigned int i;
rtx_insn *temp;
@@ -946,6 +945,7 @@ replace_store_insn (rtx reg, rtx_insn *del, basic_block bb,
/* Now we must handle REG_EQUAL notes whose contents is equal to the mem;
they are no longer accurate provided that they are reached by this
definition, so drop them. */
+ mem = smexpr->pattern;
for (; insn != NEXT_INSN (BB_END (bb)); insn = NEXT_INSN (insn))
if (NONDEBUG_INSN_P (insn))
{