Forwarding to public list.

---------- Forwarded message ---------
From: Bin.Cheng <amker.ch...@gmail.com>
Date: Mon, Mar 9, 2020 at 5:07 PM
Subject: Re: [PATCH PR93674]Avoid introducing IV of enumeral type in
case of -fstrict-enums
To: Richard Biener <richard.guent...@gmail.com>


On Tue, Mar 3, 2020 at 5:36 PM Richard Biener
<richard.guent...@gmail.com> wrote:
>
> On Mon, Mar 2, 2020 at 6:14 PM Andrew Pinski <pins...@gmail.com> wrote:
> >
> > On Mon, Mar 2, 2020 at 1:40 AM Richard Biener
> > <richard.guent...@gmail.com> wrote:
> > >
> > > On Mon, Mar 2, 2020 at 9:07 AM bin.cheng <bin.ch...@linux.alibaba.com> 
> > > wrote:
> > > >
> > > > Hi,
> > > > This is a simple fix for PR93674.  It adds cand carefully for enumeral 
> > > > type iv_use in
> > > > case of -fstrict-enums, it also avoids computing, replacing iv_use with 
> > > > the candidate
> > > > so that no IV of enumeral type is introduced with -fstrict-enums option.
> > > >
> > > > Testcase is also added.  Bootstrap and test on x86_64.  Any comment?
> > >
> > > I think we should avoid enum-typed (or bool-typed) IVs in general, not 
> > > just
> > > with -fstrict-enums.  That said, the ENUMERAL_TYPE checks should be
> > > !(INTEGER_TYPE || POINTER_TYPE_P) checks.
> >
> > Maybe even check type_has_mode_precision_p or
> > TYPE_MIN_VALUE/TYPE_MAX_VALUE have the same as the min/max for that
> > precision/signedness.
>
> Indeed we don't want non-mode precision INTEGER_TYPE IVs either.  I wouldn't
> check TYPE_MIN/MAX_VALUE here though.

Thank all of you for the suggestions, I will update the change.
>
> Richard.
>
> > Thanks,
> > Andrew
> >
> > >
> > > +  /* Check if cand can represent values of use for strict enums.  */
> > > +  else if (TREE_CODE (ctype) == ENUMERAL_TYPE && flag_strict_enums)
> > > +    {
> > >
> > > if we don't have enum-typed IV candidates then the computation should
> > > be carried out in INTEGER_TYPE and then be converted to enum type.
> > > So why's this and the may_eliminate_iv hunks necessary?
I was wondering if enum variable is used directly as loop variable?
Note above check
only happens for adding candidate for derived iv use.

Thanks,
bin
> > >
> > > Richard.
> > >
> > > > Thanks,
> > > > bin
> > > > 2020-03-02  Bin Cheng  <bin.ch...@linux.alibaba.com>
> > > >
> > > >         PR tree-optimization/93674
> > > >         * tree-ssa-loop-ivopts.c (add_iv_candidate_for_use): Add 
> > > > candidate
> > > >         for enumeral type iv_use converted from other iv.
> > > >         (get_computation_cost, may_eliminate_iv): Avoid compute, 
> > > > eliminate
> > > >         iv_use with enumeral type iv_cand in case of -fstrict-enums.
> > > >
> > > > gcc/testsuite
> > > > 2020-03-02  Bin Cheng  <bin.ch...@linux.alibaba.com>
> > > >
> > > >         PR tree-optimization/93674
> > > >         * g++.dg/pr93674.C: New test.

Reply via email to