Commit 53d1bae9 by Richard Sandiford Committed by Richard Sandiford

cfgcleanup.c (mentions_nonequal_regs): Use END_REGNO.

gcc/
	* cfgcleanup.c (mentions_nonequal_regs): Use END_REGNO.
	* dse.c (note_add_store): Likewise.
	* ira-lives.c (mark_hard_reg_dead): Likewise.
	* loop-invariant.c (mark_reg_store): Likewise.
	(mark_reg_death): Likewise.
	* postreload.c (reload_combine): Likewise.
	(reload_combine_note_store): Likewise.
	(reload_combine_note_use): Likewise.
	* recog.c (peep2_reg_dead_p): Likewise.

From-SVN: r223336
parent 8a480dc3
2015-05-19 Richard Sandiford <richard.sandiford@arm.com>
* cfgcleanup.c (mentions_nonequal_regs): Use END_REGNO.
* dse.c (note_add_store): Likewise.
* ira-lives.c (mark_hard_reg_dead): Likewise.
* loop-invariant.c (mark_reg_store): Likewise.
(mark_reg_death): Likewise.
* postreload.c (reload_combine): Likewise.
(reload_combine_note_store): Likewise.
(reload_combine_note_use): Likewise.
* recog.c (peep2_reg_dead_p): Likewise.
2015-05-19 Alan Modra <amodra@gmail.com> 2015-05-19 Alan Modra <amodra@gmail.com>
* config/rs6000/predicates.md (gpc_reg_operand): Don't allow all * config/rs6000/predicates.md (gpc_reg_operand): Don't allow all
......
...@@ -272,16 +272,10 @@ mentions_nonequal_regs (const_rtx x, regset nonequal) ...@@ -272,16 +272,10 @@ mentions_nonequal_regs (const_rtx x, regset nonequal)
const_rtx x = *iter; const_rtx x = *iter;
if (REG_P (x)) if (REG_P (x))
{ {
unsigned int regno = REGNO (x); unsigned int end_regno = END_REGNO (x);
for (unsigned int regno = REGNO (x); regno < end_regno; ++regno)
if (REGNO_REG_SET_P (nonequal, regno)) if (REGNO_REG_SET_P (nonequal, regno))
return true; return true;
if (regno < FIRST_PSEUDO_REGISTER)
{
int n = hard_regno_nregs[regno][GET_MODE (x)];
while (--n > 0)
if (REGNO_REG_SET_P (nonequal, regno + n))
return true;
}
} }
} }
return false; return false;
......
...@@ -855,7 +855,6 @@ note_add_store (rtx loc, const_rtx expr ATTRIBUTE_UNUSED, void *data) ...@@ -855,7 +855,6 @@ note_add_store (rtx loc, const_rtx expr ATTRIBUTE_UNUSED, void *data)
{ {
rtx_insn *insn; rtx_insn *insn;
note_add_store_info *info = (note_add_store_info *) data; note_add_store_info *info = (note_add_store_info *) data;
int r, n;
if (!REG_P (loc)) if (!REG_P (loc))
return; return;
...@@ -878,10 +877,9 @@ note_add_store (rtx loc, const_rtx expr ATTRIBUTE_UNUSED, void *data) ...@@ -878,10 +877,9 @@ note_add_store (rtx loc, const_rtx expr ATTRIBUTE_UNUSED, void *data)
return; return;
} }
/* Now check if this is a live fixed register. */ /* Now check if this is a live fixed register. */
r = REGNO (loc); unsigned int end_regno = END_REGNO (loc);
n = hard_regno_nregs[r][GET_MODE (loc)]; for (unsigned int regno = REGNO (loc); regno < end_regno; ++regno)
while (--n >= 0) if (REGNO_REG_SET_P (info->fixed_regs_live, regno))
if (REGNO_REG_SET_P (info->fixed_regs_live, r+n))
info->failure = true; info->failure = true;
} }
......
...@@ -478,7 +478,7 @@ mark_hard_reg_dead (rtx reg) ...@@ -478,7 +478,7 @@ mark_hard_reg_dead (rtx reg)
if (! TEST_HARD_REG_BIT (ira_no_alloc_regs, regno)) if (! TEST_HARD_REG_BIT (ira_no_alloc_regs, regno))
{ {
int last = regno + hard_regno_nregs[regno][GET_MODE (reg)]; int last = END_REGNO (reg);
enum reg_class aclass, pclass; enum reg_class aclass, pclass;
while (regno < last) while (regno < last)
......
...@@ -1883,8 +1883,6 @@ static void ...@@ -1883,8 +1883,6 @@ static void
mark_reg_store (rtx reg, const_rtx setter ATTRIBUTE_UNUSED, mark_reg_store (rtx reg, const_rtx setter ATTRIBUTE_UNUSED,
void *data ATTRIBUTE_UNUSED) void *data ATTRIBUTE_UNUSED)
{ {
int regno;
if (GET_CODE (reg) == SUBREG) if (GET_CODE (reg) == SUBREG)
reg = SUBREG_REG (reg); reg = SUBREG_REG (reg);
...@@ -1893,20 +1891,9 @@ mark_reg_store (rtx reg, const_rtx setter ATTRIBUTE_UNUSED, ...@@ -1893,20 +1891,9 @@ mark_reg_store (rtx reg, const_rtx setter ATTRIBUTE_UNUSED,
regs_set[n_regs_set++] = reg; regs_set[n_regs_set++] = reg;
regno = REGNO (reg); unsigned int end_regno = END_REGNO (reg);
for (unsigned int regno = REGNO (reg); regno < end_regno; ++regno)
if (regno >= FIRST_PSEUDO_REGISTER)
mark_regno_live (regno);
else
{
int last = regno + hard_regno_nregs[regno][GET_MODE (reg)];
while (regno < last)
{
mark_regno_live (regno); mark_regno_live (regno);
regno++;
}
}
} }
/* Mark clobbering register REG. */ /* Mark clobbering register REG. */
...@@ -1921,20 +1908,9 @@ mark_reg_clobber (rtx reg, const_rtx setter, void *data) ...@@ -1921,20 +1908,9 @@ mark_reg_clobber (rtx reg, const_rtx setter, void *data)
static void static void
mark_reg_death (rtx reg) mark_reg_death (rtx reg)
{ {
int regno = REGNO (reg); unsigned int end_regno = END_REGNO (reg);
for (unsigned int regno = REGNO (reg); regno < end_regno; ++regno)
if (regno >= FIRST_PSEUDO_REGISTER)
mark_regno_death (regno);
else
{
int last = regno + hard_regno_nregs[regno][GET_MODE (reg)];
while (regno < last)
{
mark_regno_death (regno); mark_regno_death (regno);
regno++;
}
}
} }
/* Mark occurrence of registers in X for the current loop. */ /* Mark occurrence of registers in X for the current loop. */
......
...@@ -1374,12 +1374,8 @@ reload_combine (void) ...@@ -1374,12 +1374,8 @@ reload_combine (void)
if ((GET_CODE (setuse) == USE || GET_CODE (setuse) == CLOBBER) if ((GET_CODE (setuse) == USE || GET_CODE (setuse) == CLOBBER)
&& REG_P (usage_rtx)) && REG_P (usage_rtx))
{ {
unsigned int i; unsigned int end_regno = END_REGNO (usage_rtx);
unsigned int start_reg = REGNO (usage_rtx); for (unsigned int i = REGNO (usage_rtx); i < end_regno; ++i)
unsigned int num_regs
= hard_regno_nregs[start_reg][GET_MODE (usage_rtx)];
unsigned int end_reg = start_reg + num_regs - 1;
for (i = start_reg; i <= end_reg; i++)
if (GET_CODE (XEXP (link, 0)) == CLOBBER) if (GET_CODE (XEXP (link, 0)) == CLOBBER)
{ {
reg_state[i].use_index = RELOAD_COMBINE_MAX_USES; reg_state[i].use_index = RELOAD_COMBINE_MAX_USES;
...@@ -1461,9 +1457,8 @@ reload_combine_note_store (rtx dst, const_rtx set, void *data ATTRIBUTE_UNUSED) ...@@ -1461,9 +1457,8 @@ reload_combine_note_store (rtx dst, const_rtx set, void *data ATTRIBUTE_UNUSED)
|| GET_CODE (dst) == PRE_DEC || GET_CODE (dst) == POST_DEC || GET_CODE (dst) == PRE_DEC || GET_CODE (dst) == POST_DEC
|| GET_CODE (dst) == PRE_MODIFY || GET_CODE (dst) == POST_MODIFY) || GET_CODE (dst) == PRE_MODIFY || GET_CODE (dst) == POST_MODIFY)
{ {
regno = REGNO (XEXP (dst, 0)); unsigned int end_regno = END_REGNO (XEXP (dst, 0));
mode = GET_MODE (XEXP (dst, 0)); for (unsigned int i = REGNO (XEXP (dst, 0)); i < end_regno; ++i)
for (i = hard_regno_nregs[regno][mode] - 1 + regno; i >= regno; i--)
{ {
/* We could probably do better, but for now mark the register /* We could probably do better, but for now mark the register
as used in an unknown fashion and set/clobbered at this as used in an unknown fashion and set/clobbered at this
...@@ -1535,11 +1530,9 @@ reload_combine_note_use (rtx *xp, rtx_insn *insn, int ruid, rtx containing_mem) ...@@ -1535,11 +1530,9 @@ reload_combine_note_use (rtx *xp, rtx_insn *insn, int ruid, rtx containing_mem)
{ {
/* Mark the return register as used in an unknown fashion. */ /* Mark the return register as used in an unknown fashion. */
rtx reg = XEXP (x, 0); rtx reg = XEXP (x, 0);
int regno = REGNO (reg); unsigned int end_regno = END_REGNO (reg);
int nregs = hard_regno_nregs[regno][GET_MODE (reg)]; for (unsigned int regno = REGNO (reg); regno < end_regno; ++regno)
reg_state[regno].use_index = -1;
while (--nregs >= 0)
reg_state[regno + nregs].use_index = -1;
return; return;
} }
break; break;
......
...@@ -3128,18 +3128,15 @@ peep2_regno_dead_p (int ofs, int regno) ...@@ -3128,18 +3128,15 @@ peep2_regno_dead_p (int ofs, int regno)
int int
peep2_reg_dead_p (int ofs, rtx reg) peep2_reg_dead_p (int ofs, rtx reg)
{ {
int regno, n;
gcc_assert (ofs < MAX_INSNS_PER_PEEP2 + 1); gcc_assert (ofs < MAX_INSNS_PER_PEEP2 + 1);
ofs = peep2_buf_position (peep2_current + ofs); ofs = peep2_buf_position (peep2_current + ofs);
gcc_assert (peep2_insn_data[ofs].insn != NULL_RTX); gcc_assert (peep2_insn_data[ofs].insn != NULL_RTX);
regno = REGNO (reg); unsigned int end_regno = END_REGNO (reg);
n = hard_regno_nregs[regno][GET_MODE (reg)]; for (unsigned int regno = REGNO (reg); regno < end_regno; ++regno)
while (--n >= 0) if (REGNO_REG_SET_P (peep2_insn_data[ofs].live_before, regno))
if (REGNO_REG_SET_P (peep2_insn_data[ofs].live_before, regno + n))
return 0; return 0;
return 1; return 1;
} }
......
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