diff options
author | Yvan Roux <yvan.roux@linaro.org> | 2015-08-23 22:05:40 +0200 |
---|---|---|
committer | Linaro Code Review <review@review.linaro.org> | 2015-08-27 11:52:00 +0000 |
commit | 51faf82fd86cd5b385a81af8c222659c14a94f44 (patch) | |
tree | e8ab4331b6154a02e5f820288b7748bb1162ff94 | |
parent | f2c1f25a463610c461661c5c3c2a84fe8f4b5d34 (diff) |
gcc/
Backport from trunk r222676.
2015-05-01 Wilco Dijkstra <wdijkstr@arm.com>
* gcc/config/aarch64/aarch64.c (aarch64_rtx_costs):
Calculate cost of op0 and op1 in PLUS and MINUS cases.
Change-Id: Iba39ef15dc638b8782933b23a0fd97a324b3e16e
-rw-r--r-- | gcc/config/aarch64/aarch64.c | 12 |
1 files changed, 5 insertions, 7 deletions
diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c index 2b490f64b1c..256f3c8834c 100644 --- a/gcc/config/aarch64/aarch64.c +++ b/gcc/config/aarch64/aarch64.c @@ -5844,6 +5844,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 @@ -5851,13 +5853,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). */ @@ -5882,7 +5881,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; } @@ -5929,6 +5927,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)) { @@ -5950,12 +5950,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) { |