On Monday, 6 September 2021 14:59:27 CEST Richard Biener wrote:
> On Mon, 6 Sep 2021, Matthias Kretz wrote:
> > On Monday, 6 September 2021 14:40:31 CEST Richard Biener wrote:
> > > I'll note that currently a + PAREN_EXPR (b * c) is for example
> > > also not contracted to PAREN_EXPR (FMA (PAREN_EXPR (a), b, c))
> > > even though technically FP contraction is not association.  But
> > > that's an implementation detail that could be changed.  There
> > > are likely other transforms that it prevents as well that are
> > > not assocations, the implementation focus was correctness
> > > as to preventing association, not so much not hindering
> > > unrelated optimizations.  If you run into any such issues
> > > reporting a bugzilla would be welcome.
> > 
> > Thanks, interesting point. I believe it might even be useful to nail down
> > that behavior (i.e. document it and write a test). Because a + b * c
> > evaluates b * c before the addition in any case. So why would anyone add
> > a PAREN_EXPR around b * c?
> 
> At least for integers we have transforms that do a + a * c -> a * (1 + c)
> so one could think of (x/y) + (x/y)*c -> (x/y) * (1 + c) which would
> then have associated the c * (x/y) multiplication ...  Or when
> c is constant then a + a * C can be simplified.

Right given float a, `a + 2.1f * a` is compiled to `3.1f * a` with -ffast-
math. So yes, there's a reason one might want `a + 
__builtin_assoc_barrier(2.1f * a)` without inhibiting contraction. I'll 
investigate more and might submit a PR...

> > We have (std::)fma (__builtin_fma) to explicitly request contraction.
> > PAREN_EXPR seems like a good fit to inhibit contraction.
> 
> OK, I guess it should apply to PAREN_EXPR (a + a) + a as well
> which then does not become 3 * PAREN_EXPR (a).  Likewise
> PAREN_EXPR (a) - a might eventually not become zero (I'm not
> absolutely sure about that ;))

Just tested it. PAREN_EXPR inhibits both transformations.

-- 
──────────────────────────────────────────────────────────────────────────
 Dr. Matthias Kretz                           https://mattkretz.github.io
 GSI Helmholtz Centre for Heavy Ion Research               https://gsi.de
 stdₓ::simd
──────────────────────────────────────────────────────────────────────────

Reply via email to