> -----Original Message----- > From: Richard Biener <rguent...@suse.de> > Sent: Friday, August 1, 2025 6:06 AM > To: Tamar Christina <tamar.christ...@arm.com> > Cc: gcc-patches@gcc.gnu.org > Subject: Re: [PATCH 2/2] Put SLP_TREE_SIMD_CLONE_INFO into type specifc data > > > > > Am 31.07.2025 um 17:43 schrieb Tamar Christina <tamar.christ...@arm.com>: > > > > > >> > >> -----Original Message----- > >> From: Richard Biener <rguent...@suse.de> > >> Sent: Thursday, July 31, 2025 3:09 PM > >> To: gcc-patches@gcc.gnu.org > >> Cc: Tamar Christina <tamar.christ...@arm.com> > >> Subject: [PATCH 2/2] Put SLP_TREE_SIMD_CLONE_INFO into type specifc data > >> > >> The following adds vect_simd_clone_data as a container for vect > >> type specific data for vectorizable_simd_clone_call and moves > >> SLP_TREE_SIMD_CLONE_INFO there. > >> > >> Bootstrapped and tested on x86_64-unknown-linux-gnu. > >> > >> Any further considerations? > >> > > > > Looks much better now! > > > >> Thanks, > >> Richard. > >> > >> * tree-vectorizer.h (vect_simd_clone_data): New. > >> (_slp_tree::simd_clone_info): Remove. > >> (SLP_TREE_SIMD_CLONE_INFO): Likewise. > >> * tree-vect-slp.cc (_slp_tree::_slp_tree): Adjust. > >> (_slp_tree::~_slp_tree): Likewise. > >> * tree-vect-stmts.cc (vectorizable_simd_clone_call): Use > >> tyupe specific data to store SLP_TREE_SIMD_CLONE_INFO. > >> --- > >> gcc/tree-vect-slp.cc | 2 -- > >> gcc/tree-vect-stmts.cc | 7 ++++--- > >> gcc/tree-vectorizer.h | 19 +++++++++++++------ > >> 3 files changed, 17 insertions(+), 11 deletions(-) > >> > >> diff --git a/gcc/tree-vect-slp.cc b/gcc/tree-vect-slp.cc > >> index 233543214fa..4038fe84e87 100644 > >> --- a/gcc/tree-vect-slp.cc > >> +++ b/gcc/tree-vect-slp.cc > >> @@ -118,7 +118,6 @@ _slp_tree::_slp_tree () > >> SLP_TREE_CHILDREN (this) = vNULL; > >> SLP_TREE_LOAD_PERMUTATION (this) = vNULL; > >> SLP_TREE_LANE_PERMUTATION (this) = vNULL; > >> - SLP_TREE_SIMD_CLONE_INFO (this) = vNULL; > >> SLP_TREE_DEF_TYPE (this) = vect_uninitialized_def; > >> SLP_TREE_CODE (this) = ERROR_MARK; > >> this->ldst_lanes = false; > >> @@ -150,7 +149,6 @@ _slp_tree::~_slp_tree () > >> SLP_TREE_VEC_DEFS (this).release (); > >> SLP_TREE_LOAD_PERMUTATION (this).release (); > >> SLP_TREE_LANE_PERMUTATION (this).release (); > >> - SLP_TREE_SIMD_CLONE_INFO (this).release (); > >> if (this->failed) > >> free (failed); > >> if (this->data) > >> diff --git a/gcc/tree-vect-stmts.cc b/gcc/tree-vect-stmts.cc > >> index 3fa4585160c..24a3030bd9f 100644 > >> --- a/gcc/tree-vect-stmts.cc > >> +++ b/gcc/tree-vect-stmts.cc > >> @@ -3892,9 +3892,9 @@ vectorizable_simd_clone_call (vec_info *vinfo, > >> stmt_vec_info stmt_info, > >> if (nargs == 0) > >> return false; > >> > >> - vec<tree>& simd_clone_info = SLP_TREE_SIMD_CLONE_INFO (slp_node); > >> - if (cost_vec) > >> - simd_clone_info.truncate (0); > >> + vect_simd_clone_data _data; > >> + vect_simd_clone_data &data = slp_node->get_data (_data); > >> + vec<tree>& simd_clone_info = data.simd_clone_info; > > > > Yeah it's indeed a shame we can't avoid the local, we can always hide the > sequence > > Behind a macro, something like > > > > EXPAND_SLP_DATA (data, slp_node) which expands to > > > > vect_simd_clone_data _data; > > vect_simd_clone_data &data = slp_node->get_data (_data); > > > > but I honestly don't mind seeing the expansion explicitly. > > Yeah. In case we split the function into a analysis and transform one this > tiny > ugliness would go away. > > >> arginfo.reserve (nargs, true); > >> auto_vec<slp_tree> slp_op; > >> slp_op.safe_grow_cleared (nargs); > >> @@ -4291,6 +4291,7 @@ vectorizable_simd_clone_call (vec_info *vinfo, > >> stmt_vec_info stmt_info, > >> } > >> > >> SLP_TREE_TYPE (slp_node) = call_simd_clone_vec_info_type; > >> + slp_node->data = new vect_simd_clone_data (std::move (_data)); > > > > Do we still need the std::move here? doesn't the move constructor already > > take care of it? > > Without it it complains I call the deleted non-move CTOR, so apparently it is > necessary. >
Ah because it's an lvalue and move constructors take only rvalues. Fair enough. Looks good to me FWIW! Thanks, Tamar > Richard > > > Otherwise looks good to me. > > > > Thanks for the cleanup! > > > > Tamar > > > >> DUMP_VECT_SCOPE ("vectorizable_simd_clone_call"); > >> /* vect_model_simple_cost (vinfo, 1, slp_node, cost_vec); */ > >> return true; > >> diff --git a/gcc/tree-vectorizer.h b/gcc/tree-vectorizer.h > >> index 63ba7c1e8f5..b8312b8d6bd 100644 > >> --- a/gcc/tree-vectorizer.h > >> +++ b/gcc/tree-vectorizer.h > >> @@ -243,6 +243,19 @@ struct vect_data { > >> virtual ~vect_data () = default; > >> }; > >> > >> +/* Analysis data from vectorizable_simd_clone_call for > >> + call_simd_clone_vec_info_type. */ > >> +struct vect_simd_clone_data : vect_data { > >> + virtual ~vect_simd_clone_data () = default; > >> + vect_simd_clone_data () = default; > >> + vect_simd_clone_data (vect_simd_clone_data &&other) = default; > >> + > >> + /* Selected SIMD clone's function info. First vector element > >> + is SIMD clone's function decl, followed by a pair of trees (base + > >> step) > >> + for linear arguments (pair of NULLs for other arguments). */ > >> + auto_vec<tree> simd_clone_info; > >> +}; > >> + > >> /* A computation tree of an SLP instance. Each node corresponds to a > >> group of > >> stmts to be packed in a SIMD stmt. */ > >> struct _slp_tree { > >> @@ -271,11 +284,6 @@ struct _slp_tree { > >> denotes the number of output lanes. */ > >> lane_permutation_t lane_permutation; > >> > >> - /* Selected SIMD clone's function info. First vector element > >> - is SIMD clone's function decl, followed by a pair of trees (base + > >> step) > >> - for linear arguments (pair of NULLs for other arguments). */ > >> - vec<tree> simd_clone_info; > >> - > >> tree vectype; > >> /* Vectorized defs. */ > >> vec<tree> vec_defs; > >> @@ -395,7 +403,6 @@ public: > >> #define SLP_TREE_NUMBER_OF_VEC_STMTS(S) (S)->vec_stmts_size > >> #define SLP_TREE_LOAD_PERMUTATION(S) (S)->load_permutation > >> #define SLP_TREE_LANE_PERMUTATION(S) (S)->lane_permutation > >> -#define SLP_TREE_SIMD_CLONE_INFO(S) (S)->simd_clone_info > >> #define SLP_TREE_DEF_TYPE(S) (S)->def_type > >> #define SLP_TREE_VECTYPE(S) (S)->vectype > >> #define SLP_TREE_REPRESENTATIVE(S) (S)->representative > >> -- > >> 2.43.0