https://gcc.gnu.org/g:4982644625dc5a46e959ecf8167641f6ae21f76d

commit r16-3277-g4982644625dc5a46e959ecf8167641f6ae21f76d
Author: Tamar Christina <tamar.christ...@arm.com>
Date:   Tue Aug 19 10:15:54 2025 +0100

    AArch64: Fix scalar costing after removal of vectype from mid-end [PR121536]
    
    commit g:fb59c5719c17a04ecfd58b5e566eccd6d2ac583a stops passing the scalar 
type
    (confusingly named vectype) to the costing hook when doing scalar costing.
    
    As a result, we could no longer distinguish between FPR and GPR scalar 
stmts.
    A later commit also removed STMT_VINFO_VECTYPE from stmt_info.
    
    This leaves the only remaining option to get the type of the original stmt 
in
    the stmt_info.  This patch does this when we're performing scalar costing.
    
    Ideally I'd refactor this a bit because a lot of the hooks just need to 
know if
    it's FP or not, but this seems pointless with the ongoing costing churn.  
So for
    now this restores our costing.
    
    gcc/ChangeLog:
    
            PR target/121536
            * config/aarch64/aarch64.cc (aarch64_vector_costs::add_stmt_cost): 
Set
            vectype from type of lhs of gimple stmt.

Diff:
---
 gcc/config/aarch64/aarch64.cc | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc
index f88b7c95f97e..83cd132a3e0e 100644
--- a/gcc/config/aarch64/aarch64.cc
+++ b/gcc/config/aarch64/aarch64.cc
@@ -18045,6 +18045,17 @@ aarch64_vector_costs::add_stmt_cost (int count, 
vect_cost_for_stmt kind,
                                     tree vectype, int misalign,
                                     vect_cost_model_location where)
 {
+  /* When costing for scalars, vectype will be NULL; so look up the type via
+     stmt_info's statement.  */
+  if (m_costing_for_scalar && stmt_info)
+    {
+      gcc_assert (!vectype);
+      /* This won't work for e.g. gconds or other statements without a lhs,
+        but those only work on GPR anyway and this is the best we can do.  */
+      if (tree lhs = gimple_get_lhs (STMT_VINFO_STMT (stmt_info)))
+       vectype = TREE_TYPE (lhs);
+    }
+
   fractional_cost stmt_cost
     = aarch64_builtin_vectorization_cost (kind, vectype, misalign);

Reply via email to