OSDN Git Service

- fix whitespace in laste gcc/ChangeLog entry
[pf3gnuchains/gcc-fork.git] / gcc / resource.c
index 846f8ef..1ee87c0 100644 (file)
@@ -1,6 +1,6 @@
 /* Definitions for computing resource usage of specific insns.
    Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
-   2009 Free Software Foundation, Inc.
+   2009, 2010 Free Software Foundation, Inc.
 
 This file is part of GCC.
 
@@ -22,7 +22,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "system.h"
 #include "coretypes.h"
 #include "tm.h"
-#include "toplev.h"
+#include "diagnostic-core.h"
 #include "rtl.h"
 #include "tm_p.h"
 #include "hard-reg-set.h"
@@ -334,7 +334,7 @@ mark_referenced_resources (rtx x, struct resources *res,
          if (frame_pointer_needed)
            {
              SET_HARD_REG_BIT (res->regs, FRAME_POINTER_REGNUM);
-#if FRAME_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
+#if !HARD_FRAME_POINTER_IS_FRAME_POINTER
              SET_HARD_REG_BIT (res->regs, HARD_FRAME_POINTER_REGNUM);
 #endif
            }
@@ -945,10 +945,11 @@ mark_target_live_regs (rtx insns, rtx target, struct resources *res)
 
   /* If we found a basic block, get the live registers from it and update
      them with anything set or killed between its start and the insn before
-     TARGET.  Otherwise, we must assume everything is live.  */
+     TARGET; this custom life analysis is really about registers so we need
+     to use the LR problem.  Otherwise, we must assume everything is live.  */
   if (b != -1)
     {
-      regset regs_live = df_get_live_in (BASIC_BLOCK (b));
+      regset regs_live = DF_LR_IN (BASIC_BLOCK (b));
       rtx start_insn, stop_insn;
 
       /* Compute hard regs live at start of block.  */
@@ -956,7 +957,7 @@ mark_target_live_regs (rtx insns, rtx target, struct resources *res)
 
       /* Get starting and ending insn, handling the case where each might
         be a SEQUENCE.  */
-      start_insn = (b == ENTRY_BLOCK_PTR->next_bb->index ? 
+      start_insn = (b == ENTRY_BLOCK_PTR->next_bb->index ?
                    insns : BB_HEAD (BASIC_BLOCK (b)));
       stop_insn = target;
 
@@ -975,6 +976,9 @@ mark_target_live_regs (rtx insns, rtx target, struct resources *res)
          rtx real_insn = insn;
          enum rtx_code code = GET_CODE (insn);
 
+         if (DEBUG_INSN_P (insn))
+           continue;
+
          /* If this insn is from the target of a branch, it isn't going to
             be used in the sequel.  If it is used in both cases, this
             test will not be true.  */
@@ -1052,7 +1056,7 @@ mark_target_live_regs (rtx insns, rtx target, struct resources *res)
                {
                  HARD_REG_SET extra_live;
 
-                 REG_SET_TO_HARD_REG_SET (extra_live, df_get_live_in (bb));
+                 REG_SET_TO_HARD_REG_SET (extra_live, DF_LR_IN (bb));
                  IOR_HARD_REG_SET (current_live_regs, extra_live);
                }
            }
@@ -1143,7 +1147,7 @@ init_resource_info (rtx epilogue_insn)
   if (frame_pointer_needed)
     {
       SET_HARD_REG_BIT (end_of_function_needs.regs, FRAME_POINTER_REGNUM);
-#if HARD_FRAME_POINTER_REGNUM != FRAME_POINTER_REGNUM
+#if !HARD_FRAME_POINTER_IS_FRAME_POINTER
       SET_HARD_REG_BIT (end_of_function_needs.regs, HARD_FRAME_POINTER_REGNUM);
 #endif
       if (! EXIT_IGNORE_STACK