diff options
| -rw-r--r-- | llvm/lib/VMCore/ConstantFold.cpp | 2 | ||||
| -rw-r--r-- | llvm/unittests/VMCore/ConstantsTest.cpp | 9 | 
2 files changed, 10 insertions, 1 deletions
diff --git a/llvm/lib/VMCore/ConstantFold.cpp b/llvm/lib/VMCore/ConstantFold.cpp index 5c284b746de..27676562d4d 100644 --- a/llvm/lib/VMCore/ConstantFold.cpp +++ b/llvm/lib/VMCore/ConstantFold.cpp @@ -637,7 +637,7 @@ Constant *llvm::ConstantFoldCastInstruction(unsigned opc, Constant *V,    case Instruction::SIToFP:      if (ConstantInt *CI = dyn_cast<ConstantInt>(V)) {        APInt api = CI->getValue(); -      APFloat apf(APInt::getNullValue(DestTy->getPrimitiveSizeInBits())); +      APFloat apf(APInt::getNullValue(DestTy->getPrimitiveSizeInBits()), true);        (void)apf.convertFromAPInt(api,                                    opc==Instruction::SIToFP,                                   APFloat::rmNearestTiesToEven); diff --git a/llvm/unittests/VMCore/ConstantsTest.cpp b/llvm/unittests/VMCore/ConstantsTest.cpp index 8f28407b8de..8277584ba24 100644 --- a/llvm/unittests/VMCore/ConstantsTest.cpp +++ b/llvm/unittests/VMCore/ConstantsTest.cpp @@ -109,5 +109,14 @@ TEST(ConstantsTest, IntSigns) {    EXPECT_EQ(0x3b, ConstantInt::get(Int8Ty, 0x13b)->getSExtValue());  } +TEST(ConstantsTest, FP128Test) { +  const Type *FP128Ty = Type::getFP128Ty(getGlobalContext()); + +  const IntegerType *Int128Ty = Type::getIntNTy(getGlobalContext(), 128); +  Constant *Zero128 = Constant::getNullValue(Int128Ty); +  Constant *X = ConstantExpr::getUIToFP(Zero128, FP128Ty); +  EXPECT_TRUE(isa<ConstantFP>(X)); +} +  }  // end anonymous namespace  }  // end namespace llvm  | 

