On Tue, Jun 27, 2017 at 1:58 PM, Richard Biener <richard.guent...@gmail.com> wrote: > On Fri, Jun 23, 2017 at 12:10 PM, Bin.Cheng <amker.ch...@gmail.com> wrote: >> On Mon, Jun 12, 2017 at 6:02 PM, Bin Cheng <bin.ch...@arm.com> wrote: >>> Hi, >>> I was asked by upstream to split the loop distribution patch into small >>> ones. >>> It is hard because data structure and algorithm are closely coupled >>> together. >>> Anyway, this is the patch series with smaller patches. Basically I tried to >>> separate data structure and bug-fix changes apart with one as the main >>> patch. >>> Note I only made necessary code refactoring in order to separate patch, >>> apart >>> from that, there is no change against the last version. >>> >>> This is the first patch introducing new internal function >>> IFN_LOOP_DIST_ALIAS. >>> GCC will distribute loops under condition of this function call. >>> >>> Bootstrap and test on x86_64 and AArch64. Is it OK? >> Hi, >> I need to update this patch fixing an issue in >> vect_loop_dist_alias_call. The previous patch fails to find some >> IFN_LOOP_DIST_ALIAS calls. >> >> Bootstrap and test in series. Is it OK? > > So I wonder if we really need to track ldist_alias_id or if we can do sth Yes, it is needed because otherwise we probably falsely trying to search for IFN_LOOP_DIST_ALIAS for a normal (not from distribution) loop.
> more "general", like tracking a copy_of or origin and then directly > go to nearest_common_dominator (loop->header, copy_of->header) > to find the controlling condition? I tend to not record any pointer in loop structure, it can easily go dangling for a across passes data structure. As far as memory usage is concerned. I actually don't need a whole integer to record the loop num. I can simply restrict number of distributions in one function to at most 256, and record such id in a char field in struct loop? Does this sounds better? Thanks, bin > > That said "ldist_alias_id" is a bit too narrow of purpose to "waste" > an int inside struct loop? I'd set copy_of/origi in loop_version for example. > 'origin' would probably be better given the ldist cases aren't really > full "copies". > > fold_loop_dist_alias_call should re-use / rename fold_loop_vectorized_call > by just passing folded_value to it. > > Richard. > >> Thanks, >> bin >>> >>> Thanks, >>> bin >>> 2017-06-07 Bin Cheng <bin.ch...@arm.com> >>> >>> * cfgloop.h (struct loop): New field ldist_alias_id. >>> * cfgloopmanip.c (lv_adjust_loop_entry_edge): Comment change. >>> * internal-fn.c (expand_LOOP_DIST_ALIAS): New function. >>> * internal-fn.def (LOOP_DIST_ALIAS): New. >>> * tree-vectorizer.c (vect_loop_dist_alias_call): New function. >>> (fold_loop_dist_alias_call): New function. >>> (vectorize_loops): Fold IFN_LOOP_DIST_ALIAS call depending on >>> successful vectorization or not.