]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Restore STMT_VINFO_VECTYPE during analysis, set to NULL for all stmts
authorRichard Biener <rguenther@suse.de>
Mon, 1 Sep 2025 13:49:59 +0000 (15:49 +0200)
committerRichard Biener <rguenth@gcc.gnu.org>
Tue, 2 Sep 2025 10:53:08 +0000 (12:53 +0200)
The following makes vect_analyze_stmt call vectorizable_* with all
STMT_VINFO_VECTYPE NULL_TREE but restores the value for eventual
iteration with single-lane SLP.  It clears it for every stmt during
vect_transform_stmt.

* tree-vect-stmts.cc (vect_transform_stmt): Clear
STMT_VINFO_VECTYPE for all stmts.
(vect_analyze_stmt): Likewise.  But restore at the end again.

gcc/tree-vect-stmts.cc

index b63a180811e32a674724f605e3fed421712c911e..5b1f291fa8d87ae625a71d17d7b527b1a0bbd44d 100644 (file)
@@ -12601,10 +12601,8 @@ vect_analyze_stmt (vec_info *vinfo,
         gcc_unreachable ();
     }
 
-  if (! STMT_VINFO_DATA_REF (stmt_info))
-    STMT_VINFO_VECTYPE (stmt_info) = NULL_TREE;
-  else
-    STMT_VINFO_VECTYPE (stmt_info) = SLP_TREE_VECTYPE (node);
+  tree saved_vectype = STMT_VINFO_VECTYPE (stmt_info);
+  STMT_VINFO_VECTYPE (stmt_info) = NULL_TREE;
 
   if (STMT_VINFO_RELEVANT_P (stmt_info))
     {
@@ -12650,6 +12648,8 @@ vect_analyze_stmt (vec_info *vinfo,
                                              stmt_info, NULL, node,
                                              cost_vec))));
 
+  STMT_VINFO_VECTYPE (stmt_info) = saved_vectype;
+
   if (!ok)
     return opt_result::failure_at (stmt_info->stmt,
                                   "not vectorized:"
@@ -12693,10 +12693,7 @@ vect_transform_stmt (vec_info *vinfo,
     dump_printf_loc (MSG_NOTE, vect_location,
                     "------>vectorizing statement: %G", stmt_info->stmt);
 
-  if (! STMT_VINFO_DATA_REF (stmt_info))
-    STMT_VINFO_VECTYPE (stmt_info) = NULL_TREE;
-  else
-    STMT_VINFO_VECTYPE (stmt_info) = SLP_TREE_VECTYPE (slp_node);
+  STMT_VINFO_VECTYPE (stmt_info) = NULL_TREE;
 
   switch (SLP_TREE_TYPE (slp_node))
     {