diff options
| author | Serge Pavlov <sepavloff@gmail.com> | 2021-08-13 16:52:29 +0700 |
|---|---|---|
| committer | Serge Pavlov <sepavloff@gmail.com> | 2021-08-27 18:06:07 +0700 |
| commit | cdbe569fb6cd34e83b695485bfc5786d54b89017 (patch) | |
| tree | 454adc5c91ab3734e427b4c653758318b0ba8ab2 /libcxx/include/__algorithm/includes.h | |
| parent | 199ac3a839d900a5274da019c0dca41aac61cf2c (diff) | |
| download | llvm-cdbe569fb6cd34e83b695485bfc5786d54b89017.zip llvm-cdbe569fb6cd34e83b695485bfc5786d54b89017.tar.gz llvm-cdbe569fb6cd34e83b695485bfc5786d54b89017.tar.bz2 | |
[X86] Implement llvm.isnan(x86_fp80) as unordered comparison
x86_fp80 format allows values that do not fit any of IEEE-754 category.
Previously they were recognized by intrinsic __builtin_isnan as NaNs.
Now this intrinsic is implemented using instruction FXAM, which
distinguish between NaNs and unsupported values. It can make some
programs behave differently.
As a solution, this fix changes lowering of the intrinsic. If floating
point exceptions are ignored, llvm.isnan is lowered into unordered
comparison, as __buildtin_isnan was implemented earlier. In strictfp
functions the intrinsic is lowered using FXAM, which does not raise
exceptions even for signaling NaN, as required by IEEE-754 and C
standards.
Differential Revision: https://reviews.llvm.org/D108037
Diffstat (limited to 'libcxx/include/__algorithm/includes.h')
0 files changed, 0 insertions, 0 deletions
