diff options
author | drow <drow@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-10-12 19:28:56 +0000 |
---|---|---|
committer | drow <drow@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-10-12 19:28:56 +0000 |
commit | 6006f9fd085c65362c5c9a9622e3f127e83420cb (patch) | |
tree | 32fb1749887c1bb5a4613d1d87b18c9a8537c8f4 /gcc/regrename.c | |
parent | 27bfe4941e3c5a748285d86747bd1cf891cac299 (diff) | |
download | gcc-6006f9fd085c65362c5c9a9622e3f127e83420cb.tar.gz |
* defaults.h (REGNO_MODE_OK_FOR_BASE_P, REG_MODE_OK_FOR_BASE_P)
(MODE_BASE_REG_REG_CLASS, REGNO_MODE_OK_FOR_REG_BASE_P)
(REG_MODE_OK_FOR_REG_BASE_P): Provide default definitions.
* regclass.c (record_address_regs): Remove ifdef. Use
REG_MODE_OK_FOR_REG_BASE_P and MODE_BASE_REG_REG_CLASS.
* regrename.c (REG_MODE_OK_FOR_BASE_P): Remove unnecessary
definition.
(scan_rtx_address, replace_oldest_value_addr): Use
REG_MODE_OK_FOR_REG_BASE_P and MODE_BASE_REG_REG_CLASS.
* reload.c (REGNO_MODE_OK_FOR_BASE_P, REG_MODE_OK_FOR_BASE_P): Remove
unnecessary definitions.
(find_reloads_address_1): Support REG_MODE_OK_FOR_REG_BASE_P
and MODE_BASE_REG_REG_CLASS.
* config/arm/arm.h (MODE_BASE_REG_CLASS): Don't check reload_completed.
(MODE_BASE_REG_REG_CLASS): Define.
(REGNO_MODE_OK_FOR_REG_BASE_P): Define.
(REG_MODE_OK_FOR_REG_BASE_P): Define.
* doc/tm.texi (Register Classes): Document MODE_BASE_REG_REG_CLASS,
REG_MODE_OK_FOR_REG_BASE_P, and REGNO_MODE_OK_FOR_REG_BASE_P.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@88948 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/regrename.c')
-rw-r--r-- | gcc/regrename.c | 33 |
1 files changed, 19 insertions, 14 deletions
diff --git a/gcc/regrename.c b/gcc/regrename.c index 330ed3b4284..dc2bb01780e 100644 --- a/gcc/regrename.c +++ b/gcc/regrename.c @@ -36,10 +36,6 @@ #include "toplev.h" #include "obstack.h" -#ifndef REG_MODE_OK_FOR_BASE_P -#define REG_MODE_OK_FOR_BASE_P(REGNO, MODE) REG_OK_FOR_BASE_P (REGNO) -#endif - static const char *const reg_class_names[] = REG_CLASS_NAMES; struct du_chain @@ -524,6 +520,7 @@ scan_rtx_address (rtx insn, rtx *loc, enum reg_class cl, rtx op1 = orig_op1; rtx *locI = NULL; rtx *locB = NULL; + rtx *locB_reg = NULL; if (GET_CODE (op0) == SUBREG) { @@ -560,14 +557,14 @@ scan_rtx_address (rtx insn, rtx *loc, enum reg_class cl, int index_op; if (REG_OK_FOR_INDEX_P (op0) - && REG_MODE_OK_FOR_BASE_P (op1, mode)) + && REG_MODE_OK_FOR_REG_BASE_P (op1, mode)) index_op = 0; else if (REG_OK_FOR_INDEX_P (op1) - && REG_MODE_OK_FOR_BASE_P (op0, mode)) + && REG_MODE_OK_FOR_REG_BASE_P (op0, mode)) index_op = 1; - else if (REG_MODE_OK_FOR_BASE_P (op1, mode)) + else if (REG_MODE_OK_FOR_REG_BASE_P (op1, mode)) index_op = 0; - else if (REG_MODE_OK_FOR_BASE_P (op0, mode)) + else if (REG_MODE_OK_FOR_REG_BASE_P (op0, mode)) index_op = 1; else if (REG_OK_FOR_INDEX_P (op1)) index_op = 1; @@ -575,7 +572,7 @@ scan_rtx_address (rtx insn, rtx *loc, enum reg_class cl, index_op = 0; locI = &XEXP (x, index_op); - locB = &XEXP (x, !index_op); + locB_reg = &XEXP (x, !index_op); } else if (code0 == REG) { @@ -592,6 +589,9 @@ scan_rtx_address (rtx insn, rtx *loc, enum reg_class cl, scan_rtx_address (insn, locI, INDEX_REG_CLASS, action, mode); if (locB) scan_rtx_address (insn, locB, MODE_BASE_REG_CLASS (mode), action, mode); + if (locB_reg) + scan_rtx_address (insn, locB_reg, MODE_BASE_REG_REG_CLASS (mode), + action, mode); return; } @@ -1415,6 +1415,7 @@ replace_oldest_value_addr (rtx *loc, enum reg_class cl, rtx op1 = orig_op1; rtx *locI = NULL; rtx *locB = NULL; + rtx *locB_reg = NULL; if (GET_CODE (op0) == SUBREG) { @@ -1451,14 +1452,14 @@ replace_oldest_value_addr (rtx *loc, enum reg_class cl, int index_op; if (REG_OK_FOR_INDEX_P (op0) - && REG_MODE_OK_FOR_BASE_P (op1, mode)) + && REG_MODE_OK_FOR_REG_BASE_P (op1, mode)) index_op = 0; else if (REG_OK_FOR_INDEX_P (op1) - && REG_MODE_OK_FOR_BASE_P (op0, mode)) + && REG_MODE_OK_FOR_REG_BASE_P (op0, mode)) index_op = 1; - else if (REG_MODE_OK_FOR_BASE_P (op1, mode)) + else if (REG_MODE_OK_FOR_REG_BASE_P (op1, mode)) index_op = 0; - else if (REG_MODE_OK_FOR_BASE_P (op0, mode)) + else if (REG_MODE_OK_FOR_REG_BASE_P (op0, mode)) index_op = 1; else if (REG_OK_FOR_INDEX_P (op1)) index_op = 1; @@ -1466,7 +1467,7 @@ replace_oldest_value_addr (rtx *loc, enum reg_class cl, index_op = 0; locI = &XEXP (x, index_op); - locB = &XEXP (x, !index_op); + locB_reg = &XEXP (x, !index_op); } else if (code0 == REG) { @@ -1486,6 +1487,10 @@ replace_oldest_value_addr (rtx *loc, enum reg_class cl, changed |= replace_oldest_value_addr (locB, MODE_BASE_REG_CLASS (mode), mode, insn, vd); + if (locB_reg) + changed |= replace_oldest_value_addr (locB_reg, + MODE_BASE_REG_REG_CLASS (mode), + mode, insn, vd); return changed; } |