]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
properly compute fp/mode for scalar ops for vectorizer costing
authorRichard Biener <rguenther@suse.de>
Thu, 10 Jul 2025 11:30:30 +0000 (13:30 +0200)
committerRichard Biener <rguenther@suse.de>
Fri, 11 Jul 2025 08:41:57 +0000 (10:41 +0200)
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.

gcc/config/i386/i386.cc

index ad7360ec71a43b865e9374fd26ff6c2e76a447a0..313522b88e3c06ed0337d0594efc718a359ca6d1 100644 (file)
@@ -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