Commit 17c9bcdd by Hans-Peter Nilsson Committed by Hans-Peter Nilsson

re PR rtl-optimization/20527 (Mishandling of postincrement causes bzip2 miscompilation.)

	PR rtl-optimization/20527
	* combine.c (can_combine_p) [AUTO_INC_DEC]: When INSN has an
	REG_INC note, test that the register also isn't mentioned in PRED
	or SUCC.

From-SVN: r96853
parent 9d7cb254
2005-03-22 Hans-Peter Nilsson <hp@axis.com>
PR rtl-optimization/20527
* combine.c (can_combine_p) [AUTO_INC_DEC]: When INSN has an
REG_INC note, test that the register also isn't mentioned in PRED
or SUCC.
2005-03-22 Ben Elliston <bje@au.ibm.com> 2005-03-22 Ben Elliston <bje@au.ibm.com>
* dwarf2out.c (dwarf_type_encoding_name): Remove unused prototype * dwarf2out.c (dwarf_type_encoding_name): Remove unused prototype
......
...@@ -1314,9 +1314,9 @@ can_combine_p (rtx insn, rtx i3, rtx pred ATTRIBUTE_UNUSED, rtx succ, ...@@ -1314,9 +1314,9 @@ can_combine_p (rtx insn, rtx i3, rtx pred ATTRIBUTE_UNUSED, rtx succ,
if (INSN_P (p) && p != succ && volatile_insn_p (PATTERN (p))) if (INSN_P (p) && p != succ && volatile_insn_p (PATTERN (p)))
return 0; return 0;
/* If INSN or I2 contains an autoincrement or autodecrement, /* If INSN contains an autoincrement or autodecrement, make sure that
make sure that register is not used between there and I3, register is not used between there and I3, and not already used in
and not already used in I3 either. I3 either. Neither must it be used in PRED or SUCC, if they exist.
Also insist that I3 not be a jump; if it were one Also insist that I3 not be a jump; if it were one
and the incremented register were spilled, we would lose. */ and the incremented register were spilled, we would lose. */
...@@ -1325,6 +1325,10 @@ can_combine_p (rtx insn, rtx i3, rtx pred ATTRIBUTE_UNUSED, rtx succ, ...@@ -1325,6 +1325,10 @@ can_combine_p (rtx insn, rtx i3, rtx pred ATTRIBUTE_UNUSED, rtx succ,
if (REG_NOTE_KIND (link) == REG_INC if (REG_NOTE_KIND (link) == REG_INC
&& (JUMP_P (i3) && (JUMP_P (i3)
|| reg_used_between_p (XEXP (link, 0), insn, i3) || reg_used_between_p (XEXP (link, 0), insn, i3)
|| (pred != NULL_RTX
&& reg_overlap_mentioned_p (XEXP (link, 0), PATTERN (pred)))
|| (succ != NULL_RTX
&& reg_overlap_mentioned_p (XEXP (link, 0), PATTERN (succ)))
|| reg_overlap_mentioned_p (XEXP (link, 0), PATTERN (i3)))) || reg_overlap_mentioned_p (XEXP (link, 0), PATTERN (i3))))
return 0; return 0;
#endif #endif
......
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