OSDN Git Service

PR c++/47132
[pf3gnuchains/gcc-fork.git] / gcc / regcprop.c
index 039c8b0..bf34115 100644 (file)
@@ -34,7 +34,7 @@
 #include "function.h"
 #include "recog.h"
 #include "flags.h"
-#include "toplev.h"
+#include "diagnostic-core.h"
 #include "obstack.h"
 #include "timevar.h"
 #include "tree-pass.h"
@@ -457,7 +457,7 @@ find_oldest_value_reg (enum reg_class cl, rtx reg, struct value_data *vd)
       rtx new_rtx;
 
       if (!in_hard_reg_set_p (reg_class_contents[cl], mode, i))
-       return NULL_RTX;
+       continue;
 
       new_rtx = maybe_mode_change (oldmode, vd->e[regno].mode, mode, i, regno);
       if (new_rtx)
@@ -946,7 +946,14 @@ copyprop_hardreg_forward_1 (basic_block bb, struct value_data *vd)
 
     did_replacement:
       if (changed)
-       anything_changed = true;
+       {
+         anything_changed = true;
+
+         /* If something changed, perhaps further changes to earlier
+            DEBUG_INSNs can be applied.  */
+         if (vd->n_debug_insn_changes)
+           note_uses (&PATTERN (insn), cprop_find_used_regs, vd);
+       }
 
       /* Clobber call-clobbered registers.  */
       if (CALL_P (insn))
@@ -983,7 +990,7 @@ copyprop_hardreg_forward (void)
   visited = sbitmap_alloc (last_basic_block);
   sbitmap_zero (visited);
 
-  if (MAY_HAVE_DEBUG_STMTS)
+  if (MAY_HAVE_DEBUG_INSNS)
     debug_insn_changes_pool
       = create_alloc_pool ("debug insn changes pool",
                           sizeof (struct queued_debug_insn_change), 256);
@@ -1022,7 +1029,7 @@ copyprop_hardreg_forward (void)
       copyprop_hardreg_forward_1 (bb, all_vd + bb->index);
     }
 
-  if (MAY_HAVE_DEBUG_STMTS)
+  if (MAY_HAVE_DEBUG_INSNS)
     {
       FOR_EACH_BB (bb)
        if (TEST_BIT (visited, bb->index)