The following makes sure to read from the lanes_ifn member only when necessary (and thus it was set).
Bootstrap and regtest running on x86_64-unknown-linux-gnu. * tree-vect-stmts.cc (vectorizable_store): Access lanes_ifn only when VMAT_LOAD_STORE_LANES. (vectorizable_load): Likewise. --- gcc/tree-vect-stmts.cc | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/gcc/tree-vect-stmts.cc b/gcc/tree-vect-stmts.cc index fb595769038..92e7326dbfc 100644 --- a/gcc/tree-vect-stmts.cc +++ b/gcc/tree-vect-stmts.cc @@ -7895,7 +7895,6 @@ vectorizable_store (vec_info *vinfo, = ls.alignment_support_scheme; const int misalignment = ls.misalignment; const poly_int64 poffset = ls.poffset; - const internal_fn lanes_ifn = ls.lanes_ifn; if (slp_node->ldst_lanes && memory_access_type != VMAT_LOAD_STORE_LANES) @@ -8399,6 +8398,8 @@ vectorizable_store (vec_info *vinfo, if (memory_access_type == VMAT_LOAD_STORE_LANES) { + const internal_fn lanes_ifn = ls.lanes_ifn; + if (costing_p) /* Update all incoming store operand nodes, the general handling above only handles the mask and the first store operand node. */ @@ -9464,7 +9465,6 @@ vectorizable_load (vec_info *vinfo, = ls.alignment_support_scheme; const int misalignment = ls.misalignment; const poly_int64 poffset = ls.poffset; - const internal_fn lanes_ifn = ls.lanes_ifn; const vec<int> &elsvals = ls.elsvals; int maskload_elsval = 0; @@ -10245,6 +10245,8 @@ vectorizable_load (vec_info *vinfo, tree vec_els = NULL_TREE; if (memory_access_type == VMAT_LOAD_STORE_LANES) { + const internal_fn lanes_ifn = ls.lanes_ifn; + gcc_assert (alignment_support_scheme == dr_aligned || alignment_support_scheme == dr_unaligned_supported); -- 2.43.0