On Thu, May 20, 2021 at 12:09 PM Kewen.Lin <li...@linux.ibm.com> wrote:
>
> on 2021/5/20 下午5:30, Christophe Lyon wrote:
> > On Thu, 20 May 2021 at 10:52, Kewen.Lin via Gcc-patches
> > <gcc-patches@gcc.gnu.org> wrote:
> >>
> >> on 2021/5/19 下午6:01, Richard Biener wrote:
> >>> On Wed, May 19, 2021 at 11:47 AM Kewen.Lin <li...@linux.ibm.com> wrote:
> >>>>
> >>>> Hi Richi,
> >>>>
> >>>> on 2021/5/19 下午4:15, Richard Biener wrote:
> >>>>> On Wed, May 19, 2021 at 8:20 AM Kewen.Lin <li...@linux.ibm.com> wrote:
> >>>>>>
> >>>>>> Hi,
> >>>>>>
> >>>>>> This patch is to replace the current hardcoded weight factor 50
> >>>>>> for those statements in an inner loop relative to the loop being
> >>>>>> vectorized with a specific parameter vect-inner-loop-weight-factor.
> >>>>>>
> >>>>>> The motivation behind this change is: if targets want to have one
> >>>>>> unique function to gather some information in each add_stmt_cost
> >>>>>> call, no matter that it's put before or after the cost tweaking
> >>>>>> part for inner loop, it may have the need to adjust (expand or
> >>>>>> shrink) the gathered data as the factor.  Now the factor is
> >>>>>> hardcoded, it's not easily maintained.  Since it's possible that
> >>>>>> targets have their own decisions on this costing like the others,
> >>>>>> I used parameter instead of one unique macro here.
> >>>>>>
> >>>>>> Testing is ongoing, is it ok for trunk if everything goes well?
> >>>>>
> >>>>> Certainly an improvement.  I suppose we might want to put
> >>>>> the factor into vinfo->inner_loop_cost_factor.  That way
> >>>>> we could adjust it easily in common code in the vectorizer
> >>>>> when we for example have (non-guessed) profile data.
> >>>>>
> >>>>> "weight_factor" is kind-of double-speak and I'm missing 'cost' ...
> >>>>> so, bike-shedding to vect_inner_loop_cost_factor?
> >>>>>
> >>>>> Just suggestions - as said, the patch is an improvement already.
> >>>>>
> >>>>
> >>>> Thanks for your nice suggestions!  I've updated the patch accordingly
> >>>> and attached it.  Does it look better to you?
> >>>
> >>> Minor nit:
> >>>
> >>> +@item vect-inner-loop-cost-factor
> >>> +The factor which loop vectorizer uses to over weight those statements in
> >>> +an inner loop relative to the loop being vectorized.
> >>> +
> >>>
> >>> the default value should be documented here, not..
> >>>
> >>> +-param=vect-inner-loop-cost-factor=
> >>> +Common Joined UInteger Var(param_vect_inner_loop_cost_factor)
> >>> Init(50) IntegerRange(1, 999999) Param Optimization
> >>> +Indicates the factor which loop vectorizer uses to over weight those
> >>> statements in an inner loop relative to the loop being vectorized.
> >>> The default value is 50.
> >>> +
> >>>
> >>> here (based on statistical analysis of existing cases).  Also the
> >>> params.opt docs
> >>> should be the "brief" one - but for simplicity simply make both docs 
> >>> identical
> >>> (apart from the default value doc).  I suggest
> >>>
> >>> "The factor which the loop vectorizer applies to the cost of statements
> >>> in an inner loop relative to the loop being vectorized."
> >>>
> >>
> >> Thanks for catching this and the suggestion!
> >>
> >> Bootstrapped/regtested on powerpc64le-linux-gnu P9, x86_64-redhat-linux
> >> and aarch64-linux-gnu.
> >>
> >
> > This breaks the build for arm targets:
> > /tmp/158661_3.tmpdir/aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/config/arm/arm.c:
> > In function 'unsigned int arm_add_stmt_cost(vec_info*, void*, int,
> > vect_cost_for_stmt, _stmt_v
> > ec_info*, tree, int, vect_cost_model_location)':
> > /tmp/158661_3.tmpdir/aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/config/arm/arm.c:12230:4:
> > error: 'loop_vec_info' was not declared in this scope
> >     loop_vec_info loop_vinfo = dyn_cast<loop_vec_info> (vinfo);
> >     ^
> > /tmp/158661_3.tmpdir/aci-gcc-fsf/sources/gcc-fsf/gccsrc/gcc/config/arm/arm.c:12230:18:
> > error: expected ';' before 'loop_vinfo'
> >     loop_vec_info loop_vinfo = dyn_cast<loop_vec_info> (vinfo);
> >
> > Can you fix it?
> >
>
> Oops!  Deeply sorry for that and thanks for the testing!
>
> I just found that unlike the other targets arm.c doesn't include
> "tree-vectorizer.h".  The issue should be fixed with the below patch:
>
> gcc/ChangeLog:
>
>         * config/arm/arm.c: Include head files tree-vectorizer.h and
>         cfgloop.h.
>
> diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c
> index caf4e56b9fe..6ed34fbf627 100644
> --- a/gcc/config/arm/arm.c
> +++ b/gcc/config/arm/arm.c
> @@ -69,6 +69,8 @@
>  #include "gimplify.h"
>  #include "gimple.h"
>  #include "selftest.h"
> +#include "cfgloop.h"
> +#include "tree-vectorizer.h"
>
>  /* This file should be included last.  */
>  #include "target-def.h"
>
>
> Is it counted as a obvious patch?

Please check if you can build a cc1 cross to arm, then yes.

> BR,
> Kewen

Reply via email to