diff options
Diffstat (limited to 'gnu/llvm/unittests/IR/IRBuilderTest.cpp')
| -rw-r--r-- | gnu/llvm/unittests/IR/IRBuilderTest.cpp | 91 |
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); |
