Commit 7f6055d0 by Steven Bosscher

re PR rtl-optimization/31848 (Invalid loop optimization causes bootstrap failure in genautomata)

	PR rtl-optimization/31848
	* loop-invariant.c (move_invariant_reg): If we move an insn
	with a REG_EQUAL note, and that insn is not always executed,
	remove the REG_EQUAL note.

From-SVN: r124639
parent 8c0dbf34
2007-05-12 Steven Bosscher <steven@gcc.gnu.org>
PR rtl-optimization/31848
* loop-invariant.c (move_invariant_reg): If we move an insn
with a REG_EQUAL note, and that insn is not always executed,
remove the REG_EQUAL note.
2007-05-12 Richard Guenther <rguenther@suse.de> 2007-05-12 Richard Guenther <rguenther@suse.de>
PR tree-optimization/31797 PR tree-optimization/31797
......
...@@ -1156,9 +1156,21 @@ move_invariant_reg (struct loop *loop, unsigned invno) ...@@ -1156,9 +1156,21 @@ move_invariant_reg (struct loop *loop, unsigned invno)
to let emit_move_insn produce a valid instruction stream. */ to let emit_move_insn produce a valid instruction stream. */
if (REG_P (dest) && !HARD_REGISTER_P (dest)) if (REG_P (dest) && !HARD_REGISTER_P (dest))
{ {
rtx note;
emit_insn_after (gen_move_insn (dest, reg), inv->insn); emit_insn_after (gen_move_insn (dest, reg), inv->insn);
SET_DEST (set) = reg; SET_DEST (set) = reg;
reorder_insns (inv->insn, inv->insn, BB_END (preheader)); reorder_insns (inv->insn, inv->insn, BB_END (preheader));
/* If there is a REG_EQUAL note on the insn we just moved, and
insn is in a basic block that is not always executed, the note
may no longer be valid after we move the insn.
Note that uses in REG_EQUAL notes are taken into account in
the computation of invariants. Hence it is safe to retain the
note even if the note contains register references. */
if (! inv->always_executed
&& (note = find_reg_note (inv->insn, REG_EQUAL, NULL_RTX)))
remove_note (inv->insn, note);
} }
else else
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment