cfgcleanup.c (mark_effect): Use bitmap_set_range/bitmap_clear_range instead of loop.
authorAnatoly Sokolov <aesok@post.ru>
Sat, 19 Mar 2011 17:33:45 +0000 (20:33 +0300)
committerAnatoly Sokolov <aesok@gcc.gnu.org>
Sat, 19 Mar 2011 17:33:45 +0000 (20:33 +0300)
* cfgcleanup.c (mark_effect): Use bitmap_set_range/bitmap_clear_range
instead of loop. Use HARD_REGISTER_NUM_P predicate.
* haifa-sched.c (setup_ref_regs): Ditto.
* caller-save.c (add_used_regs_1): Ditto.
* dse.c (look_for_hardregs): Ditto.
* df-problems.c (df_simulate_one_insn_forwards): Ditto.
* sched-rgn.c (check_live_1): Ditto.

From-SVN: r171183

gcc/ChangeLog
gcc/caller-save.c
gcc/cfgcleanup.c
gcc/df-problems.c
gcc/dse.c
gcc/haifa-sched.c
gcc/sched-rgn.c

index 7c2b4d73711ada60d7b8ab885da8f45e725f693f..bf32ebb9e50c7e93676cc6460582d1c6f93261a3 100644 (file)
@@ -1,3 +1,13 @@
+2011-03-19  Anatoly Sokolov  <aesok@post.ru>
+
+       * cfgcleanup.c (mark_effect): Use bitmap_set_range/bitmap_clear_range
+       instead of loop. Use HARD_REGISTER_NUM_P predicate.
+       * haifa-sched.c (setup_ref_regs): Ditto.
+       * caller-save.c (add_used_regs_1): Ditto.
+       * dse.c (look_for_hardregs): Ditto.
+       * df-problems.c (df_simulate_one_insn_forwards): Ditto.
+       * sched-rgn.c (check_live_1): Ditto.
+
 2011-03-18  Joseph Myers  <joseph@codesourcery.com>
 
        * c-decl.c (diagnose_mismatched_decls): Give an error for
index 160d2e9117d19f694c7a992fbe0535a017496698..f32d05ffde48c82f0ea31a6e889174e746d3a124 100644 (file)
@@ -1312,7 +1312,7 @@ insert_save (struct insn_chain *chain, int before_p, int regno,
 static int
 add_used_regs_1 (rtx *loc, void *data)
 {
-  int regno, i;
+  unsigned int regno;
   regset live;
   rtx x;
 
@@ -1321,11 +1321,10 @@ add_used_regs_1 (rtx *loc, void *data)
   if (REG_P (x))
     {
       regno = REGNO (x);
-      if (!HARD_REGISTER_NUM_P (regno))
+      if (HARD_REGISTER_NUM_P (regno))
+       bitmap_set_range (live, regno, hard_regno_nregs[regno][GET_MODE (x)]);
+      else
        regno = reg_renumber[regno];
-      if (regno >= 0)
-       for (i = hard_regno_nregs[regno][GET_MODE (x)] - 1; i >= 0; i--)
-         SET_REGNO_REG_SET (live, regno + i);
     }
   return 0;
 }
index aaa0ea5d232e955a4de91c33a87a1251add41383..266fda7f1aac51c2636e9241fd729cb78dda1144 100644 (file)
@@ -1,6 +1,6 @@
 /* Control flow optimization code for GNU compiler.
    Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
-   1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2010
+   1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2010, 2011
    Free Software Foundation, Inc.
 
 This file is part of GCC.
@@ -208,13 +208,11 @@ mark_effect (rtx exp, regset nonequal)
        {
          dest = XEXP (exp, 0);
          regno = REGNO (dest);
-         CLEAR_REGNO_REG_SET (nonequal, regno);
-         if (regno < FIRST_PSEUDO_REGISTER)
-           {
-             int n = hard_regno_nregs[regno][GET_MODE (dest)];
-             while (--n > 0)
-               CLEAR_REGNO_REG_SET (nonequal, regno + n);
-           }
+         if (HARD_REGISTER_NUM_P (regno))
+           bitmap_clear_range (nonequal, regno,
+                               hard_regno_nregs[regno][GET_MODE (dest)]);
+         else
+           bitmap_clear_bit (nonequal, regno);
        }
       return false;
 
@@ -227,13 +225,11 @@ mark_effect (rtx exp, regset nonequal)
       if (!REG_P (dest))
        return true;
       regno = REGNO (dest);
-      SET_REGNO_REG_SET (nonequal, regno);
-      if (regno < FIRST_PSEUDO_REGISTER)
-       {
-         int n = hard_regno_nregs[regno][GET_MODE (dest)];
-         while (--n > 0)
-           SET_REGNO_REG_SET (nonequal, regno + n);
-       }
+      if (HARD_REGISTER_NUM_P (regno))
+       bitmap_set_range (nonequal, regno,
+                         hard_regno_nregs[regno][GET_MODE (dest)]);
+      else
+       bitmap_set_bit (nonequal, regno);
       return false;
 
     default:
index 729cad5f02330130f0d9b94c7904b47aa030c27d..0f398ba3aa4bf87ea12846b888ac630e8bc0ecce 100644 (file)
@@ -1,6 +1,6 @@
 /* Standard problems for dataflow support routines.
    Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
-   2008, 2009, 2010 Free Software Foundation, Inc.
+   2008, 2009, 2010, 2011 Free Software Foundation, Inc.
    Originally contributed by Michael P. Hayes
              (m.hayes@elec.canterbury.ac.nz, mhayes@redhat.com)
    Major rewrite contributed by Danny Berlin (dberlin@dberlin.org)
@@ -3774,12 +3774,9 @@ df_simulate_one_insn_forwards (basic_block bb, rtx insn, bitmap live)
          {
            rtx reg = XEXP (link, 0);
            int regno = REGNO (reg);
-           if (regno < FIRST_PSEUDO_REGISTER)
-             {
-               int n = hard_regno_nregs[regno][GET_MODE (reg)];
-               while (--n >= 0)
-                 bitmap_clear_bit (live, regno + n);
-             }
+           if (HARD_REGISTER_NUM_P (regno))
+             bitmap_clear_range (live, regno,
+                                 hard_regno_nregs[regno][GET_MODE (reg)]);
            else
              bitmap_clear_bit (live, regno);
          }
index a15b7351fcc163ee5e63054879fdde27b90e45ea..dee4c76d4300c1d65cc771b73ef11b45c4ddb1f3 100644 (file)
--- a/gcc/dse.c
+++ b/gcc/dse.c
@@ -1728,12 +1728,11 @@ look_for_hardregs (rtx x, const_rtx pat ATTRIBUTE_UNUSED, void *data)
   bitmap regs_set = (bitmap) data;
 
   if (REG_P (x)
-      && REGNO (x) < FIRST_PSEUDO_REGISTER)
+      && HARD_REGISTER_P (x))
     {
-      int regno = REGNO (x);
-      int n = hard_regno_nregs[regno][GET_MODE (x)];
-      while (--n >= 0)
-       bitmap_set_bit (regs_set, regno + n);
+      unsigned int regno = REGNO (x);
+      bitmap_set_range (regs_set, regno,
+                       hard_regno_nregs[regno][GET_MODE (x)]);
     }
 }
 
index e16561f4cb9c0446f5889ce5abe479936d8b6df4..ea69254fc9544b630036707b383b303638638652 100644 (file)
@@ -1,6 +1,6 @@
 /* Instruction scheduling pass.
    Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
-   2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+   2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
    Free Software Foundation, Inc.
    Contributed by Michael Tiemann (tiemann@cygnus.com) Enhanced by,
    and currently maintained by, Jim Wilson (wilson@cygnus.com)
@@ -672,11 +672,11 @@ setup_ref_regs (rtx x)
   if (REG_P (x))
     {
       regno = REGNO (x);
-      if (regno >= FIRST_PSEUDO_REGISTER)
-       bitmap_set_bit (region_ref_regs, REGNO (x));
+      if (HARD_REGISTER_NUM_P (regno))
+       bitmap_set_range (region_ref_regs, regno,
+                         hard_regno_nregs[regno][GET_MODE (x)]);
       else
-       for (i = hard_regno_nregs[regno][GET_MODE (x)] - 1; i >= 0; i--)
-         bitmap_set_bit (region_ref_regs, regno + i);
+       bitmap_set_bit (region_ref_regs, REGNO (x));
       return;
     }
   fmt = GET_RTX_FORMAT (code);
index 6c4fd46a50f0e2d11d679d32609b5cc24200411f..be2a1e9a211fc6d08300b5b7b4b58dacd7c7c987 100644 (file)
@@ -1,6 +1,6 @@
 /* Instruction scheduling pass.
    Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
-   2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2010
+   2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2010, 2011
    Free Software Foundation, Inc.
    Contributed by Michael Tiemann (tiemann@cygnus.com) Enhanced by,
    and currently maintained by, Jim Wilson (wilson@cygnus.com)
@@ -1762,29 +1762,18 @@ update_live_1 (int src, rtx x)
 
   regno = REGNO (reg);
 
-  if (regno >= FIRST_PSEUDO_REGISTER || !global_regs[regno])
+  if (! HARD_REGISTER_NUM_P (regno)
+      || !global_regs[regno])
     {
-      if (regno < FIRST_PSEUDO_REGISTER)
-       {
-         int j = hard_regno_nregs[regno][GET_MODE (reg)];
-         while (--j >= 0)
-           {
-             for (i = 0; i < candidate_table[src].update_bbs.nr_members; i++)
-               {
-                 basic_block b = candidate_table[src].update_bbs.first_member[i];
-
-                 SET_REGNO_REG_SET (df_get_live_in (b), regno + j);
-               }
-           }
-       }
-      else
+      for (i = 0; i < candidate_table[src].update_bbs.nr_members; i++)
        {
-         for (i = 0; i < candidate_table[src].update_bbs.nr_members; i++)
-           {
-             basic_block b = candidate_table[src].update_bbs.first_member[i];
+         basic_block b = candidate_table[src].update_bbs.first_member[i];
 
-             SET_REGNO_REG_SET (df_get_live_in (b), regno);
-           }
+         if (HARD_REGISTER_NUM_P (regno))
+           bitmap_set_range (df_get_live_in (b), regno,
+                             hard_regno_nregs[regno][GET_MODE (reg)]);
+         else
+           bitmap_set_bit (df_get_live_in (b), regno);
        }
     }
 }