From: Richard Biener Date: Wed, 2 Jul 2025 07:30:05 +0000 (+0200) Subject: tree-optimization/118669 - fixup wrongly aligned loads/stores X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c625bc9c7c294ef2851ae42d4a5b6cc899fecb5e;p=thirdparty%2Fgcc.git tree-optimization/118669 - fixup wrongly aligned loads/stores The vectorizer tracks alignment of datarefs with dr_aligned and dr_unaligned_supported but that's aligned with respect to the target alignment which can be less aligned than the mode used for the access. The following fixes this discrepancy for vectorizing loads and stores. The issue is visible for aarch64 SVE and risc-v where VLA vector modes have larger than element alignment but the target handles element alignment just fine. PR tree-optimization/118669 * tree-vect-stmts.cc (vectorizable_load): Emit loads with proper (element) alignment. (vectorizable_store): Likewise. (cherry picked from commit 37bf13adcda564dfdb28c3aa736f2cac71c73d09) --- diff --git a/gcc/tree-vect-stmts.cc b/gcc/tree-vect-stmts.cc index 978a4626b35..89ac5f61127 100644 --- a/gcc/tree-vect-stmts.cc +++ b/gcc/tree-vect-stmts.cc @@ -10062,7 +10062,8 @@ vectorizable_store (vec_info *vinfo, = fold_build2 (MEM_REF, vectype, dataref_ptr, dataref_offset ? dataref_offset : build_int_cst (ref_type, 0)); - if (alignment_support_scheme == dr_aligned) + if (alignment_support_scheme == dr_aligned + && align >= TYPE_ALIGN_UNIT (vectype)) ; else TREE_TYPE (data_ref) @@ -12254,7 +12255,8 @@ vectorizable_load (vec_info *vinfo, { data_ref = fold_build2 (MEM_REF, ltype, dataref_ptr, offset); - if (alignment_support_scheme == dr_aligned) + if (alignment_support_scheme == dr_aligned + && align >= TYPE_ALIGN_UNIT (ltype)) ; else TREE_TYPE (data_ref)