aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Sandiford <richard.sandiford@arm.com>2015-05-19 07:11:37 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2015-05-19 07:11:37 +0000
commit07a737f333f0d4352984664c1ab6d344f6e2c88c (patch)
treeeb76c88033453d389b51706d4861488d574dcaf2
parent72d19505eef64d2d9c37d8aabf1fffb3267d5d0e (diff)
downloadgcc-07a737f333f0d4352984664c1ab6d344f6e2c88c.zip
gcc-07a737f333f0d4352984664c1ab6d344f6e2c88c.tar.gz
gcc-07a737f333f0d4352984664c1ab6d344f6e2c88c.tar.bz2
bitmap.c (bitmap_set_range): Handle count==1 specially.
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
-rw-r--r--gcc/ChangeLog11
-rw-r--r--gcc/bitmap.c12
-rw-r--r--gcc/cfgcleanup.c19
-rw-r--r--gcc/df-problems.c6
-rw-r--r--gcc/df-scan.c10
-rw-r--r--gcc/haifa-sched.c8
-rw-r--r--gcc/sched-rgn.c6
7 files changed, 32 insertions, 40 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 1cb488e..c87f645 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,16 @@
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.
(END_REGNO): Move to...
* rtl.h: ...here.
diff --git a/gcc/bitmap.c b/gcc/bitmap.c
index 66066a6..58f4432 100644
--- a/gcc/bitmap.c
+++ b/gcc/bitmap.c
@@ -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;
diff --git a/gcc/cfgcleanup.c b/gcc/cfgcleanup.c
index 0a6766b..cd12b50 100644
--- a/gcc/cfgcleanup.c
+++ b/gcc/cfgcleanup.c
@@ -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:
diff --git a/gcc/df-problems.c b/gcc/df-problems.c
index aca8c74..25cfe08 100644
--- a/gcc/df-problems.c
+++ b/gcc/df-problems.c
@@ -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:
diff --git a/gcc/df-scan.c b/gcc/df-scan.c
index 7aaa0f9..c831730 100644
--- a/gcc/df-scan.c
+++ b/gcc/df-scan.c
@@ -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));
}
diff --git a/gcc/haifa-sched.c b/gcc/haifa-sched.c
index af9b364..bf8ce0b 100644
--- a/gcc/haifa-sched.c
+++ b/gcc/haifa-sched.c
@@ -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);
diff --git a/gcc/sched-rgn.c b/gcc/sched-rgn.c
index 4dac7e2..fd53a3f 100644
--- a/gcc/sched-rgn.c
+++ b/gcc/sched-rgn.c
@@ -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));
}
}
}