summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>2017-09-12 13:28:18 +0000
committerrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>2017-09-12 13:28:18 +0000
commitb4104dfde5420687243b8bf067c89b244759eb1c (patch)
tree302e64c7ba17ddd26f1d65d47517500f88a16d27
parent10fa8f764e615fa0d230c13a41ad39b2ea6bdf95 (diff)
downloadgcc-b4104dfde5420687243b8bf067c89b244759eb1c.tar.gz
Make more use of END_REGNO
An upcoming patch will convert hard_regno_nregs into an inline function, which in turn allows hard_regno_nregs to be used as the name of a targetm field. This patch rewrites uses that are more easily (and efficiently) written as END_REGNO. 2017-09-12 Richard Sandiford <richard.sandiford@linaro.org> gcc/ * config/frv/frv.c (FOR_EACH_REGNO): Use END_REGNO instead of hard_regno_nregs. * config/v850/v850.c (v850_reorg): Likewise. * reload.c (refers_to_regno_for_reload_p): Likewise. (find_equiv_reg): Likewise. * reload1.c (reload_reg_reaches_end_p): Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@252011 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/config/frv/frv.c4
-rw-r--r--gcc/config/v850/v850.c3
-rw-r--r--gcc/reload.c46
-rw-r--r--gcc/reload1.c4
5 files changed, 27 insertions, 39 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 2683d7759d0..1b398c8983f 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,14 @@
2017-09-12 Richard Sandiford <richard.sandiford@linaro.org>
+ * config/frv/frv.c (FOR_EACH_REGNO): Use END_REGNO instead of
+ hard_regno_nregs.
+ * config/v850/v850.c (v850_reorg): Likewise.
+ * reload.c (refers_to_regno_for_reload_p): Likewise.
+ (find_equiv_reg): Likewise.
+ * reload1.c (reload_reg_reaches_end_p): Likewise.
+
+2017-09-12 Richard Sandiford <richard.sandiford@linaro.org>
+
* caller-save.c (add_used_regs): Use REG_NREGS instead of
hard_regno_nregs.
* config/aarch64/aarch64.c (aarch64_split_combinev16qi): Likewise.
diff --git a/gcc/config/frv/frv.c b/gcc/config/frv/frv.c
index b6119e9c395..add19e5cb14 100644
--- a/gcc/config/frv/frv.c
+++ b/gcc/config/frv/frv.c
@@ -135,9 +135,7 @@ struct frv_io {
/* Loop with REG set to each hard register in rtx X. */
#define FOR_EACH_REGNO(REG, X) \
- for (REG = REGNO (X); \
- REG < REGNO (X) + HARD_REGNO_NREGS (REGNO (X), GET_MODE (X)); \
- REG++)
+ for (REG = REGNO (X); REG < END_REGNO (X); REG++)
/* This structure contains machine specific function data. */
struct GTY(()) machine_function
diff --git a/gcc/config/v850/v850.c b/gcc/config/v850/v850.c
index 0b674d14e78..32c6a036eb3 100644
--- a/gcc/config/v850/v850.c
+++ b/gcc/config/v850/v850.c
@@ -1376,12 +1376,11 @@ v850_reorg (void)
for the register */
if (GET_CODE (dest) == REG)
{
- machine_mode mode = GET_MODE (dest);
int regno;
int endregno;
regno = REGNO (dest);
- endregno = regno + HARD_REGNO_NREGS (regno, mode);
+ endregno = END_REGNO (dest);
if (!use_ep)
{
diff --git a/gcc/reload.c b/gcc/reload.c
index eb67db6c951..21efdcbcaaf 100644
--- a/gcc/reload.c
+++ b/gcc/reload.c
@@ -6439,10 +6439,7 @@ refers_to_regno_for_reload_p (unsigned int regno, unsigned int endregno,
return 0;
}
- return (endregno > r
- && regno < r + (r < FIRST_PSEUDO_REGISTER
- ? hard_regno_nregs[r][GET_MODE (x)]
- : 1));
+ return endregno > r && regno < END_REGNO (x);
case SUBREG:
/* If this is a SUBREG of a hard reg, we can see exactly which
@@ -6889,15 +6886,11 @@ find_equiv_reg (rtx goal, rtx_insn *insn, enum reg_class rclass, int other,
{
int i;
for (i = 0; i < n_reloads; i++)
- if (rld[i].reg_rtx != 0 && rld[i].in)
- {
- int regno1 = REGNO (rld[i].reg_rtx);
- int nregs1 = hard_regno_nregs[regno1]
- [GET_MODE (rld[i].reg_rtx)];
- if (regno1 < valueno + valuenregs
- && regno1 + nregs1 > valueno)
- return 0;
- }
+ if (rld[i].reg_rtx != 0
+ && rld[i].in
+ && (int) REGNO (rld[i].reg_rtx) < valueno + valuenregs
+ && (int) END_REGNO (rld[i].reg_rtx) > valueno)
+ return 0;
}
if (goal_mem)
@@ -6963,15 +6956,11 @@ find_equiv_reg (rtx goal, rtx_insn *insn, enum reg_class rclass, int other,
if (REG_P (dest))
{
int xregno = REGNO (dest);
- int xnregs;
- if (REGNO (dest) < FIRST_PSEUDO_REGISTER)
- xnregs = hard_regno_nregs[xregno][GET_MODE (dest)];
- else
- xnregs = 1;
- if (xregno < regno + nregs && xregno + xnregs > regno)
+ int end_xregno = END_REGNO (dest);
+ if (xregno < regno + nregs && end_xregno > regno)
return 0;
if (xregno < valueno + valuenregs
- && xregno + xnregs > valueno)
+ && end_xregno > valueno)
return 0;
if (goal_mem_addr_varies
&& reg_overlap_mentioned_for_reload_p (dest, goal))
@@ -7006,16 +6995,12 @@ find_equiv_reg (rtx goal, rtx_insn *insn, enum reg_class rclass, int other,
if (REG_P (dest))
{
int xregno = REGNO (dest);
- int xnregs;
- if (REGNO (dest) < FIRST_PSEUDO_REGISTER)
- xnregs = hard_regno_nregs[xregno][GET_MODE (dest)];
- else
- xnregs = 1;
+ int end_xregno = END_REGNO (dest);
if (xregno < regno + nregs
- && xregno + xnregs > regno)
+ && end_xregno > regno)
return 0;
if (xregno < valueno + valuenregs
- && xregno + xnregs > valueno)
+ && end_xregno > valueno)
return 0;
if (goal_mem_addr_varies
&& reg_overlap_mentioned_for_reload_p (dest,
@@ -7052,14 +7037,13 @@ find_equiv_reg (rtx goal, rtx_insn *insn, enum reg_class rclass, int other,
if (REG_P (dest))
{
int xregno = REGNO (dest);
- int xnregs
- = hard_regno_nregs[xregno][GET_MODE (dest)];
+ int end_xregno = END_REGNO (dest);
if (xregno < regno + nregs
- && xregno + xnregs > regno)
+ && end_xregno > regno)
return 0;
else if (xregno < valueno + valuenregs
- && xregno + xnregs > valueno)
+ && end_xregno > valueno)
return 0;
else if (goal_mem_addr_varies
&& reg_overlap_mentioned_for_reload_p (dest,
diff --git a/gcc/reload1.c b/gcc/reload1.c
index 092995138a6..4f39e0e91b0 100644
--- a/gcc/reload1.c
+++ b/gcc/reload1.c
@@ -5349,15 +5349,13 @@ reload_reg_reaches_end_p (unsigned int regno, int reloadnum)
for (i = reloadnum + 1; i < n_reloads; i++)
{
rtx reg;
- int nregs;
if (rld[i].opnum != opnum || rld[i].when_needed != type)
continue;
reg = rld[i].reg_rtx;
if (reg == NULL_RTX)
continue;
- nregs = hard_regno_nregs[REGNO (reg)][GET_MODE (reg)];
- if (regno >= REGNO (reg) && regno < REGNO (reg) + nregs)
+ if (regno >= REGNO (reg) && regno < END_REGNO (reg))
return 0;
}