[llvm] r244551 - WebAssembly: simply assert on SNaN and NaNs with payloads

JF Bastien via llvm-commits llvm-commits at lists.llvm.org
Mon Aug 10 17:49:20 PDT 2015


Author: jfb
Date: Mon Aug 10 19:49:20 2015
New Revision: 244551

URL: http://llvm.org/viewvc/llvm-project?rev=244551&view=rev
Log:
WebAssembly: simply assert on SNaN and NaNs with payloads

Summary: convertToHexString doesn't represent them correctly at this point in time. This is a follow-up to sunfish's suggestion in D11914.

Subscribers: llvm-commits, sunfish, jfb

Differential Revision: http://reviews.llvm.org/D11925

Modified:
    llvm/trunk/lib/Target/WebAssembly/WebAssemblyAsmPrinter.cpp
    llvm/trunk/test/CodeGen/WebAssembly/immediates.ll

Modified: llvm/trunk/lib/Target/WebAssembly/WebAssemblyAsmPrinter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/WebAssembly/WebAssemblyAsmPrinter.cpp?rev=244551&r1=244550&r2=244551&view=diff
==============================================================================
--- llvm/trunk/lib/Target/WebAssembly/WebAssemblyAsmPrinter.cpp (original)
+++ llvm/trunk/lib/Target/WebAssembly/WebAssemblyAsmPrinter.cpp Mon Aug 10 19:49:20 2015
@@ -117,10 +117,11 @@ void WebAssemblyAsmPrinter::EmitInstruct
       static const size_t BufBytes = 128;
       char buf[BufBytes];
       APFloat FP = MO.getFPImm()->getValueAPF();
-      const APFloat CanonicalNaN = APFloat::getQNaN(FP.getSemantics());
-      if (FP.isNaN() && !FP.bitwiseIsEqual(CanonicalNaN))
-        // WebAssembly only has NaNs that are positive, quiet, without payload.
-        FP = CanonicalNaN;
+      if (FP.isNaN())
+        assert((FP.bitwiseIsEqual(APFloat::getQNaN(FP.getSemantics())) ||
+                FP.bitwiseIsEqual(
+                    APFloat::getQNaN(FP.getSemantics(), /*Negative=*/true))) &&
+               "convertToHexString handles neither SNaN nor NaN payloads");
       // Use C99's hexadecimal floating-point representation.
       auto Written =
           FP.convertToHexString(buf, /*hexDigits=*/0, /*upperCase=*/false,

Modified: llvm/trunk/test/CodeGen/WebAssembly/immediates.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/WebAssembly/immediates.ll?rev=244551&r1=244550&r2=244551&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/WebAssembly/immediates.ll (original)
+++ llvm/trunk/test/CodeGen/WebAssembly/immediates.ll Mon Aug 10 19:49:20 2015
@@ -97,7 +97,7 @@ define float @nan_f32() {
 }
 
 ; CHECK-LABEL: negnan_f32:
-; CHECK-NEXT: (setlocal @0 (immediate nan))
+; CHECK-NEXT: (setlocal @0 (immediate -nan))
 ; CHECK-NEXT: (return @0)
 define float @negnan_f32() {
   ret float 0xFFF8000000000000
@@ -153,7 +153,7 @@ define double @nan_f64() {
 }
 
 ; CHECK-LABEL: negnan_f64:
-; CHECK-NEXT: (setlocal @0 (immediate nan))
+; CHECK-NEXT: (setlocal @0 (immediate -nan))
 ; CHECK-NEXT: (return @0)
 define double @negnan_f64() {
   ret double 0xFFF8000000000000




More information about the llvm-commits mailing list