From: Richard Sandiford Date: Tue, 19 May 2015 07:11:37 +0000 (+0000) Subject: bitmap.c (bitmap_set_range): Handle count==1 specially. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=07a737f333f0d4352984664c1ab6d344f6e2c88c;p=gcc.git 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 1cb488ece91..c87f6453a5f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,14 @@ +2015-05-19 Richard Sandiford + + * 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 * regs.h (END_HARD_REGNO): Delete. diff --git a/gcc/bitmap.c b/gcc/bitmap.c index 66066a68597..58f443243a2 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 0a6766ba41c..cd12b504e18 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 aca8c749a6e..25cfe08618e 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 7aaa0f964ca..c831730bc21 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 af9b364052e..bf8ce0bb7c4 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 4dac7e284e6..fd53a3f8621 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)); } } }