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

Reply via email to