https://gcc.gnu.org/g:363b29a9cfbb470d6987fb395035c56bae30c64b

commit r16-2193-g363b29a9cfbb470d6987fb395035c56bae30c64b
Author: Richard Biener <rguent...@suse.de>
Date:   Thu Jul 10 13:30:30 2025 +0200

    properly compute fp/mode for scalar ops for vectorizer costing
    
    The x86 add_stmt_hook relies on the passed vectype to determine
    the mode and whether it is FP for a scalar operation.  This is
    unreliable now for stmts involving patterns and in the future when
    there is no vector type passed for scalar operations.
    
    To be least disruptive I've kept using the vector type if it is passed.
    
            * config/i386/i386.cc (ix86_vector_costs::add_stmt_cost): Use
            the LHS of a scalar stmt to determine mode and whether it is FP.

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

diff --git a/gcc/config/i386/i386.cc b/gcc/config/i386/i386.cc
index ad7360ec71a4..313522b88e3c 100644
--- a/gcc/config/i386/i386.cc
+++ b/gcc/config/i386/i386.cc
@@ -25798,6 +25798,14 @@ ix86_vector_costs::add_stmt_cost (int count, 
vect_cost_for_stmt kind,
       if (scalar_p)
        mode = TYPE_MODE (TREE_TYPE (vectype));
     }
+  /* When we are costing a scalar stmt use the scalar stmt to get at the
+     type of the operation.  */
+  else if (scalar_p && stmt_info)
+    if (tree lhs = gimple_get_lhs (stmt_info->stmt))
+      {
+       fp = FLOAT_TYPE_P (TREE_TYPE (lhs));
+       mode = TYPE_MODE (TREE_TYPE (lhs));
+      }
 
   if ((kind == vector_stmt || kind == scalar_stmt)
       && stmt_info

Reply via email to