From: hp Date: Tue, 22 Mar 2005 03:48:44 +0000 (+0000) Subject: PR rtl-optimization/20527 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=101bd0afda2d4793ca45b8b22e0b1ddc40c02257;p=thirdparty%2Fgcc.git 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@96853 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 42b4ac99dc37..0bc1367cf34c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2005-03-22 Hans-Peter Nilsson + + 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 * dwarf2out.c (dwarf_type_encoding_name): Remove unused prototype diff --git a/gcc/combine.c b/gcc/combine.c index 5981403eea90..297b58e914e0 100644 --- a/gcc/combine.c +++ b/gcc/combine.c @@ -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))) return 0; - /* If INSN or I2 contains an autoincrement or autodecrement, - make sure that register is not used between there and I3, - and not already used in I3 either. + /* If INSN contains an autoincrement or autodecrement, make sure that + register is not used between there and I3, and not already used in + 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 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, if (REG_NOTE_KIND (link) == REG_INC && (JUMP_P (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)))) return 0; #endif