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.
}
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)
}
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
} 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