"H.J. Lu" <hjl.to...@gmail.com> writes: > On Thu, Sep 14, 2017 at 4:22 AM, Richard Sandiford > <richard.sandif...@linaro.org> wrote: >> This patch adds a vectoriser helper routine to calculate how >> many copies of a vector statement we need. At present this >> is always: >> >> LOOP_VINFO_VECT_FACTOR (loop_vinfo) / TYPE_VECTOR_SUBPARTS (vectype) >> >> but later patches add other cases. Another benefit of using >> a helper routine is that it can assert that the division is >> exact (which it must be). >> >> Tested on aarch64-linux-gnu, x86_64-linux-gnu and powerpc64le-linux-gnu. >> OK to install? >> >> Richard >> >> >> 2017-09-14 Richard Sandiford <richard.sandif...@linaro.org> >> Alan Hayward <alan.hayw...@arm.com> >> David Sherwood <david.sherw...@arm.com> >> >> gcc/ >> * tree-vectorizer.h (vect_get_num_copies): New function. >> * tree-vect-data-refs.c (vect_get_data_access_cost): Use it. >> * tree-vect-loop.c (vectorizable_reduction): Likewise. >> (vectorizable_induction): Likewise. >> (vectorizable_live_operation): Likewise. >> * tree-vect-stmts.c (vectorizable_mask_load_store): Likewise. >> (vectorizable_bswap): Likewise. >> (vectorizable_call): Likewise. >> (vectorizable_conversion): Likewise. >> (vectorizable_assignment): Likewise. >> (vectorizable_shift): Likewise. >> (vectorizable_operation): Likewise. >> (vectorizable_store): Likewise. >> (vectorizable_load): Likewise. >> (vectorizable_condition): Likewise. >> (vectorizable_comparison): Likewise. >> (vect_analyze_stmt): Pass the slp node to >> vectorizable_live_operation. >> >> Index: gcc/tree-vectorizer.h >> =================================================================== >> --- gcc/tree-vectorizer.h 2017-09-14 11:25:32.166167193 +0100 >> +++ gcc/tree-vectorizer.h 2017-09-14 11:27:50.352072753 +0100 >> @@ -1076,6 +1076,20 @@ unlimited_cost_model (loop_p loop) >> return (flag_vect_cost_model == VECT_COST_MODEL_UNLIMITED); >> } >> >> +/* Return the number of copies needed for loop vectorization when >> + a statement operates on vectors of type VECTYPE. This is the >> + vectorization factor divided by the number of elements in >> + VECTYPE and is always known at compile time. */ >> + >> +static inline unsigned int >> +vect_get_num_copies (loop_vec_info loop_vinfo, tree vectype) >> +{ >> + gcc_checking_assert (LOOP_VINFO_VECT_FACTOR (loop_vinfo) >> + % TYPE_VECTOR_SUBPARTS (vectype) == 0); >> + return (LOOP_VINFO_VECT_FACTOR (loop_vinfo) >> + / TYPE_VECTOR_SUBPARTS (vectype)); >> +} >> + >> /* Source location */ >> extern source_location vect_location; >> > > I believe this caused: > > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82228
Yeah, it did, sorry. I've just committed a fix. Thanks, Richard