diff options
Diffstat (limited to 'gcc/config/bfin/bfin.c')
-rw-r--r-- | gcc/config/bfin/bfin.c | 43 |
1 files changed, 22 insertions, 21 deletions
diff --git a/gcc/config/bfin/bfin.c b/gcc/config/bfin/bfin.c index 3119fe7c9a2..ea3e6679cb3 100644 --- a/gcc/config/bfin/bfin.c +++ b/gcc/config/bfin/bfin.c @@ -2797,10 +2797,10 @@ bfin_legitimate_constant_p (machine_mode mode ATTRIBUTE_UNUSED, rtx x) } static bool -bfin_rtx_costs (rtx x, int code_i, int outer_code_i, int opno, int *total, - bool speed) +bfin_rtx_costs (rtx x, machine_mode mode, int outer_code_i, int opno, + int *total, bool speed) { - enum rtx_code code = (enum rtx_code) code_i; + enum rtx_code code = GET_CODE (x); enum rtx_code outer_code = (enum rtx_code) outer_code_i; int cost2 = COSTS_N_INSNS (1); rtx op0, op1; @@ -2839,7 +2839,7 @@ bfin_rtx_costs (rtx x, int code_i, int outer_code_i, int opno, int *total, case PLUS: op0 = XEXP (x, 0); op1 = XEXP (x, 1); - if (GET_MODE (x) == SImode) + if (mode == SImode) { if (GET_CODE (op0) == MULT && GET_CODE (XEXP (op0, 1)) == CONST_INT) @@ -2848,35 +2848,36 @@ bfin_rtx_costs (rtx x, int code_i, int outer_code_i, int opno, int *total, if (val == 2 || val == 4) { *total = cost2; - *total += rtx_cost (XEXP (op0, 0), outer_code, opno, speed); - *total += rtx_cost (op1, outer_code, opno, speed); + *total += rtx_cost (XEXP (op0, 0), mode, outer_code, + opno, speed); + *total += rtx_cost (op1, mode, outer_code, opno, speed); return true; } } *total = cost2; if (GET_CODE (op0) != REG && (GET_CODE (op0) != SUBREG || GET_CODE (SUBREG_REG (op0)) != REG)) - *total += set_src_cost (op0, speed); + *total += set_src_cost (op0, mode, speed); #if 0 /* We'd like to do this for accuracy, but it biases the loop optimizer towards creating too many induction variables. */ if (!reg_or_7bit_operand (op1, SImode)) - *total += set_src_cost (op1, speed); + *total += set_src_cost (op1, mode, speed); #endif } - else if (GET_MODE (x) == DImode) + else if (mode == DImode) { *total = 6 * cost2; if (GET_CODE (op1) != CONST_INT || !satisfies_constraint_Ks7 (op1)) - *total += rtx_cost (op1, PLUS, 1, speed); + *total += rtx_cost (op1, mode, PLUS, 1, speed); if (GET_CODE (op0) != REG && (GET_CODE (op0) != SUBREG || GET_CODE (SUBREG_REG (op0)) != REG)) - *total += rtx_cost (op0, PLUS, 0, speed); + *total += rtx_cost (op0, mode, PLUS, 0, speed); } return true; case MINUS: - if (GET_MODE (x) == DImode) + if (mode == DImode) *total = 6 * cost2; else *total = cost2; @@ -2885,7 +2886,7 @@ bfin_rtx_costs (rtx x, int code_i, int outer_code_i, int opno, int *total, case ASHIFT: case ASHIFTRT: case LSHIFTRT: - if (GET_MODE (x) == DImode) + if (mode == DImode) *total = 6 * cost2; else *total = cost2; @@ -2894,7 +2895,7 @@ bfin_rtx_costs (rtx x, int code_i, int outer_code_i, int opno, int *total, op1 = XEXP (x, 1); if (GET_CODE (op0) != REG && (GET_CODE (op0) != SUBREG || GET_CODE (SUBREG_REG (op0)) != REG)) - *total += rtx_cost (op0, code, 0, speed); + *total += rtx_cost (op0, mode, code, 0, speed); return true; @@ -2919,26 +2920,26 @@ bfin_rtx_costs (rtx x, int code_i, int outer_code_i, int opno, int *total, if (GET_CODE (op0) != REG && (GET_CODE (op0) != SUBREG || GET_CODE (SUBREG_REG (op0)) != REG)) - *total += rtx_cost (op0, code, 0, speed); + *total += rtx_cost (op0, mode, code, 0, speed); - if (GET_MODE (x) == DImode) + if (mode == DImode) { *total = 2 * cost2; return true; } *total = cost2; - if (GET_MODE (x) != SImode) + if (mode != SImode) return true; if (code == AND) { if (! rhs_andsi3_operand (XEXP (x, 1), SImode)) - *total += rtx_cost (XEXP (x, 1), code, 1, speed); + *total += rtx_cost (XEXP (x, 1), mode, code, 1, speed); } else { if (! regorlog2_operand (XEXP (x, 1), SImode)) - *total += rtx_cost (XEXP (x, 1), code, 1, speed); + *total += rtx_cost (XEXP (x, 1), mode, code, 1, speed); } return true; @@ -2978,10 +2979,10 @@ bfin_rtx_costs (rtx x, int code_i, int outer_code_i, int opno, int *total, if (GET_CODE (op0) != REG && (GET_CODE (op0) != SUBREG || GET_CODE (SUBREG_REG (op0)) != REG)) - *total += rtx_cost (op0, MULT, 0, speed); + *total += rtx_cost (op0, mode, MULT, 0, speed); if (GET_CODE (op1) != REG && (GET_CODE (op1) != SUBREG || GET_CODE (SUBREG_REG (op1)) != REG)) - *total += rtx_cost (op1, MULT, 1, speed); + *total += rtx_cost (op1, mode, MULT, 1, speed); } return true; |