https://gcc.gnu.org/g:e14c673ea9ab2eca5de4db91b478f0b5297ef321

commit r15-696-ge14c673ea9ab2eca5de4db91b478f0b5297ef321
Author: Wilco Dijkstra <wilco.dijks...@arm.com>
Date:   Wed Apr 17 17:18:23 2024 +0100

    AArch64: Improve costing of ctz
    
    Improve costing of ctz - both TARGET_CSSC and vector cases were not handled 
yet.
    
    gcc:
            * config/aarch64/aarch64.cc (aarch64_rtx_costs): Improve CTZ 
costing.

Diff:
---
 gcc/config/aarch64/aarch64.cc | 22 ++++++++++++++++++----
 1 file changed, 18 insertions(+), 4 deletions(-)

diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc
index 662ff5a9b0c7..ee12d8897a88 100644
--- a/gcc/config/aarch64/aarch64.cc
+++ b/gcc/config/aarch64/aarch64.cc
@@ -14349,10 +14349,24 @@ aarch64_rtx_costs (rtx x, machine_mode mode, int 
outer ATTRIBUTE_UNUSED,
       return false;
 
     case CTZ:
-      *cost = COSTS_N_INSNS (2);
-
-      if (speed)
-       *cost += extra_cost->alu.clz + extra_cost->alu.rev;
+      if (VECTOR_MODE_P (mode))
+       {
+         *cost = COSTS_N_INSNS (3);
+         if (speed)
+           *cost += extra_cost->vect.alu * 3;
+       }
+      else if (TARGET_CSSC)
+       {
+         *cost = COSTS_N_INSNS (1);
+         if (speed)
+           *cost += extra_cost->alu.clz;
+       }
+      else
+       {
+         *cost = COSTS_N_INSNS (2);
+         if (speed)
+           *cost += extra_cost->alu.clz + extra_cost->alu.rev;
+       }
       return false;
 
     case COMPARE:

Reply via email to