On Tue, 22 Jul 2025, Richard Biener wrote: > The following makes dataref analysis not set STMT_VINFO_VECTYPE. > This leaves the field ready for taking when vectorizable_* > transition to use SLP_TREE_VECTYPE. It also delays determining > the vectorization mode a little bit - SLP build will first do > that then. I have kept a check that there is any vector type > for the scalar type in vect_analyze_data_refs, that handles > early outs for aggregate and existing vector types.
This series also runs into RVV ICEs, like for gcc.target/riscv/rvv/autovec/gather-scatter/gather_load_32-1.c we end up in #0 0x000000000136d668 in tree_class_check (__t=<tree 0x0>, __class=tcc_type, __f=0x47483d8 "/space/rguenther/src/gcc/gcc/config/riscv/riscv-vector-costs.cc", __l=611, __g=0x4748f00 <riscv_vector::need_additional_vector_vars_p(_stmt_vec_info*)::__FUNCTION__> "need_additional_vector_vars_p") at /space/rguenther/src/gcc/gcc/tree.h:3877 #1 0x00000000025081c6 in riscv_vector::need_additional_vector_vars_p (stmt_info=0x62be540) at /space/rguenther/src/gcc/gcc/config/riscv/riscv-vector-costs.cc:611 #2 0x0000000002508b5e in riscv_vector::update_local_live_ranges (vinfo=0x6139930, program_points_per_bb=..., live_ranges_per_bb=..., biggest_mode=0x7fffffffbdac) at /space/rguenther/src/gcc/gcc/config/riscv/riscv-vector-costs.cc:766 #3 0x0000000002509066 in riscv_vector::has_unexpected_spills_p (loop_vinfo=0x6139930) at /space/rguenther/src/gcc/gcc/config/riscv/riscv-vector-costs.cc:834 #4 0x00000000025094b9 in riscv_vector::costs::record_potential_unexpected_spills (this=0x61f1d40, loop_vinfo=0x6139930) at /space/rguenther/src/gcc/gcc/config/riscv/riscv-vector-costs.cc:922 #5 0x0000000002509418 in riscv_vector::costs::analyze_loop_vinfo (this=0x61f1d40, loop_vinfo=0x6139930) at /space/rguenther/src/gcc/gcc/config/riscv/riscv-vector-costs.cc:904 where we access STMT_VINFO_VECTYPE (that's supposed to go away). Basically all of costs::analyze_loop_vinfo would need to be re-done. I also see it does compute post-dominators and scrap them for each costing done! For larger functions with many loops that's going to be slooooow (it's O(function-size)). I think of SPEC WRF here. It's used only in max_number_of_live_regs which does /* Collect user explicit RVV type. */ auto_vec<basic_block> all_preds = get_all_dominated_blocks (CDI_POST_DOMINATORS, bb); tree t; FOR_EACH_SSA_NAME (i, t, cfun) { WTF does this do? We are processing a single loop [nest], we are in LC SSA, why do we care for any SSA uses outside of the loop body!? It _does_ all look like a property that can be incrementally updated during the add_stmt hook calls? I do wonder if anybody reviews this stuff to make sense :/ Richard. > * tree-vect-data-refs.cc (vect_analyze_data_refs): Do not > set STMT_VINFO_VECTYPE. > --- > gcc/tree-vect-data-refs.cc | 17 ++--------------- > 1 file changed, 2 insertions(+), 15 deletions(-) > > diff --git a/gcc/tree-vect-data-refs.cc b/gcc/tree-vect-data-refs.cc > index b62498b34bd..89d5426bb11 100644 > --- a/gcc/tree-vect-data-refs.cc > +++ b/gcc/tree-vect-data-refs.cc > @@ -5242,10 +5242,9 @@ vect_analyze_data_refs (vec_info *vinfo, bool *fatal) > STMT_VINFO_DR_STEP_ALIGNMENT (stmt_info)); > } > > - /* Set vectype for STMT. */ > + /* Check whether there is any vectype for STMT. */ > scalar_type = TREE_TYPE (DR_REF (dr)); > - tree vectype = get_vectype_for_scalar_type (vinfo, scalar_type); > - if (!vectype) > + if (! get_related_vectype_for_scalar_type (VOIDmode, scalar_type)) > { > if (dump_enabled_p ()) > { > @@ -5273,18 +5272,6 @@ vect_analyze_data_refs (vec_info *vinfo, bool *fatal) > " scalar_type: %T\n", > stmt_info->stmt, scalar_type); > } > - else > - { > - if (dump_enabled_p ()) > - dump_printf_loc (MSG_NOTE, vect_location, > - "got vectype for stmt: %G%T\n", > - stmt_info->stmt, vectype); > - } > - > - /* Leave the BB vectorizer to pick the vector type later, based on > - the final dataref group size and SLP node size. */ > - if (is_a <loop_vec_info> (vinfo)) > - STMT_VINFO_VECTYPE (stmt_info) = vectype; > > if (gatherscatter != SG_NONE) > { > -- Richard Biener <rguent...@suse.de> SUSE Software Solutions Germany GmbH, Frankenstrasse 146, 90461 Nuernberg, Germany; GF: Ivo Totev, Andrew McDonald, Werner Knoblich; (HRB 36809, AG Nuernberg)