This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH 3/4][AArch64] Add CCMP to rtx costs
- From: "Wilco Dijkstra" <Wilco dot Dijkstra at arm dot com>
- To: <gcc-patches at gcc dot gnu dot org>
- Date: Fri, 13 Nov 2015 16:02:31 -0000
- Subject: [PATCH 3/4][AArch64] Add CCMP to rtx costs
- Authentication-results: sourceware.org; auth=none
This patch adds support for rtx costing of CCMP. The cost is the same as
int/FP compare, however comparisons with zero get a slightly larger cost.
This means we prefer emitting compares with zero so they can be merged with
ALU operations.
OK for commit?
ChangeLog:
2015-11-13 Wilco Dijkstra <wdijkstr@arm.com>
* gcc/config/aarch64/aarch64.c (aarch64_if_then_else_costs):
Add support for CCMP costing.
---
gcc/config/aarch64/aarch64.c | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c
index a224982..b789841 100644
--- a/gcc/config/aarch64/aarch64.c
+++ b/gcc/config/aarch64/aarch64.c
@@ -5638,6 +5638,26 @@ aarch64_if_then_else_costs (rtx op0, rtx op1, rtx
op2, int *cost, bool speed)
}
else if (GET_MODE_CLASS (GET_MODE (inner)) == MODE_CC)
{
+ /* CCMP. */
+ if ((GET_CODE (op1) == COMPARE) && CONST_INT_P (op2))
+ {
+ /* Increase cost of CCMP reg, 0, imm, CC to prefer CMP reg, 0. */
+ if (XEXP (op1, 1) == const0_rtx)
+ *cost += 1;
+ if (speed)
+ {
+ machine_mode mode = GET_MODE (XEXP (op1, 0));
+ const struct cpu_cost_table *extra_cost
+ = aarch64_tune_params.insn_extra_cost;
+
+ if (GET_MODE_CLASS (mode) == MODE_INT)
+ *cost += extra_cost->alu.arith;
+ else
+ *cost += extra_cost->fp[mode == DFmode].compare;
+ }
+ return true;
+ }
+
/* It's a conditional operation based on the status flags,
so it must be some flavor of CSEL. */
--
1.9.1