Include the cost of op0 and op1 in all cases in PLUS and MINUS in aarch64_rtx_costs. Bootstrap & regression OK.
ChangeLog: 2015-03-04 Wilco Dijkstra <wdijk...@arm.com> * gcc/config/aarch64/aarch64.c (aarch64_rtx_costs): Calculate cost of op0 and op1 in PLUS and MINUS cases. --- gcc/config/aarch64/aarch64.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c index 39921a7..e22d72e 100644 --- a/gcc/config/aarch64/aarch64.c +++ b/gcc/config/aarch64/aarch64.c @@ -5794,6 +5794,8 @@ aarch64_rtx_costs (rtx x, int code, int outer ATTRIBUTE_UNUSED, op1 = XEXP (x, 1); cost_minus: + *cost += rtx_cost (op0, MINUS, 0, speed); + /* Detect valid immediates. */ if ((GET_MODE_CLASS (mode) == MODE_INT || (GET_MODE_CLASS (mode) == MODE_CC @@ -5801,13 +5803,10 @@ cost_minus: && CONST_INT_P (op1) && aarch64_uimm12_shift (INTVAL (op1))) { - *cost += rtx_cost (op0, MINUS, 0, speed); - if (speed) /* SUB(S) (immediate). */ *cost += extra_cost->alu.arith; return true; - } /* Look for SUB (extended register). */ @@ -5832,7 +5831,6 @@ cost_minus: *cost += aarch64_rtx_mult_cost (new_op1, MULT, (enum rtx_code) code, speed); - *cost += rtx_cost (op0, MINUS, 0, speed); return true; } @@ -5879,6 +5877,8 @@ cost_plus: return true; } + *cost += rtx_cost (op1, PLUS, 1, speed); + /* Look for ADD (extended register). */ if (aarch64_rtx_arith_op_extract_p (op0, mode)) { @@ -5900,12 +5900,10 @@ cost_plus: { *cost += aarch64_rtx_mult_cost (new_op0, MULT, PLUS, speed); - *cost += rtx_cost (op1, PLUS, 1, speed); return true; } - *cost += (rtx_cost (new_op0, PLUS, 0, speed) - + rtx_cost (op1, PLUS, 1, speed)); + *cost += rtx_cost (new_op0, PLUS, 0, speed); if (speed) { -- 1.9.1