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;
+
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