[llvm-dev] how to simplify FP ops with an undef operand?
Philip Reames via llvm-dev
llvm-dev at lists.llvm.org
Fri Mar 2 09:27:38 PST 2018
This bit of confusion comes up regularly. It would be really good to
get this documented in either the langref or something linked from it.
Philip
On 03/02/2018 08:34 AM, Stephen Canon via llvm-dev wrote:
> To further clarify: IEEE 754 calls the process of signaling “raising
> an exception” and “exception handling", but this is not what anyone
> else means by “exception”. Under “default exception handling”—what the
> llvm instructions assume—it is just setting a sticky bit in a status
> register that you cannot even read under the assumptions of the llvm
> instructions, hence operations on sNaN are side-effect free in the
> LLVM instruction model, just like any other input.
>
>> On Mar 2, 2018, at 11:31 AM, Stephen Canon via llvm-dev
>> <llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>> wrote:
>>
>> Thanks for expanding, Chris. Responses inline.
>>
>>> On Mar 2, 2018, at 12:32 AM, Chris Lattner via llvm-dev
>>> <llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>> wrote:
>>
>> <snip>
>>
>>> - Because LLVM reorders and speculates the instruction forms, and
>>> because IEEE defines the corresponding IEEE operations as trapping
>>> on SNaNs, it is clear that SNaNs are outside of the domain of these
>>> LLVM operations. Either speculation is ok or trapping on SNaN is
>>> ok, pick one… (and we already did :)
>>
>> I see the source of confusion now.
>>
>> IEEE does not define any operations as trapping on sNaN. It defines
>> operations as raising the invalid flag on sNaN, which is *not a trap*
>> under default exception handling. It is exactly the same as raising
>> the underflow, overflow, inexact, or division-by-zero flag.
>>
>> Any llvm /instruction/ necessarily assumes default exception
>> handling—otherwise, we would be using the constrained intrinsics
>> instead. So there’s no reason for sNaN inputs to ever be undef with
>> the llvm instructions. They are just NaNs.
>>
>> – Steve
>> _______________________________________________
>> LLVM Developers mailing list
>> llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>
>
>
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20180302/4e3c3869/attachment.html>
More information about the llvm-dev
mailing list