bitmap.c (bitmap_set_range): Handle count==1 specially.
authorRichard Sandiford <richard.sandiford@arm.com>
Tue, 19 May 2015 07:11:37 +0000 (07:11 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Tue, 19 May 2015 07:11:37 +0000 (07:11 +0000)
gcc/
* bitmap.c (bitmap_set_range): Handle count==1 specially.
(bitmap_clear_range): Likewise.
* cfgcleanup.c (mark_effect): Use bitmap_clear_range and
bitmap_set_range unconditionally.
* df-problems.c (df_simulate_one_insn_forwards): Likewise.
* df-scan.c (df_mark_reg): Likewise.
* haifa-sched.c (setup_ref_regs): Likewise.
* sched-rgn.c (update_live_1): Likewise.

From-SVN: r223344

gcc/ChangeLog
gcc/bitmap.c
gcc/cfgcleanup.c
gcc/df-problems.c
gcc/df-scan.c
gcc/haifa-sched.c
gcc/sched-rgn.c

index 1cb488ece91f2094b3fc5186faea9cfcbe4ffec7..c87f6453a5f223d3b2e1397330a93fd87ef7b871 100644 (file)
@@ -1,3 +1,14 @@
+2015-05-19  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * bitmap.c (bitmap_set_range): Handle count==1 specially.
+       (bitmap_clear_range): Likewise.
+       * cfgcleanup.c (mark_effect): Use bitmap_clear_range and
+       bitmap_set_range unconditionally.
+       * df-problems.c (df_simulate_one_insn_forwards): Likewise.
+       * df-scan.c (df_mark_reg): Likewise.
+       * haifa-sched.c (setup_ref_regs): Likewise.
+       * sched-rgn.c (update_live_1): Likewise.
+
 2015-05-19  Richard Sandiford  <richard.sandiford@arm.com>
 
        * regs.h (END_HARD_REGNO): Delete.
index 66066a6859742eeb9aaf959add077da68fbfa274..58f443243a2068fc916a5092d4869e8793c8d11e 100644 (file)
@@ -1212,6 +1212,12 @@ bitmap_set_range (bitmap head, unsigned int start, unsigned int count)
   if (!count)
     return;
 
+  if (count == 1)
+    {
+      bitmap_set_bit (head, start);
+      return;
+    }
+
   first_index = start / BITMAP_ELEMENT_ALL_BITS;
   end_bit_plus1 = start + count;
   last_index = (end_bit_plus1 - 1) / BITMAP_ELEMENT_ALL_BITS;
@@ -1311,6 +1317,12 @@ bitmap_clear_range (bitmap head, unsigned int start, unsigned int count)
   if (!count)
     return;
 
+  if (count == 1)
+    {
+      bitmap_clear_bit (head, start);
+      return;
+    }
+
   first_index = start / BITMAP_ELEMENT_ALL_BITS;
   end_bit_plus1 = start + count;
   last_index = (end_bit_plus1 - 1) / BITMAP_ELEMENT_ALL_BITS;
index 0a6766ba41c880450e85203c0f72594febc85b8d..cd12b504e18f1bfa9fb638fc376c98942f166fdc 100644 (file)
@@ -222,22 +222,15 @@ try_simplify_condjump (basic_block cbranch_block)
 static bool
 mark_effect (rtx exp, regset nonequal)
 {
-  int regno;
   rtx dest;
   switch (GET_CODE (exp))
     {
       /* In case we do clobber the register, mark it as equal, as we know the
         value is dead so it don't have to match.  */
     case CLOBBER:
-      if (REG_P (XEXP (exp, 0)))
-       {
-         dest = XEXP (exp, 0);
-         regno = REGNO (dest);
-         if (HARD_REGISTER_NUM_P (regno))
-           bitmap_clear_range (nonequal, regno, REG_NREGS (dest));
-         else
-           bitmap_clear_bit (nonequal, regno);
-       }
+      dest = XEXP (exp, 0);
+      if (REG_P (dest))
+       bitmap_clear_range (nonequal, REGNO (dest), REG_NREGS (dest));
       return false;
 
     case SET:
@@ -248,11 +241,7 @@ mark_effect (rtx exp, regset nonequal)
        return false;
       if (!REG_P (dest))
        return true;
-      regno = REGNO (dest);
-      if (HARD_REGISTER_NUM_P (regno))
-       bitmap_set_range (nonequal, regno, REG_NREGS (dest));
-      else
-       bitmap_set_bit (nonequal, regno);
+      bitmap_set_range (nonequal, REGNO (dest), REG_NREGS (dest));
       return false;
 
     default:
index aca8c749a6e91fef962b35b393178e378e250603..25cfe08618e1cbe1a91a4678e9bd1b86388fdf81 100644 (file)
@@ -3574,11 +3574,7 @@ df_simulate_one_insn_forwards (basic_block bb, rtx_insn *insn, bitmap live)
        case REG_UNUSED:
          {
            rtx reg = XEXP (link, 0);
-           int regno = REGNO (reg);
-           if (HARD_REGISTER_NUM_P (regno))
-             bitmap_clear_range (live, regno, REG_NREGS (reg));
-           else
-             bitmap_clear_bit (live, regno);
+           bitmap_clear_range (live, REGNO (reg), REG_NREGS (reg));
          }
          break;
        default:
index 7aaa0f964ca5296fe909de04c328b64d357f8873..c831730bc2143baf4f05def5de001e8b95f48417 100644 (file)
@@ -3518,15 +3518,7 @@ df_get_eh_block_artificial_uses (bitmap eh_block_artificial_uses)
 static void
 df_mark_reg (rtx reg, void *vset)
 {
-  bitmap set = (bitmap) vset;
-  int regno = REGNO (reg);
-
-  gcc_assert (GET_MODE (reg) != BLKmode);
-
-  if (regno < FIRST_PSEUDO_REGISTER)
-    bitmap_set_range (set, regno, REG_NREGS (reg));
-  else
-    bitmap_set_bit (set, regno);
+  bitmap_set_range ((bitmap) vset, REGNO (reg), REG_NREGS (reg));
 }
 
 
index af9b364052ed2e1286b0bc0c50eaf482d0df0f2d..bf8ce0bb7c42823086dfc52f3259be04bb93dbac 100644 (file)
@@ -1032,17 +1032,13 @@ initiate_reg_pressure_info (bitmap live)
 static void
 setup_ref_regs (rtx x)
 {
-  int i, j, regno;
+  int i, j;
   const RTX_CODE code = GET_CODE (x);
   const char *fmt;
 
   if (REG_P (x))
     {
-      regno = REGNO (x);
-      if (HARD_REGISTER_NUM_P (regno))
-       bitmap_set_range (region_ref_regs, regno, REG_NREGS (x));
-      else
-       bitmap_set_bit (region_ref_regs, REGNO (x));
+      bitmap_set_range (region_ref_regs, REGNO (x), REG_NREGS (x));
       return;
     }
   fmt = GET_RTX_FORMAT (code);
index 4dac7e284e63585bd25fdf9327070ba57eace915..fd53a3f8621853a2e756c51529ea701f5d0c8e92 100644 (file)
@@ -1801,11 +1801,7 @@ update_live_1 (int src, rtx x)
       for (i = 0; i < candidate_table[src].update_bbs.nr_members; i++)
        {
          basic_block b = candidate_table[src].update_bbs.first_member[i];
-
-         if (HARD_REGISTER_NUM_P (regno))
-           bitmap_set_range (df_get_live_in (b), regno, REG_NREGS (reg));
-         else
-           bitmap_set_bit (df_get_live_in (b), regno);
+         bitmap_set_range (df_get_live_in (b), regno, REG_NREGS (reg));
        }
     }
 }