OSDN Git Service

PR c++/23287
[pf3gnuchains/gcc-fork.git] / gcc / regmove.c
index 7de8d0d..12b93fc 100644 (file)
@@ -685,7 +685,15 @@ optimize_reg_copy_2 (rtx insn, rtx dest, rtx src)
              {
                if (reg_mentioned_p (dest, PATTERN (q)))
                  {
+                   rtx note;
+
                    PATTERN (q) = replace_rtx (PATTERN (q), dest, src);
+                   note = FIND_REG_INC_NOTE (q, dest);
+                   if (note)
+                     {
+                       remove_note (q, note);
+                       add_reg_note (q, REG_INC, src);
+                     }
                    df_insn_rescan (q);
                  }
 
@@ -1117,7 +1125,8 @@ regmove_optimize (rtx f, int nregs)
 
   for (pass = 0; pass <= 2; pass++)
     {
-      if (! flag_regmove && pass >= flag_expensive_optimizations)
+      /* We need fewer optimizations for IRA.  */
+      if ((! flag_regmove || flag_ira) && pass >= flag_expensive_optimizations)
        goto done;
 
       if (dump_file)
@@ -1165,7 +1174,9 @@ regmove_optimize (rtx f, int nregs)
                    }
                }
            }
-         if (! flag_regmove)
+
+         /* All optimizations important for IRA have been done.  */
+         if (! flag_regmove || flag_ira)
            continue;
 
          if (! find_matches (insn, &match))