diff options
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; } |