https://gcc.gnu.org/g:7e9b0d90d363311caaa5a5e6edbb5088afe0308f

commit r15-5559-g7e9b0d90d363311caaa5a5e6edbb5088afe0308f
Author: Richard Biener <rguent...@suse.de>
Date:   Thu Nov 21 09:14:53 2024 +0100

    tree-optimization/117720 - check alignment for VMAT_STRIDED_SLP
    
    While vectorizable_store was already checking alignment requirement
    of the stores and fall back to elementwise accesses if not honored
    the vectorizable_load path wasn't doing this.  After the previous
    change to disregard alignment checking for VMAT_STRIDED_SLP in
    get_group_load_store_type this now tripped on power.
    
            PR tree-optimization/117720
            * tree-vect-stmts.cc (vectorizable_load): For VMAT_STRIDED_SLP
            verify the choosen load type is OK with regard to alignment.

Diff:
---
 gcc/tree-vect-stmts.cc | 16 +++++++++++++---
 1 file changed, 13 insertions(+), 3 deletions(-)

diff --git a/gcc/tree-vect-stmts.cc b/gcc/tree-vect-stmts.cc
index 522e9f7f90fd..75973c77236e 100644
--- a/gcc/tree-vect-stmts.cc
+++ b/gcc/tree-vect-stmts.cc
@@ -10650,9 +10650,19 @@ vectorizable_load (vec_info *vinfo,
             of it.  */
          if (n == const_nunits)
            {
-             nloads = 1;
-             lnel = const_nunits;
-             ltype = vectype;
+             int mis_align = dr_misalignment (first_dr_info, vectype);
+             dr_alignment_support dr_align
+               = vect_supportable_dr_alignment (vinfo, dr_info, vectype,
+                                                mis_align);
+             if (dr_align == dr_aligned
+                 || dr_align == dr_unaligned_supported)
+               {
+                 nloads = 1;
+                 lnel = const_nunits;
+                 ltype = vectype;
+                 alignment_support_scheme = dr_align;
+                 misalignment = mis_align;
+               }
            }
          /* Else use the biggest vector we can load the group without
             accessing excess elements.  */

Reply via email to