On Thu, Feb 18, 2021 at 1:21 PM Hans-Peter Nilsson <h...@axis.com> wrote:
>
> > From: Richard Biener via Gcc-patches <gcc-patches@gcc.gnu.org>
> > Date: Thu, 18 Feb 2021 11:12:26 +0100
>
> > On Thu, Feb 18, 2021 at 12:35 AM Hans-Peter Nilsson via Gcc-patches
> > <gcc-patches@gcc.gnu.org> wrote:
> > >
> > > If we're not going to eliminate the clz, it's better for the
> > > comparison to use that result than its input, so we don't
> > > extend the lifetime of the input.  Also, an additional use
> > > of the result is more likely cheaper than a compare of the
> > > input, in particular considering that the clz may have made
> > > available a non-zero condition matching the original use.
> >
> > Of course the non-zero compare can execute concurrently
> > with the clz if we use the input which can result in faster
> > operation.  It's one of the many cases where local folding
> > doesn't tell us enough.  One of the usual issues with
> > single_use checks is that the IL is not fully DCEd while
> > we fold it and thus dead uses can make sth !single_use
> > even though it really is single_use.
> >
> > Also if there's a use of the input live at the point of the
> > compare we want to replace it's likely better to do the
> > transform.
>
> Yeah, all depending on the code context.  I guess these
> simple match.pd transformations will grow some conditions.
>
> > > The "s" modifier doesn't stop this situation, as the
> > > transformation wouldn't result in "an expression with more
> > > than one operator"; a gating single_use condition on the
> > > result is necessary.
> >
> > Note that :s was done this way for the use in VN where
> > we can this way CSE c != 0 with an earlier a >= 0.
> >
> > It might be an interesting idea to allow match.pd consumers
> > to "switch" behavior of :s according to their needs.
>
> Like, as a heuristic for a non-ooo-target, to mean single_use?
> Yes, good idea!

More like have VN the existing semantics but fold_stmt treat
it as single_use for example.

> > > Regtested cris-elf and x86_64-linux.
> > > Ok to commit?
> >
> > OK.
>
> Done as a2ef38b1f94d, thanks for the review.
>
> > gcc/testsuite:
> >         PR tree-optimization/99142
> >         * testsuite/gcc.dg/tree-ssa/pr99142.c: New test.
>
> JFTR; oops: ^ Spurious "testsuite/" removed.
>
> brgds, H-P

Reply via email to