When SLP vectorizing we fail to mark the general alignment check
as irrelevant when using VMAT_STRIDED_SLP (the implementation checks
for itself) and when VMAT_INVARIANT the override isn't effective.

This results in extra FAILs on sparc which the following fixes.

Bootstrap and regtest running on x86_64-unknown-linux-gnu.

        PR tree-optimization/117698
        * tree-vect-stmts.cc (get_group_load_store_type): Properly
        disregard alignment for VMAT_STRIDED_SLP and VMAT_INVARIANT.
---
 gcc/tree-vect-stmts.cc | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/gcc/tree-vect-stmts.cc b/gcc/tree-vect-stmts.cc
index 5f7e1e622a8..67b3e379439 100644
--- a/gcc/tree-vect-stmts.cc
+++ b/gcc/tree-vect-stmts.cc
@@ -2121,9 +2121,6 @@ get_group_load_store_type (vec_info *vinfo, stmt_vec_info 
stmt_info,
            {
              gcc_assert (vls_type == VLS_LOAD);
              *memory_access_type = VMAT_INVARIANT;
-             /* Invariant accesses perform only component accesses, alignment
-                is irrelevant for them.  */
-             *alignment_support_scheme = dr_unaligned_supported;
            }
          /* Try using LOAD/STORE_LANES.  */
          else if (slp_node->ldst_lanes
@@ -2379,7 +2376,9 @@ get_group_load_store_type (vec_info *vinfo, stmt_vec_info 
stmt_info,
     *memory_access_type = VMAT_GATHER_SCATTER;
 
   if (*memory_access_type == VMAT_GATHER_SCATTER
-      || *memory_access_type == VMAT_ELEMENTWISE)
+      || *memory_access_type == VMAT_ELEMENTWISE
+      || *memory_access_type == VMAT_STRIDED_SLP
+      || *memory_access_type == VMAT_INVARIANT)
     {
       *alignment_support_scheme = dr_unaligned_supported;
       *misalignment = DR_MISALIGNMENT_UNKNOWN;
-- 
2.43.0

Reply via email to