[llvm-dev] [FPEnv] FNEG instruction

Cameron McInally via llvm-dev llvm-dev at lists.llvm.org
Wed Sep 26 13:04:31 PDT 2018


On Wed, Sep 26, 2018 at 3:36 PM Kevin Neal <Kevin.Neal at sas.com> wrote:

> I have no example side effects in hand. But LLVM targets a bunch of
> architectures, and who knows what the future holds. So it may be prudent to
> not promise too much so as to leave ourselves an escape hatch.
>
>
>
> Doesn’t LLVM target some chips that have floating point instruction sets
> that are not IEEE compliant? Can we be certain that no new LLVM target will
> ever have to jump through hoops to avoid side effects simply because we
> promised that fneg would never, ever have any side effects?
>
>
>
> Assuming we do promise no side effects from fneg, ever and forever, then
> the documentation should say that clearly.
>

Maybe I'm misunderstanding the LangRef copy, but the promise of 'no side
effects' is really saying that trapping behavior is not guaranteed to be
preserved under optimizations. FNEG(X) never has side effects (it never
traps). It is a bitwise operation.

Now changing FNEG(X) into FSUB(-0.0, X) is a different conversation. Those
two operations do not give bitwise identical results for all inputs. So,
it's really not safe to replace one with the other [well, arguably only
FNEG(X) --> FSUB(-0.0, X) isn't safe]. So, as long as we don't make an
unsafe transformation, which can set incorrect bits if we do make it, then
I don't foresee a problem with side-effects on FNEG.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20180926/0190a7cb/attachment.html>


More information about the llvm-dev mailing list