[llvm-dev] [FPEnv] FNEG instruction

Tim Northover via llvm-dev llvm-dev at lists.llvm.org
Thu Aug 30 08:14:31 PDT 2018


On Thu, 30 Aug 2018 at 05:02, Cameron McInally <cameron.mcinally at nyu.edu> wrote:
>
> On Wed, Aug 29, 2018 at 3:13 PM, Cameron McInally <cameron.mcinally at nyu.edu> wrote:
>>
>> On Wed, Aug 29, 2018 at 1:51 PM, Stephen Canon <scanon at apple.com> wrote:
>>>
>>> On Aug 29, 2018, at 1:22 PM, Cameron McInally via llvm-dev <llvm-dev at lists.llvm.org> wrote:
>>>
>>>
>>> FSUB(-0.0,  NaN) = NaN
>>> FSUB(-0.0, -NaN) = NaN
>>>
>>>
>>> Some specific architecture may define this, or APFloat might, but IEEE 754 does not interpret the sign of NaN except in four operations (copy, abs, negate, copysign), so it doesn’t say anything about these.
>>
>>
>> Good point. I suppose one could argue that the behavior is undefined.
>
>
> Apologies, I was wrong about this one. Just tested the FSUB hardware instruction on all the targets I care about and they all respect the sign on NaNs. I'm not sure how this got into my head...

I don't think it matters for the question at hand, but I tested
AArch64 too and it exhibits the behaviour you were describing. That
is, we'd have problems if an fsub -0.0 was actually CodeGened like
that (it's not, of course).

Tim.


More information about the llvm-dev mailing list