aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorAnatoly Sokolov <aesok@post.ru>2011-03-19 20:33:45 +0300
committerAnatoly Sokolov <aesok@gcc.gnu.org>2011-03-19 20:33:45 +0300
commitf773c2bd761b15c79456aae0390b854ab5a7a1cd (patch)
tree65a46d02e15ddf767df696b9661692c68608064a /gcc
parent458653cc067362d84835bc39bd849dcdb4c13127 (diff)
downloadgcc-f773c2bd761b15c79456aae0390b854ab5a7a1cd.zip
gcc-f773c2bd761b15c79456aae0390b854ab5a7a1cd.tar.gz
gcc-f773c2bd761b15c79456aae0390b854ab5a7a1cd.tar.bz2
cfgcleanup.c (mark_effect): Use bitmap_set_range/bitmap_clear_range instead of loop.
* 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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog10
-rw-r--r--gcc/caller-save.c9
-rw-r--r--gcc/cfgcleanup.c26
-rw-r--r--gcc/df-problems.c11
-rw-r--r--gcc/dse.c9
-rw-r--r--gcc/haifa-sched.c10
-rw-r--r--gcc/sched-rgn.c31
7 files changed, 48 insertions, 58 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 7c2b4d7..bf32ebb 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/caller-save.c b/gcc/caller-save.c
index 160d2e9..f32d05f 100644
--- a/gcc/caller-save.c
+++ b/gcc/caller-save.c
@@ -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;
}
diff --git a/gcc/cfgcleanup.c b/gcc/cfgcleanup.c
index aaa0ea5..266fda7 100644
--- a/gcc/cfgcleanup.c
+++ b/gcc/cfgcleanup.c
@@ -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:
diff --git a/gcc/df-problems.c b/gcc/df-problems.c
index 729cad5..0f398ba 100644
--- a/gcc/df-problems.c
+++ b/gcc/df-problems.c
@@ -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);
}
diff --git a/gcc/dse.c b/gcc/dse.c
index a15b735..dee4c76 100644
--- 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)]);
}
}
diff --git a/gcc/haifa-sched.c b/gcc/haifa-sched.c
index e16561f..ea69254 100644
--- a/gcc/haifa-sched.c
+++ b/gcc/haifa-sched.c
@@ -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);
diff --git a/gcc/sched-rgn.c b/gcc/sched-rgn.c
index 6c4fd46a..be2a1e9 100644
--- a/gcc/sched-rgn.c
+++ b/gcc/sched-rgn.c
@@ -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);
}
}
}