]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Fix bogus SLP nvector compute in check_load_store_for_partial_vectors
authorRichard Biener <rguenther@suse.de>
Tue, 24 Sep 2024 08:42:01 +0000 (10:42 +0200)
committerRichard Biener <rguenth@gcc.gnu.org>
Fri, 27 Sep 2024 07:20:24 +0000 (09:20 +0200)
We have a new overload for vect_get_num_copies that handles both
SLP and non-SLP.  Use it and avoid the division by group_size
for SLP when not using load-store lanes.

* tree-vect-stmts.cc (check_load_store_for_partial_vectors):
Use the new vect_get_num_copies overload.  Only divide by
group_size for SLP for load-store lanes.

gcc/tree-vect-stmts.cc

index 1b351c5c66ec371562758b68cd7b4b307d6190b7..a8031b4f6f5e006519fd1acdb02df50884b53df9 100644 (file)
@@ -1507,19 +1507,15 @@ check_load_store_for_partial_vectors (loop_vec_info loop_vinfo, tree vectype,
   if (memory_access_type == VMAT_INVARIANT)
     return;
 
-  unsigned int nvectors;
-  if (slp_node)
-    /* ???  Incorrect for multi-lane lanes.  */
-    nvectors = SLP_TREE_NUMBER_OF_VEC_STMTS (slp_node) / group_size;
-  else
-    nvectors = vect_get_num_copies (loop_vinfo, vectype);
-
+  unsigned int nvectors = vect_get_num_copies (loop_vinfo, slp_node, vectype);
   vec_loop_masks *masks = &LOOP_VINFO_MASKS (loop_vinfo);
   vec_loop_lens *lens = &LOOP_VINFO_LENS (loop_vinfo);
   machine_mode vecmode = TYPE_MODE (vectype);
   bool is_load = (vls_type == VLS_LOAD);
   if (memory_access_type == VMAT_LOAD_STORE_LANES)
     {
+      if (slp_node)
+       nvectors /= group_size;
       internal_fn ifn
        = (is_load ? vect_load_lanes_supported (vectype, group_size, true)
                   : vect_store_lanes_supported (vectype, group_size, true));