From 7e9b0d90d363311caaa5a5e6edbb5088afe0308f Mon Sep 17 00:00:00 2001
From: Richard Biener <rguenther@suse.de>
Date: Thu, 21 Nov 2024 09:14:53 +0100
Subject: [PATCH] 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.
---
 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.  */
-- 
GitLab