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 ──────────────────────────────────────────────────────────────────────────