Commit f773c2bd by Anatoly Sokolov Committed by Anatoly Sokolov

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
parent 458653cc
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> 2011-03-18 Joseph Myers <joseph@codesourcery.com>
* c-decl.c (diagnose_mismatched_decls): Give an error for * c-decl.c (diagnose_mismatched_decls): Give an error for
......
...@@ -1312,7 +1312,7 @@ insert_save (struct insn_chain *chain, int before_p, int regno, ...@@ -1312,7 +1312,7 @@ insert_save (struct insn_chain *chain, int before_p, int regno,
static int static int
add_used_regs_1 (rtx *loc, void *data) add_used_regs_1 (rtx *loc, void *data)
{ {
int regno, i; unsigned int regno;
regset live; regset live;
rtx x; rtx x;
...@@ -1321,11 +1321,10 @@ add_used_regs_1 (rtx *loc, void *data) ...@@ -1321,11 +1321,10 @@ add_used_regs_1 (rtx *loc, void *data)
if (REG_P (x)) if (REG_P (x))
{ {
regno = REGNO (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]; 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; return 0;
} }
......
/* Control flow optimization code for GNU compiler. /* Control flow optimization code for GNU compiler.
Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 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. Free Software Foundation, Inc.
This file is part of GCC. This file is part of GCC.
...@@ -208,13 +208,11 @@ mark_effect (rtx exp, regset nonequal) ...@@ -208,13 +208,11 @@ mark_effect (rtx exp, regset nonequal)
{ {
dest = XEXP (exp, 0); dest = XEXP (exp, 0);
regno = REGNO (dest); regno = REGNO (dest);
CLEAR_REGNO_REG_SET (nonequal, regno); if (HARD_REGISTER_NUM_P (regno))
if (regno < FIRST_PSEUDO_REGISTER) bitmap_clear_range (nonequal, regno,
{ hard_regno_nregs[regno][GET_MODE (dest)]);
int n = hard_regno_nregs[regno][GET_MODE (dest)]; else
while (--n > 0) bitmap_clear_bit (nonequal, regno);
CLEAR_REGNO_REG_SET (nonequal, regno + n);
}
} }
return false; return false;
...@@ -227,13 +225,11 @@ mark_effect (rtx exp, regset nonequal) ...@@ -227,13 +225,11 @@ mark_effect (rtx exp, regset nonequal)
if (!REG_P (dest)) if (!REG_P (dest))
return true; return true;
regno = REGNO (dest); regno = REGNO (dest);
SET_REGNO_REG_SET (nonequal, regno); if (HARD_REGISTER_NUM_P (regno))
if (regno < FIRST_PSEUDO_REGISTER) bitmap_set_range (nonequal, regno,
{ hard_regno_nregs[regno][GET_MODE (dest)]);
int n = hard_regno_nregs[regno][GET_MODE (dest)]; else
while (--n > 0) bitmap_set_bit (nonequal, regno);
SET_REGNO_REG_SET (nonequal, regno + n);
}
return false; return false;
default: default:
......
/* Standard problems for dataflow support routines. /* Standard problems for dataflow support routines.
Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 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 Originally contributed by Michael P. Hayes
(m.hayes@elec.canterbury.ac.nz, mhayes@redhat.com) (m.hayes@elec.canterbury.ac.nz, mhayes@redhat.com)
Major rewrite contributed by Danny Berlin (dberlin@dberlin.org) 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) ...@@ -3774,12 +3774,9 @@ df_simulate_one_insn_forwards (basic_block bb, rtx insn, bitmap live)
{ {
rtx reg = XEXP (link, 0); rtx reg = XEXP (link, 0);
int regno = REGNO (reg); int regno = REGNO (reg);
if (regno < FIRST_PSEUDO_REGISTER) if (HARD_REGISTER_NUM_P (regno))
{ bitmap_clear_range (live, regno,
int n = hard_regno_nregs[regno][GET_MODE (reg)]; hard_regno_nregs[regno][GET_MODE (reg)]);
while (--n >= 0)
bitmap_clear_bit (live, regno + n);
}
else else
bitmap_clear_bit (live, regno); bitmap_clear_bit (live, regno);
} }
......
...@@ -1728,12 +1728,11 @@ look_for_hardregs (rtx x, const_rtx pat ATTRIBUTE_UNUSED, void *data) ...@@ -1728,12 +1728,11 @@ look_for_hardregs (rtx x, const_rtx pat ATTRIBUTE_UNUSED, void *data)
bitmap regs_set = (bitmap) data; bitmap regs_set = (bitmap) data;
if (REG_P (x) if (REG_P (x)
&& REGNO (x) < FIRST_PSEUDO_REGISTER) && HARD_REGISTER_P (x))
{ {
int regno = REGNO (x); unsigned int regno = REGNO (x);
int n = hard_regno_nregs[regno][GET_MODE (x)]; bitmap_set_range (regs_set, regno,
while (--n >= 0) hard_regno_nregs[regno][GET_MODE (x)]);
bitmap_set_bit (regs_set, regno + n);
} }
} }
......
/* Instruction scheduling pass. /* Instruction scheduling pass.
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 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. Free Software Foundation, Inc.
Contributed by Michael Tiemann (tiemann@cygnus.com) Enhanced by, Contributed by Michael Tiemann (tiemann@cygnus.com) Enhanced by,
and currently maintained by, Jim Wilson (wilson@cygnus.com) and currently maintained by, Jim Wilson (wilson@cygnus.com)
...@@ -672,11 +672,11 @@ setup_ref_regs (rtx x) ...@@ -672,11 +672,11 @@ setup_ref_regs (rtx x)
if (REG_P (x)) if (REG_P (x))
{ {
regno = REGNO (x); regno = REGNO (x);
if (regno >= FIRST_PSEUDO_REGISTER) if (HARD_REGISTER_NUM_P (regno))
bitmap_set_bit (region_ref_regs, REGNO (x)); bitmap_set_range (region_ref_regs, regno,
hard_regno_nregs[regno][GET_MODE (x)]);
else else
for (i = hard_regno_nregs[regno][GET_MODE (x)] - 1; i >= 0; i--) bitmap_set_bit (region_ref_regs, REGNO (x));
bitmap_set_bit (region_ref_regs, regno + i);
return; return;
} }
fmt = GET_RTX_FORMAT (code); fmt = GET_RTX_FORMAT (code);
......
/* Instruction scheduling pass. /* Instruction scheduling pass.
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 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. Free Software Foundation, Inc.
Contributed by Michael Tiemann (tiemann@cygnus.com) Enhanced by, Contributed by Michael Tiemann (tiemann@cygnus.com) Enhanced by,
and currently maintained by, Jim Wilson (wilson@cygnus.com) and currently maintained by, Jim Wilson (wilson@cygnus.com)
...@@ -1762,29 +1762,18 @@ update_live_1 (int src, rtx x) ...@@ -1762,29 +1762,18 @@ update_live_1 (int src, rtx x)
regno = REGNO (reg); 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) for (i = 0; i < candidate_table[src].update_bbs.nr_members; i++)
{
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++) 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);
} }
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment