aboutsummaryrefslogtreecommitdiff
path: root/gcc/gcse.c
diff options
context:
space:
mode:
authorSeongbae Park <seongbae.park@gmail.com>2007-06-18 20:49:23 +0000
committerSeongbae Park <spark@gcc.gnu.org>2007-06-18 20:49:23 +0000
commitbfff9190695b229b6d0c9432e4c0f4b12401841d (patch)
treed389cd31a3929555328650e9fcad1777bd249ca0 /gcc/gcse.c
parentaacc93b5cae884a2396093f0f357404745b32a7c (diff)
downloadgcc-bfff9190695b229b6d0c9432e4c0f4b12401841d.zip
gcc-bfff9190695b229b6d0c9432e4c0f4b12401841d.tar.gz
gcc-bfff9190695b229b6d0c9432e4c0f4b12401841d.tar.bz2
re PR middle-end/32321 (ICE in df_refs_verify with -fgcse-sm)
2007-06-18 Seongbae Park <seongbae.park@gmail.com> PR rtl-optimization/32321 * gcse.c (replace_store_insn): Update the note before calling emit_insn_after. From-SVN: r125827
Diffstat (limited to 'gcc/gcse.c')
-rw-r--r--gcc/gcse.c25
1 files changed, 14 insertions, 11 deletions
diff --git a/gcc/gcse.c b/gcc/gcse.c
index 828ee6b..8278714 100644
--- a/gcc/gcse.c
+++ b/gcc/gcse.c
@@ -6341,17 +6341,6 @@ replace_store_insn (rtx reg, rtx del, basic_block bb, struct ls_expr *smexpr)
mem = smexpr->pattern;
insn = gen_move_insn (reg, SET_SRC (single_set (del)));
- insn = emit_insn_after (insn, del);
-
- if (dump_file)
- {
- fprintf (dump_file,
- "STORE_MOTION delete insn in BB %d:\n ", bb->index);
- print_inline_rtx (dump_file, del, 6);
- fprintf (dump_file, "\nSTORE MOTION replaced with insn:\n ");
- print_inline_rtx (dump_file, insn, 6);
- fprintf (dump_file, "\n");
- }
for (ptr = ANTIC_STORE_LIST (smexpr); ptr; ptr = XEXP (ptr, 1))
if (XEXP (ptr, 0) == del)
@@ -6379,6 +6368,20 @@ replace_store_insn (rtx reg, rtx del, basic_block bb, struct ls_expr *smexpr)
XEXP (note, 0) = insn;
}
+ /* Emit the insn AFTER all the notes are transferred.
+ This is cheaper since we avoid df rescanning for the note change. */
+ insn = emit_insn_after (insn, del);
+
+ if (dump_file)
+ {
+ fprintf (dump_file,
+ "STORE_MOTION delete insn in BB %d:\n ", bb->index);
+ print_inline_rtx (dump_file, del, 6);
+ fprintf (dump_file, "\nSTORE MOTION replaced with insn:\n ");
+ print_inline_rtx (dump_file, insn, 6);
+ fprintf (dump_file, "\n");
+ }
+
delete_insn (del);
/* Now we must handle REG_EQUAL notes whose contents is equal to the mem;