https://gcc.gnu.org/g:fe3069ae2386ca48614dc627accec20b3fcfe722
commit r16-2513-gfe3069ae2386ca48614dc627accec20b3fcfe722 Author: Richard Biener <rguent...@suse.de> Date: Fri Jul 25 12:34:44 2025 +0200 Reduce the number of STMT_VINFO_VECTYPE uses The following adjusts uses of STMT_VINFO_VECTYPE to look elsewhere where obvious. * tree-vect-loop.cc (vect_analyze_loop_2): Get vectype from the SLP node. (vectorize_fold_left_reduction): Likewise. (vect_transform_reduction): Likewise. (vect_transform_cycle_phi): Likewise. (vect_transform_lc_phi): Likewise. * tree-vect-slp.cc (vect_analyze_slp): Likewise. * tree-vect-stmts.cc (vect_truncate_gather_scatter_offset): Pass in vectype and use that. (vect_use_strided_gather_scatters_p): Likewise. (get_group_load_store_type): Adjust. (vect_check_scalar_mask): We always have a SLP node. Use vectype from the SLP node. (vect_check_store_rhs): Likewise. (vect_build_one_gather_load_call): Pass in the vector type and use that. (vect_get_strided_load_store_ops): Likewise. (vectorizable_store): Adjust. (vectorizable_load): Use the vector type from the SLP node and adjust. Diff: --- gcc/tree-vect-loop.cc | 14 +++++++------- gcc/tree-vect-slp.cc | 4 ++-- gcc/tree-vect-stmts.cc | 38 +++++++++++++++++++------------------- 3 files changed, 28 insertions(+), 28 deletions(-) diff --git a/gcc/tree-vect-loop.cc b/gcc/tree-vect-loop.cc index cd90df2f0c03..eb7c02dd1eb7 100644 --- a/gcc/tree-vect-loop.cc +++ b/gcc/tree-vect-loop.cc @@ -2883,7 +2883,7 @@ again: continue; vinfo = DR_GROUP_FIRST_ELEMENT (vinfo); unsigned int size = DR_GROUP_SIZE (vinfo); - tree vectype = STMT_VINFO_VECTYPE (vinfo); + tree vectype = SLP_TREE_VECTYPE (SLP_INSTANCE_TREE (instance)); if (vect_store_lanes_supported (vectype, size, false) == IFN_LAST && ! known_eq (TYPE_VECTOR_SUBPARTS (vectype), 1U) && ! vect_grouped_store_supported (vectype, size)) @@ -2897,7 +2897,7 @@ again: vinfo = DR_GROUP_FIRST_ELEMENT (vinfo); bool single_element_p = !DR_GROUP_NEXT_ELEMENT (vinfo); size = DR_GROUP_SIZE (vinfo); - vectype = STMT_VINFO_VECTYPE (vinfo); + vectype = SLP_TREE_VECTYPE (node); if (vect_load_lanes_supported (vectype, size, false) == IFN_LAST && ! vect_grouped_load_supported (vectype, single_element_p, size)) @@ -6689,7 +6689,7 @@ vectorize_fold_left_reduction (loop_vec_info loop_vinfo, vec_loop_lens *lens) { class loop *loop = LOOP_VINFO_LOOP (loop_vinfo); - tree vectype_out = STMT_VINFO_VECTYPE (stmt_info); + tree vectype_out = SLP_TREE_VECTYPE (slp_node); internal_fn mask_reduc_fn = get_masked_reduction_fn (reduc_fn, vectype_in); gcc_assert (!nested_in_vect_loop_p (loop, stmt_info)); @@ -8181,7 +8181,7 @@ vect_transform_reduction (loop_vec_info loop_vinfo, stmt_vec_info stmt_info, gimple_stmt_iterator *gsi, slp_tree slp_node) { - tree vectype_out = STMT_VINFO_VECTYPE (stmt_info); + tree vectype_out = SLP_TREE_VECTYPE (slp_node); class loop *loop = LOOP_VINFO_LOOP (loop_vinfo); unsigned vec_num; @@ -8208,7 +8208,7 @@ vect_transform_reduction (loop_vec_info loop_vinfo, tree vectype_in = STMT_VINFO_REDUC_VECTYPE_IN (stmt_info); if (!vectype_in) - vectype_in = STMT_VINFO_VECTYPE (stmt_info); + vectype_in = SLP_TREE_VECTYPE (slp_node); vec_num = vect_get_num_copies (loop_vinfo, slp_node, vectype_in); @@ -8528,7 +8528,7 @@ vect_transform_cycle_phi (loop_vec_info loop_vinfo, stmt_vec_info stmt_info, slp_tree slp_node, slp_instance slp_node_instance) { - tree vectype_out = STMT_VINFO_VECTYPE (stmt_info); + tree vectype_out = SLP_TREE_VECTYPE (slp_node); class loop *loop = LOOP_VINFO_LOOP (loop_vinfo); int i; bool nested_cycle = false; @@ -8781,7 +8781,7 @@ vect_transform_lc_phi (loop_vec_info loop_vinfo, slp_tree slp_node) { - tree vectype = STMT_VINFO_VECTYPE (stmt_info); + tree vectype = SLP_TREE_VECTYPE (slp_node); tree scalar_dest = gimple_phi_result (stmt_info->stmt); basic_block bb = gimple_bb (stmt_info->stmt); edge e = single_pred_edge (bb); diff --git a/gcc/tree-vect-slp.cc b/gcc/tree-vect-slp.cc index 1c5acd92c9d3..c0636d860610 100644 --- a/gcc/tree-vect-slp.cc +++ b/gcc/tree-vect-slp.cc @@ -5241,7 +5241,7 @@ vect_analyze_slp (vec_info *vinfo, unsigned max_tree_size, if (STMT_VINFO_STRIDED_P (stmt_vinfo) || compare_step_with_zero (vinfo, stmt_vinfo) <= 0 || vect_load_lanes_supported - (STMT_VINFO_VECTYPE (stmt_vinfo), + (SLP_TREE_VECTYPE (load_node), DR_GROUP_SIZE (stmt_vinfo), masked) == IFN_LAST /* ??? During SLP re-discovery with a single lane a masked grouped load will appear permuted and @@ -5262,7 +5262,7 @@ vect_analyze_slp (vec_info *vinfo, unsigned max_tree_size, || SLP_TREE_LANES (load_node) == group_size || (vect_slp_prefer_store_lanes_p (vinfo, stmt_vinfo, - STMT_VINFO_VECTYPE (stmt_vinfo), masked, + SLP_TREE_VECTYPE (load_node), masked, group_size, SLP_TREE_LANES (load_node)))); } diff --git a/gcc/tree-vect-stmts.cc b/gcc/tree-vect-stmts.cc index 2d596b88dbec..391e13ae7213 100644 --- a/gcc/tree-vect-stmts.cc +++ b/gcc/tree-vect-stmts.cc @@ -1633,7 +1633,7 @@ prepare_vec_mask (loop_vec_info loop_vinfo, tree mask_type, tree loop_mask, else values will be stored in the vector ELSVALS points to. */ static bool -vect_truncate_gather_scatter_offset (stmt_vec_info stmt_info, +vect_truncate_gather_scatter_offset (stmt_vec_info stmt_info, tree vectype, loop_vec_info loop_vinfo, bool masked_p, gather_scatter_info *gs_info, vec<int> *elsvals) @@ -1651,7 +1651,6 @@ vect_truncate_gather_scatter_offset (stmt_vec_info stmt_info, } /* Get the number of bits in an element. */ - tree vectype = STMT_VINFO_VECTYPE (stmt_info); scalar_mode element_mode = SCALAR_TYPE_MODE (TREE_TYPE (vectype)); unsigned int element_bits = GET_MODE_BITSIZE (element_mode); @@ -1731,14 +1730,14 @@ vect_truncate_gather_scatter_offset (stmt_vec_info stmt_info, else values will be stored in the vector ELSVALS points to. */ static bool -vect_use_strided_gather_scatters_p (stmt_vec_info stmt_info, +vect_use_strided_gather_scatters_p (stmt_vec_info stmt_info, tree vectype, loop_vec_info loop_vinfo, bool masked_p, gather_scatter_info *gs_info, vec<int> *elsvals) { if (!vect_check_gather_scatter (stmt_info, loop_vinfo, gs_info, elsvals) || gs_info->ifn == IFN_LAST) - return vect_truncate_gather_scatter_offset (stmt_info, loop_vinfo, + return vect_truncate_gather_scatter_offset (stmt_info, vectype, loop_vinfo, masked_p, gs_info, elsvals); tree old_offset_type = TREE_TYPE (gs_info->offset); @@ -2255,7 +2254,7 @@ get_group_load_store_type (vec_info *vinfo, stmt_vec_info stmt_info, && single_element_p && SLP_TREE_LANES (slp_node) == 1 && loop_vinfo - && vect_use_strided_gather_scatters_p (stmt_info, loop_vinfo, + && vect_use_strided_gather_scatters_p (stmt_info, vectype, loop_vinfo, masked_p, gs_info, elsvals)) *memory_access_type = VMAT_GATHER_SCATTER; else if (STMT_VINFO_GATHER_SCATTER_P (stmt_info)) @@ -2607,8 +2606,7 @@ vect_check_scalar_mask (vec_info *vinfo, stmt_vec_info stmt_info, /* If the caller is not prepared for adjusting an external/constant SLP mask vector type fail. */ - if (slp_node - && !mask_node + if (!mask_node && SLP_TREE_DEF_TYPE (mask_node_1) != vect_internal_def) { if (dump_enabled_p ()) @@ -2617,7 +2615,7 @@ vect_check_scalar_mask (vec_info *vinfo, stmt_vec_info stmt_info, return false; } - tree vectype = STMT_VINFO_VECTYPE (stmt_info); + tree vectype = SLP_TREE_VECTYPE (slp_node); if (!mask_vectype) mask_vectype = get_mask_type_for_scalar_type (vinfo, TREE_TYPE (vectype), mask_node_1); @@ -2693,7 +2691,7 @@ vect_check_store_rhs (vec_info *vinfo, stmt_vec_info stmt_info, return false; } - tree vectype = STMT_VINFO_VECTYPE (stmt_info); + tree vectype = SLP_TREE_VECTYPE (slp_node); if (rhs_vectype && !useless_type_conversion_p (vectype, rhs_vectype)) { if (dump_enabled_p ()) @@ -2799,11 +2797,11 @@ vect_get_mask_load_else (int elsval, tree type) static gimple * vect_build_one_gather_load_call (vec_info *vinfo, stmt_vec_info stmt_info, + tree vectype, gimple_stmt_iterator *gsi, gather_scatter_info *gs_info, tree ptr, tree offset, tree mask) { - tree vectype = STMT_VINFO_VECTYPE (stmt_info); tree arglist = TYPE_ARG_TYPES (TREE_TYPE (gs_info->decl)); tree rettype = TREE_TYPE (TREE_TYPE (gs_info->decl)); tree srctype = TREE_VALUE (arglist); arglist = TREE_CHAIN (arglist); @@ -3006,7 +3004,7 @@ vect_get_gather_scatter_ops (class loop *loop, I * DR_STEP / SCALE. */ static void -vect_get_strided_load_store_ops (stmt_vec_info stmt_info, +vect_get_strided_load_store_ops (stmt_vec_info stmt_info, tree vectype, loop_vec_info loop_vinfo, gimple_stmt_iterator *gsi, gather_scatter_info *gs_info, @@ -3014,7 +3012,6 @@ vect_get_strided_load_store_ops (stmt_vec_info stmt_info, vec_loop_lens *loop_lens) { struct data_reference *dr = STMT_VINFO_DATA_REF (stmt_info); - tree vectype = STMT_VINFO_VECTYPE (stmt_info); if (LOOP_VINFO_USING_SELECT_VL_P (loop_vinfo)) { @@ -8383,7 +8380,8 @@ vectorizable_store (vec_info *vinfo, { aggr_type = elem_type; if (!costing_p) - vect_get_strided_load_store_ops (stmt_info, loop_vinfo, gsi, &gs_info, + vect_get_strided_load_store_ops (stmt_info, vectype, loop_vinfo, + gsi, &gs_info, &bump, &vec_offset, loop_lens); } else @@ -9404,7 +9402,7 @@ vectorizable_load (vec_info *vinfo, return false; } - tree vectype = STMT_VINFO_VECTYPE (stmt_info); + tree vectype = SLP_TREE_VECTYPE (slp_node); poly_uint64 nunits = TYPE_VECTOR_SUBPARTS (vectype); if (loop_vinfo) @@ -10262,7 +10260,8 @@ vectorizable_load (vec_info *vinfo, { aggr_type = elem_type; if (!costing_p) - vect_get_strided_load_store_ops (stmt_info, loop_vinfo, gsi, &gs_info, + vect_get_strided_load_store_ops (stmt_info, vectype, loop_vinfo, + gsi, &gs_info, &bump, &vec_offset, loop_lens); } else @@ -10581,7 +10580,7 @@ vectorizable_load (vec_info *vinfo, if (known_eq (nunits, offset_nunits)) { new_stmt = vect_build_one_gather_load_call - (vinfo, stmt_info, gsi, &gs_info, + (vinfo, stmt_info, vectype, gsi, &gs_info, dataref_ptr, vec_offsets[i], final_mask); data_ref = NULL_TREE; } @@ -10591,7 +10590,7 @@ vectorizable_load (vec_info *vinfo, lanes but the builtins will produce full vectype data with just the lower lanes filled. */ new_stmt = vect_build_one_gather_load_call - (vinfo, stmt_info, gsi, &gs_info, + (vinfo, stmt_info, vectype, gsi, &gs_info, dataref_ptr, vec_offsets[2 * i], final_mask); tree low = make_ssa_name (vectype); gimple_set_lhs (new_stmt, low); @@ -10630,7 +10629,8 @@ vectorizable_load (vec_info *vinfo, } new_stmt = vect_build_one_gather_load_call - (vinfo, stmt_info, gsi, &gs_info, dataref_ptr, + (vinfo, stmt_info, vectype, gsi, &gs_info, + dataref_ptr, vec_offsets[2 * i + 1], final_mask); tree high = make_ssa_name (vectype); gimple_set_lhs (new_stmt, high); @@ -10673,7 +10673,7 @@ vectorizable_load (vec_info *vinfo, new_stmt, gsi); } new_stmt = vect_build_one_gather_load_call - (vinfo, stmt_info, gsi, &gs_info, + (vinfo, stmt_info, vectype, gsi, &gs_info, dataref_ptr, vec_offset, final_mask); data_ref = NULL_TREE; }