From: NAKAMURA Takumi Date: Fri, 20 Feb 2015 14:24:49 +0000 (+0000) Subject: Constants.cpp: getElementAsAPFloat(): Don't handle constant value via host's float... X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=bb19cd98c668435b84fac8e802b9cfa265a30f64;p=oota-llvm.git Constants.cpp: getElementAsAPFloat(): Don't handle constant value via host's float/double, just handle with APInt/APFloat. x87 FPU didn't keep SNAN, but demoted to QNAN. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@230013 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/IR/Constants.cpp b/lib/IR/Constants.cpp index e87aa3d92ed..1c93265c79d 100644 --- a/lib/IR/Constants.cpp +++ b/lib/IR/Constants.cpp @@ -2715,18 +2715,15 @@ uint64_t ConstantDataSequential::getElementAsInteger(unsigned Elt) const { /// type, return the specified element as an APFloat. APFloat ConstantDataSequential::getElementAsAPFloat(unsigned Elt) const { const char *EltPtr = getElementPointer(Elt); + auto EltVal = *reinterpret_cast(EltPtr); switch (getElementType()->getTypeID()) { default: llvm_unreachable("Accessor can only be used when element is float/double!"); - case Type::FloatTyID: { - const float *FloatPrt = reinterpret_cast(EltPtr); - return APFloat(*const_cast(FloatPrt)); - } - case Type::DoubleTyID: { - const double *DoublePtr = reinterpret_cast(EltPtr); - return APFloat(*const_cast(DoublePtr)); - } + case Type::FloatTyID: + return APFloat(APFloat::IEEEsingle, APInt(32, EltVal)); + case Type::DoubleTyID: + return APFloat(APFloat::IEEEdouble, APInt(64, EltVal)); } }