summaryrefslogtreecommitdiffstats
path: root/gnu/llvm/unittests/IR/IRBuilderTest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/llvm/unittests/IR/IRBuilderTest.cpp')
-rw-r--r--gnu/llvm/unittests/IR/IRBuilderTest.cpp91
1 files changed, 75 insertions, 16 deletions
diff --git a/gnu/llvm/unittests/IR/IRBuilderTest.cpp b/gnu/llvm/unittests/IR/IRBuilderTest.cpp
index 720967cb136..db174fa2ff7 100644
--- a/gnu/llvm/unittests/IR/IRBuilderTest.cpp
+++ b/gnu/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,59 @@ TEST_F(IRBuilderTest, Intrinsics) {
II = cast<IntrinsicInst>(Call);
EXPECT_EQ(II->getIntrinsicID(), Intrinsic::maxnum);
- Call = Builder.CreateIntrinsic(Intrinsic::readcyclecounter);
+ Call = Builder.CreateMinimum(V, V);
+ II = cast<IntrinsicInst>(Call);
+ EXPECT_EQ(II->getIntrinsicID(), Intrinsic::minimum);
+
+ Call = Builder.CreateMaximum(V, V);
+ II = cast<IntrinsicInst>(Call);
+ EXPECT_EQ(II->getIntrinsicID(), Intrinsic::maximum);
+
+ 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) {
@@ -106,7 +160,7 @@ TEST_F(IRBuilderTest, CreateCondBr) {
BasicBlock *FBB = BasicBlock::Create(Ctx, "", F);
BranchInst *BI = Builder.CreateCondBr(Builder.getTrue(), TBB, FBB);
- TerminatorInst *TI = BB->getTerminator();
+ Instruction *TI = BB->getTerminator();
EXPECT_EQ(BI, TI);
EXPECT_EQ(2u, TI->getNumSuccessors());
EXPECT_EQ(TBB, TI->getSuccessor(0));
@@ -427,14 +481,16 @@ TEST_F(IRBuilderTest, createFunction) {
auto CU =
DIB.createCompileUnit(dwarf::DW_LANG_Swift, File, "swiftc", true, "", 0);
auto Type = DIB.createSubroutineType(DIB.getOrCreateTypeArray(None));
- auto NoErr = DIB.createFunction(CU, "noerr", "", File, 1, Type, false, true, 1,
- DINode::FlagZero, true);
+ auto NoErr = DIB.createFunction(
+ CU, "noerr", "", File, 1, Type, 1, DINode::FlagZero,
+ DISubprogram::SPFlagDefinition | DISubprogram::SPFlagOptimized);
EXPECT_TRUE(!NoErr->getThrownTypes());
auto Int = DIB.createBasicType("Int", 64, dwarf::DW_ATE_signed);
auto Error = DIB.getOrCreateArray({Int});
- auto Err =
- DIB.createFunction(CU, "err", "", File, 1, Type, false, true, 1,
- DINode::FlagZero, true, nullptr, nullptr, Error.get());
+ auto Err = DIB.createFunction(
+ CU, "err", "", File, 1, Type, 1, DINode::FlagZero,
+ DISubprogram::SPFlagDefinition | DISubprogram::SPFlagOptimized, nullptr,
+ nullptr, Error.get());
EXPECT_TRUE(Err->getThrownTypes().get() == Error.get());
DIB.finalize();
}
@@ -447,12 +503,14 @@ TEST_F(IRBuilderTest, DIBuilder) {
DIB.createFile("F.CBL", "/"), "llvm-cobol74",
true, "", 0);
auto Type = DIB.createSubroutineType(DIB.getOrCreateTypeArray(None));
- auto SP = DIB.createFunction(CU, "foo", "", File, 1, Type, false, true, 1,
- DINode::FlagZero, true);
+ auto SP = DIB.createFunction(
+ CU, "foo", "", File, 1, Type, 1, DINode::FlagZero,
+ DISubprogram::SPFlagDefinition | DISubprogram::SPFlagOptimized);
F->setSubprogram(SP);
AllocaInst *I = Builder.CreateAlloca(Builder.getInt8Ty());
- auto BarSP = DIB.createFunction(CU, "bar", "", File, 1, Type, false, true, 1,
- DINode::FlagZero, true);
+ auto BarSP = DIB.createFunction(
+ CU, "bar", "", File, 1, Type, 1, DINode::FlagZero,
+ DISubprogram::SPFlagDefinition | DISubprogram::SPFlagOptimized);
auto BadScope = DIB.createLexicalBlockFile(BarSP, File, 0);
I->setDebugLoc(DebugLoc::get(2, 0, BadScope));
DIB.finalize();
@@ -467,10 +525,10 @@ TEST_F(IRBuilderTest, createArtificialSubprogram) {
/*isOptimized=*/true, /*Flags=*/"",
/*Runtime Version=*/0);
auto Type = DIB.createSubroutineType(DIB.getOrCreateTypeArray(None));
- auto SP = DIB.createFunction(CU, "foo", /*LinkageName=*/"", File,
- /*LineNo=*/1, Type, /*isLocalToUnit=*/false,
- /*isDefinition=*/true, /*ScopeLine=*/2,
- DINode::FlagZero, /*isOptimized=*/true);
+ auto SP = DIB.createFunction(
+ CU, "foo", /*LinkageName=*/"", File,
+ /*LineNo=*/1, Type, /*ScopeLine=*/2, DINode::FlagZero,
+ DISubprogram::SPFlagDefinition | DISubprogram::SPFlagOptimized);
EXPECT_TRUE(SP->isDistinct());
F->setSubprogram(SP);
@@ -557,7 +615,8 @@ TEST_F(IRBuilderTest, DebugLoc) {
0);
auto SPType = DIB.createSubroutineType(DIB.getOrCreateTypeArray(None));
auto SP =
- DIB.createFunction(CU, "foo", "foo", File, 1, SPType, false, true, 1);
+ DIB.createFunction(CU, "foo", "foo", File, 1, SPType, 1, DINode::FlagZero,
+ DISubprogram::SPFlagDefinition);
DebugLoc DL1 = DILocation::get(Ctx, 2, 0, SP);
DebugLoc DL2 = DILocation::get(Ctx, 3, 0, SP);