OSDN Git Service

LLLexer.cpp: Avoid using BitsToDouble() to preserve SNaN like "double 0x7FF4000000000...
authorNAKAMURA Takumi <geek4civic@gmail.com>
Fri, 5 Aug 2016 11:59:49 +0000 (11:59 +0000)
committerNAKAMURA Takumi <geek4civic@gmail.com>
Fri, 5 Aug 2016 11:59:49 +0000 (11:59 +0000)
We should not use double (or float) in the LLVM, unless it is really needed. x87 FP register doesn't preserve SNaN to move the value.

FIXME: APFloat() may have the constructor by raw bit.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@277813 91177308-0d34-0410-b5e6-96231b3b80d8

lib/AsmParser/LLLexer.cpp

index 980ae1e..c118ecf 100644 (file)
@@ -871,7 +871,8 @@ lltok::Kind LLLexer::Lex0x() {
     // HexFPConstant - Floating point constant represented in IEEE format as a
     // hexadecimal number for when exponential notation is not precise enough.
     // Half, Float, and double only.
-    APFloatVal = APFloat(BitsToDouble(HexIntToVal(TokStart + 2, CurPtr)));
+    APFloatVal = APFloat(APFloat::IEEEdouble,
+                         APInt(64, HexIntToVal(TokStart + 2, CurPtr)));
     return lltok::APFloat;
   }