]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Also record ls element type for costing
authorRichard Biener <rguenther@suse.de>
Wed, 13 May 2026 12:22:01 +0000 (14:22 +0200)
committerRichard Biener <rguenther@suse.de>
Thu, 18 Jun 2026 11:54:50 +0000 (13:54 +0200)
I've realized that on x86 we get vector types as vector composition
element types, so just recording the ls_type isn't enough to
realize we're constructing a V4SI from V2SI elements.  The following
adds such a field.

* tree-vectorizer.h (vect_load_store_data::ls_eltype): New field.
* tree-vect-stmts.cc (vectorizable_load): Record ltype
as ls_eltype for VMAT_STRIDED_SLP.
(vectorizable_store): Likewise.

gcc/tree-vect-stmts.cc
gcc/tree-vectorizer.h

index 87ce206772844cc4dcb3551b579f5603c1c0a0b8..4e7b45f5a6c897e5ce4888eb8ab8e37b629994dd 100644 (file)
@@ -8536,10 +8536,13 @@ vectorizable_store (vec_info *vinfo,
        }
 
       if (costing_p)
-       /* Record the decomposition type for target access during costing.  */
-       ls.ls_type = lvectype;
+       {
+         /* Record the decomposition type for target access during costing.  */
+         ls.ls_type = lvectype;
+         ls.ls_eltype = ltype;
+       }
       else
-       gcc_assert (ls.ls_type == lvectype);
+       gcc_assert (ls.ls_type == lvectype && ls.ls_eltype == ltype);
 
       unsigned align;
       if (alignment_support_scheme == dr_aligned)
@@ -10335,10 +10338,13 @@ vectorizable_load (vec_info *vinfo,
        }
 
       if (costing_p)
-       /* Record the composition type for target access during costing.  */
-       ls.ls_type = lvectype;
+       {
+         /* Record the composition type for target access during costing.  */
+         ls.ls_type = lvectype;
+         ls.ls_eltype = ltype;
+       }
       else
-       gcc_assert (ls.ls_type == lvectype);
+       gcc_assert (ls.ls_type == lvectype && ls.ls_eltype == ltype);
 
       /* For SLP permutation support we need to load the whole group,
         not only the number of vector stmts the permutation result
index 35e531c11c178839bcf3218e58ad7521662d3b42..0b646d6b29e78736a0689e1fec1b7d6b802860c4 100644 (file)
@@ -293,7 +293,10 @@ struct vect_load_store_data : vect_data {
   } gs;
   tree strided_offset_vectype; // VMAT_GATHER_SCATTER_IFN, originally strided
   /* Load/store type with larger element mode used for punning the vectype.  */
-  tree ls_type; // VMAT_GATHER_SCATTER_IFN
+  tree ls_type; // VMAT_GATHER_SCATTER_IFN, VMAT_STRIDED_SLP
+  /* Load/store element type used for punning the vectype.  Relevant when
+     that is a vector type.  */
+  tree ls_eltype; // VMAT_STRIDED_SLP
   /* This is set to a supported offset vector type if we don't support the
      originally requested offset type, otherwise NULL.
      If nonzero there will be an additional offset conversion before