diff options
| author | Kevin P. Neal <kevin.neal@sas.com> | 2019-12-17 12:30:41 -0500 |
|---|---|---|
| committer | Kevin P. Neal <kevin.neal@sas.com> | 2019-12-17 12:32:28 -0500 |
| commit | 2f40f5681d0d896e592d1b6738d1df17228c68a8 (patch) | |
| tree | 5ec03e851aa5b9202edc1cedc257690786e01455 /llvm | |
| parent | ff6567cc7720655de9d8731fb3005d1aaccec96a (diff) | |
| download | bcm5719-llvm-2f40f5681d0d896e592d1b6738d1df17228c68a8.tar.gz bcm5719-llvm-2f40f5681d0d896e592d1b6738d1df17228c68a8.zip | |
[FPEnv] IRBuilder support for constrained sitofp/uitofp.
Diffstat (limited to 'llvm')
| -rw-r--r-- | llvm/include/llvm/IR/IRBuilder.h | 6 | ||||
| -rw-r--r-- | llvm/unittests/IR/IRBuilderTest.cpp | 10 |
2 files changed, 16 insertions, 0 deletions
diff --git a/llvm/include/llvm/IR/IRBuilder.h b/llvm/include/llvm/IR/IRBuilder.h index 4d3abac87c4..8179e388fa1 100644 --- a/llvm/include/llvm/IR/IRBuilder.h +++ b/llvm/include/llvm/IR/IRBuilder.h @@ -2021,10 +2021,16 @@ public: } Value *CreateUIToFP(Value *V, Type *DestTy, const Twine &Name = ""){ + if (IsFPConstrained) + return CreateConstrainedFPCast(Intrinsic::experimental_constrained_uitofp, + V, DestTy, nullptr, Name); return CreateCast(Instruction::UIToFP, V, DestTy, Name); } Value *CreateSIToFP(Value *V, Type *DestTy, const Twine &Name = ""){ + if (IsFPConstrained) + return CreateConstrainedFPCast(Intrinsic::experimental_constrained_sitofp, + V, DestTy, nullptr, Name); return CreateCast(Instruction::SIToFP, V, DestTy, Name); } diff --git a/llvm/unittests/IR/IRBuilderTest.cpp b/llvm/unittests/IR/IRBuilderTest.cpp index 1ea92940b88..4ceff2d69b8 100644 --- a/llvm/unittests/IR/IRBuilderTest.cpp +++ b/llvm/unittests/IR/IRBuilderTest.cpp @@ -222,6 +222,16 @@ TEST_F(IRBuilderTest, ConstrainedFP) { II = cast<IntrinsicInst>(VInt); EXPECT_EQ(II->getIntrinsicID(), Intrinsic::experimental_constrained_fptosi); + VDouble = Builder.CreateUIToFP(VInt, Builder.getDoubleTy()); + ASSERT_TRUE(isa<IntrinsicInst>(VDouble)); + II = cast<IntrinsicInst>(VDouble); + EXPECT_EQ(II->getIntrinsicID(), Intrinsic::experimental_constrained_uitofp); + + VDouble = Builder.CreateSIToFP(VInt, Builder.getDoubleTy()); + ASSERT_TRUE(isa<IntrinsicInst>(VDouble)); + II = cast<IntrinsicInst>(VDouble); + EXPECT_EQ(II->getIntrinsicID(), Intrinsic::experimental_constrained_sitofp); + V = Builder.CreateFPTrunc(VDouble, Type::getFloatTy(Ctx)); ASSERT_TRUE(isa<IntrinsicInst>(V)); II = cast<IntrinsicInst>(V); |

