On Tue, Apr 5, 2011 at 11:28 AM, Nathan Froyd <[email protected]> wrote:
> On Tue, Apr 05, 2011 at 11:22:56AM -0700, Nathan Froyd wrote:
>> On Tue, Apr 05, 2011 at 09:59:43AM -0400, Nathan Froyd wrote:
>> > On Mon, Apr 04, 2011 at 02:49:54PM -0400, Nathan Froyd wrote:
>> > > This patch does just what $SUBJECT suggests.
>> >
>> > v2, now with obstacks!
>>
>> This broke compilation on AUTO_INC_DEC targets. Currently putting
>> together a fix and testing via cross to powerpc-eabispe.
>
> ...and here's the patch I'm going to install.
>
> -Nathan
>
> * combine.c (combine_instructions) [AUTO_INC_DEC]: Declare links
> as an rtx.
> (try_combine) [AUTO_INC_DEC]: Declare a local link rtx.
>
> diff --git a/gcc/combine.c b/gcc/combine.c
> index 30b7fdd..3e4a38c 100644
> --- a/gcc/combine.c
> +++ b/gcc/combine.c
> @@ -1139,6 +1139,8 @@ combine_instructions (rtx f, unsigned int nregs)
> FOR_BB_INSNS (this_basic_block, insn)
> if (INSN_P (insn) && BLOCK_FOR_INSN (insn))
> {
> + rtx links;
^^^^^^^^^^^^^^^^^^^^^^
links may be unused if AUTO_INC_DEC is not defined.
> +
> subst_low_luid = DF_INSN_LUID (insn);
> subst_insn = insn;
>
> @@ -2911,15 +2913,18 @@ try_combine (rtx i3, rtx i2, rtx i1, rtx i0, int
> *new_direct_jump_p)
> /* It's not the exception. */
> #endif
> #ifdef AUTO_INC_DEC
> - for (link = REG_NOTES (i3); link; link = XEXP (link, 1))
> - if (REG_NOTE_KIND (link) == REG_INC
> - && (reg_overlap_mentioned_p (XEXP (link, 0), PATTERN (i2))
> - || (i1 != 0
> - && reg_overlap_mentioned_p (XEXP (link, 0), PATTERN (i1)))))
> - {
> - undo_all ();
> - return 0;
> - }
> + {
> + rtx link;
> + for (link = REG_NOTES (i3); link; link = XEXP (link, 1))
> + if (REG_NOTE_KIND (link) == REG_INC
> + && (reg_overlap_mentioned_p (XEXP (link, 0), PATTERN (i2))
> + || (i1 != 0
> + && reg_overlap_mentioned_p (XEXP (link, 0), PATTERN
> (i1)))))
> + {
> + undo_all ();
> + return 0;
> + }
> + }
> #endif
>
> /* See if the SETs in I1 or I2 need to be kept around in the merged
>
--
H.J.