diff options
Diffstat (limited to 'llvm/unittests/IR/IRBuilderTest.cpp')
| -rw-r--r-- | llvm/unittests/IR/IRBuilderTest.cpp | 48 |
1 files changed, 47 insertions, 1 deletions
diff --git a/llvm/unittests/IR/IRBuilderTest.cpp b/llvm/unittests/IR/IRBuilderTest.cpp index 720967cb136..42c0393d382 100644 --- a/llvm/unittests/IR/IRBuilderTest.cpp +++ b/llvm/unittests/IR/IRBuilderTest.cpp @@ -51,10 +51,14 @@ protected: TEST_F(IRBuilderTest, Intrinsics) { IRBuilder<> Builder(BB); Value *V; + Instruction *I; CallInst *Call; IntrinsicInst *II; V = Builder.CreateLoad(GV); + I = cast<Instruction>(Builder.CreateFAdd(V, V)); + I->setHasNoInfs(true); + I->setHasNoNaNs(false); Call = Builder.CreateMinNum(V, V); II = cast<IntrinsicInst>(Call); @@ -64,9 +68,51 @@ TEST_F(IRBuilderTest, Intrinsics) { II = cast<IntrinsicInst>(Call); EXPECT_EQ(II->getIntrinsicID(), Intrinsic::maxnum); - Call = Builder.CreateIntrinsic(Intrinsic::readcyclecounter); + Call = Builder.CreateIntrinsic(Intrinsic::readcyclecounter, {}, {}); II = cast<IntrinsicInst>(Call); EXPECT_EQ(II->getIntrinsicID(), Intrinsic::readcyclecounter); + + Call = Builder.CreateUnaryIntrinsic(Intrinsic::fabs, V); + II = cast<IntrinsicInst>(Call); + EXPECT_EQ(II->getIntrinsicID(), Intrinsic::fabs); + EXPECT_FALSE(II->hasNoInfs()); + EXPECT_FALSE(II->hasNoNaNs()); + + Call = Builder.CreateUnaryIntrinsic(Intrinsic::fabs, V, I); + II = cast<IntrinsicInst>(Call); + EXPECT_EQ(II->getIntrinsicID(), Intrinsic::fabs); + EXPECT_TRUE(II->hasNoInfs()); + EXPECT_FALSE(II->hasNoNaNs()); + + Call = Builder.CreateBinaryIntrinsic(Intrinsic::pow, V, V); + II = cast<IntrinsicInst>(Call); + EXPECT_EQ(II->getIntrinsicID(), Intrinsic::pow); + EXPECT_FALSE(II->hasNoInfs()); + EXPECT_FALSE(II->hasNoNaNs()); + + Call = Builder.CreateBinaryIntrinsic(Intrinsic::pow, V, V, I); + II = cast<IntrinsicInst>(Call); + EXPECT_EQ(II->getIntrinsicID(), Intrinsic::pow); + EXPECT_TRUE(II->hasNoInfs()); + EXPECT_FALSE(II->hasNoNaNs()); + + Call = Builder.CreateIntrinsic(Intrinsic::fma, {V->getType()}, {V, V, V}); + II = cast<IntrinsicInst>(Call); + EXPECT_EQ(II->getIntrinsicID(), Intrinsic::fma); + EXPECT_FALSE(II->hasNoInfs()); + EXPECT_FALSE(II->hasNoNaNs()); + + Call = Builder.CreateIntrinsic(Intrinsic::fma, {V->getType()}, {V, V, V}, I); + II = cast<IntrinsicInst>(Call); + EXPECT_EQ(II->getIntrinsicID(), Intrinsic::fma); + EXPECT_TRUE(II->hasNoInfs()); + EXPECT_FALSE(II->hasNoNaNs()); + + Call = Builder.CreateIntrinsic(Intrinsic::fma, {V->getType()}, {V, V, V}, I); + II = cast<IntrinsicInst>(Call); + EXPECT_EQ(II->getIntrinsicID(), Intrinsic::fma); + EXPECT_TRUE(II->hasNoInfs()); + EXPECT_FALSE(II->hasNoNaNs()); } TEST_F(IRBuilderTest, Lifetime) { |

