aboutsummaryrefslogtreecommitdiff
path: root/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp')
-rw-r--r--llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp649
1 files changed, 445 insertions, 204 deletions
diff --git a/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp b/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp
index fe04cbb..630cd03 100644
--- a/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp
+++ b/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp
@@ -27,6 +27,20 @@
using namespace llvm;
using namespace omp;
+// Wrapper lambdas to allow using EXPECT*() macros inside of error-returning
+// callbacks.
+#define FINICB_WRAPPER(cb) \
+ [&cb](InsertPointTy IP) -> Error { \
+ cb(IP); \
+ return Error::success(); \
+ }
+
+#define BODYGENCB_WRAPPER(cb) \
+ [&cb](InsertPointTy AllocaIP, InsertPointTy CodeGenIP) -> Error { \
+ cb(AllocaIP, CodeGenIP); \
+ return Error::success(); \
+ }
+
namespace {
/// Create an instruction that uses the values in \p Values. We use "printf"
@@ -218,9 +232,13 @@ protected:
CallInst *CallInst = createPrintfCall(Builder, "%d\\n", {LC});
if (Call)
*Call = CallInst;
+
+ return Error::success();
};
- CanonicalLoopInfo *Loop =
+ Expected<CanonicalLoopInfo *> LoopResult =
OMPBuilder.createCanonicalLoop(Loc, LoopBodyGenCB, CastedTripCount);
+ assert(LoopResult && "unexpected error");
+ CanonicalLoopInfo *Loop = *LoopResult;
// Finalize the function.
Builder.restoreIP(Loop->getAfterIP());
@@ -327,14 +345,18 @@ TEST_F(OpenMPIRBuilderTest, CreateBarrier) {
IRBuilder<> Builder(BB);
- OMPBuilder.createBarrier({IRBuilder<>::InsertPoint()}, OMPD_for);
+ OpenMPIRBuilder::InsertPointOrErrorTy BarrierIP1 =
+ OMPBuilder.createBarrier({IRBuilder<>::InsertPoint()}, OMPD_for);
+ assert(BarrierIP1 && "unexpected error");
EXPECT_TRUE(M->global_empty());
EXPECT_EQ(M->size(), 1U);
EXPECT_EQ(F->size(), 1U);
EXPECT_EQ(BB->size(), 0U);
OpenMPIRBuilder::LocationDescription Loc({Builder.saveIP()});
- OMPBuilder.createBarrier(Loc, OMPD_for);
+ OpenMPIRBuilder::InsertPointOrErrorTy BarrierIP2 =
+ OMPBuilder.createBarrier(Loc, OMPD_for);
+ assert(BarrierIP2 && "unexpected error");
EXPECT_FALSE(M->global_empty());
EXPECT_EQ(M->size(), 3U);
EXPECT_EQ(F->size(), 1U);
@@ -372,13 +394,15 @@ TEST_F(OpenMPIRBuilderTest, CreateCancel) {
ASSERT_EQ(IP.getBlock()->end(), IP.getPoint());
BranchInst::Create(CBB, IP.getBlock());
};
- OMPBuilder.pushFinalizationCB({FiniCB, OMPD_parallel, true});
+ OMPBuilder.pushFinalizationCB({FINICB_WRAPPER(FiniCB), OMPD_parallel, true});
IRBuilder<> Builder(BB);
OpenMPIRBuilder::LocationDescription Loc({Builder.saveIP()});
- auto NewIP = OMPBuilder.createCancel(Loc, nullptr, OMPD_parallel);
- Builder.restoreIP(NewIP);
+ OpenMPIRBuilder::InsertPointOrErrorTy NewIP =
+ OMPBuilder.createCancel(Loc, nullptr, OMPD_parallel);
+ assert(NewIP && "unexpected error");
+ Builder.restoreIP(*NewIP);
EXPECT_FALSE(M->global_empty());
EXPECT_EQ(M->size(), 4U);
EXPECT_EQ(F->size(), 4U);
@@ -400,7 +424,7 @@ TEST_F(OpenMPIRBuilderTest, CreateCancel) {
EXPECT_EQ(Cancel->getNumUses(), 1U);
Instruction *CancelBBTI = Cancel->getParent()->getTerminator();
EXPECT_EQ(CancelBBTI->getNumSuccessors(), 2U);
- EXPECT_EQ(CancelBBTI->getSuccessor(0), NewIP.getBlock());
+ EXPECT_EQ(CancelBBTI->getSuccessor(0), NewIP->getBlock());
EXPECT_EQ(CancelBBTI->getSuccessor(1)->size(), 3U);
CallInst *GTID1 = dyn_cast<CallInst>(&CancelBBTI->getSuccessor(1)->front());
EXPECT_NE(GTID1, nullptr);
@@ -439,13 +463,15 @@ TEST_F(OpenMPIRBuilderTest, CreateCancelIfCond) {
ASSERT_EQ(IP.getBlock()->end(), IP.getPoint());
BranchInst::Create(CBB, IP.getBlock());
};
- OMPBuilder.pushFinalizationCB({FiniCB, OMPD_parallel, true});
+ OMPBuilder.pushFinalizationCB({FINICB_WRAPPER(FiniCB), OMPD_parallel, true});
IRBuilder<> Builder(BB);
OpenMPIRBuilder::LocationDescription Loc({Builder.saveIP()});
- auto NewIP = OMPBuilder.createCancel(Loc, Builder.getTrue(), OMPD_parallel);
- Builder.restoreIP(NewIP);
+ OpenMPIRBuilder::InsertPointOrErrorTy NewIP =
+ OMPBuilder.createCancel(Loc, Builder.getTrue(), OMPD_parallel);
+ assert(NewIP && "unexpected error");
+ Builder.restoreIP(*NewIP);
EXPECT_FALSE(M->global_empty());
EXPECT_EQ(M->size(), 4U);
EXPECT_EQ(F->size(), 7U);
@@ -473,7 +499,7 @@ TEST_F(OpenMPIRBuilderTest, CreateCancelIfCond) {
EXPECT_EQ(CancelBBTI->getNumSuccessors(), 2U);
EXPECT_EQ(CancelBBTI->getSuccessor(0)->size(), 1U);
EXPECT_EQ(CancelBBTI->getSuccessor(0)->getUniqueSuccessor(),
- NewIP.getBlock());
+ NewIP->getBlock());
EXPECT_EQ(CancelBBTI->getSuccessor(1)->size(), 3U);
CallInst *GTID1 = dyn_cast<CallInst>(&CancelBBTI->getSuccessor(1)->front());
EXPECT_NE(GTID1, nullptr);
@@ -512,13 +538,15 @@ TEST_F(OpenMPIRBuilderTest, CreateCancelBarrier) {
ASSERT_EQ(IP.getBlock()->end(), IP.getPoint());
BranchInst::Create(CBB, IP.getBlock());
};
- OMPBuilder.pushFinalizationCB({FiniCB, OMPD_parallel, true});
+ OMPBuilder.pushFinalizationCB({FINICB_WRAPPER(FiniCB), OMPD_parallel, true});
IRBuilder<> Builder(BB);
OpenMPIRBuilder::LocationDescription Loc({Builder.saveIP()});
- auto NewIP = OMPBuilder.createBarrier(Loc, OMPD_for);
- Builder.restoreIP(NewIP);
+ OpenMPIRBuilder::InsertPointOrErrorTy NewIP =
+ OMPBuilder.createBarrier(Loc, OMPD_for);
+ assert(NewIP && "unexpected error");
+ Builder.restoreIP(*NewIP);
EXPECT_FALSE(M->global_empty());
EXPECT_EQ(M->size(), 3U);
EXPECT_EQ(F->size(), 4U);
@@ -540,7 +568,7 @@ TEST_F(OpenMPIRBuilderTest, CreateCancelBarrier) {
EXPECT_EQ(Barrier->getNumUses(), 1U);
Instruction *BarrierBBTI = Barrier->getParent()->getTerminator();
EXPECT_EQ(BarrierBBTI->getNumSuccessors(), 2U);
- EXPECT_EQ(BarrierBBTI->getSuccessor(0), NewIP.getBlock());
+ EXPECT_EQ(BarrierBBTI->getSuccessor(0), NewIP->getBlock());
EXPECT_EQ(BarrierBBTI->getSuccessor(1)->size(), 1U);
EXPECT_EQ(BarrierBBTI->getSuccessor(1)->getTerminator()->getNumSuccessors(),
1U);
@@ -563,7 +591,9 @@ TEST_F(OpenMPIRBuilderTest, DbgLoc) {
IRBuilder<> Builder(BB);
OpenMPIRBuilder::LocationDescription Loc({Builder.saveIP(), DL});
- OMPBuilder.createBarrier(Loc, OMPD_for);
+ OpenMPIRBuilder::InsertPointOrErrorTy AfterIP =
+ OMPBuilder.createBarrier(Loc, OMPD_for);
+ assert(AfterIP && "unexpected error");
CallInst *GTID = dyn_cast<CallInst>(&BB->front());
CallInst *Barrier = dyn_cast<CallInst>(GTID->getNextNode());
EXPECT_EQ(GTID->getDebugLoc(), DL);
@@ -627,6 +657,7 @@ TEST_F(OpenMPIRBuilderTest, ParallelSimpleGPU) {
Instruction *ThenTerm, *ElseTerm;
SplitBlockAndInsertIfThenElse(Cmp, CodeGenIP.getBlock()->getTerminator(),
&ThenTerm, &ElseTerm);
+ return Error::success();
};
auto PrivCB = [&](InsertPointTy AllocaIP, InsertPointTy CodeGenIP,
@@ -654,19 +685,23 @@ TEST_F(OpenMPIRBuilderTest, ParallelSimpleGPU) {
return CodeGenIP;
};
- auto FiniCB = [&](InsertPointTy CodeGenIP) { ++NumFinalizationPoints; };
+ auto FiniCB = [&](InsertPointTy CodeGenIP) {
+ ++NumFinalizationPoints;
+ return Error::success();
+ };
IRBuilder<>::InsertPoint AllocaIP(&F->getEntryBlock(),
F->getEntryBlock().getFirstInsertionPt());
- IRBuilder<>::InsertPoint AfterIP =
+ OpenMPIRBuilder::InsertPointOrErrorTy AfterIP =
OMPBuilder.createParallel(Loc, AllocaIP, BodyGenCB, PrivCB, FiniCB,
nullptr, nullptr, OMP_PROC_BIND_default, false);
+ assert(AfterIP && "unexpected error");
EXPECT_EQ(NumBodiesGenerated, 1U);
EXPECT_EQ(NumPrivatizedVars, 1U);
EXPECT_EQ(NumFinalizationPoints, 1U);
- Builder.restoreIP(AfterIP);
+ Builder.restoreIP(*AfterIP);
Builder.CreateRetVoid();
OMPBuilder.finalize();
@@ -735,6 +770,7 @@ TEST_F(OpenMPIRBuilderTest, ParallelSimple) {
Instruction *ThenTerm, *ElseTerm;
SplitBlockAndInsertIfThenElse(Cmp, CodeGenIP.getBlock()->getTerminator(),
&ThenTerm, &ElseTerm);
+ return Error::success();
};
auto PrivCB = [&](InsertPointTy AllocaIP, InsertPointTy CodeGenIP,
@@ -762,18 +798,22 @@ TEST_F(OpenMPIRBuilderTest, ParallelSimple) {
return CodeGenIP;
};
- auto FiniCB = [&](InsertPointTy CodeGenIP) { ++NumFinalizationPoints; };
+ auto FiniCB = [&](InsertPointTy CodeGenIP) {
+ ++NumFinalizationPoints;
+ return Error::success();
+ };
IRBuilder<>::InsertPoint AllocaIP(&F->getEntryBlock(),
F->getEntryBlock().getFirstInsertionPt());
- IRBuilder<>::InsertPoint AfterIP =
+ OpenMPIRBuilder::InsertPointOrErrorTy AfterIP =
OMPBuilder.createParallel(Loc, AllocaIP, BodyGenCB, PrivCB, FiniCB,
nullptr, nullptr, OMP_PROC_BIND_default, false);
+ assert(AfterIP && "unexpected error");
EXPECT_EQ(NumBodiesGenerated, 1U);
EXPECT_EQ(NumPrivatizedVars, 1U);
EXPECT_EQ(NumFinalizationPoints, 1U);
- Builder.restoreIP(AfterIP);
+ Builder.restoreIP(*AfterIP);
Builder.CreateRetVoid();
OMPBuilder.finalize();
@@ -826,6 +866,7 @@ TEST_F(OpenMPIRBuilderTest, ParallelNested) {
auto InnerBodyGenCB = [&](InsertPointTy AllocaIP, InsertPointTy CodeGenIP) {
++NumInnerBodiesGenerated;
+ return Error::success();
};
auto PrivCB = [&](InsertPointTy AllocaIP, InsertPointTy CodeGenIP,
@@ -841,7 +882,10 @@ TEST_F(OpenMPIRBuilderTest, ParallelNested) {
return CodeGenIP;
};
- auto FiniCB = [&](InsertPointTy CodeGenIP) { ++NumFinalizationPoints; };
+ auto FiniCB = [&](InsertPointTy CodeGenIP) {
+ ++NumFinalizationPoints;
+ return Error::success();
+ };
auto OuterBodyGenCB = [&](InsertPointTy AllocaIP, InsertPointTy CodeGenIP) {
++NumOuterBodiesGenerated;
@@ -849,27 +893,29 @@ TEST_F(OpenMPIRBuilderTest, ParallelNested) {
BasicBlock *CGBB = CodeGenIP.getBlock();
BasicBlock *NewBB = SplitBlock(CGBB, &*CodeGenIP.getPoint());
CGBB->getTerminator()->eraseFromParent();
- ;
- IRBuilder<>::InsertPoint AfterIP = OMPBuilder.createParallel(
+ OpenMPIRBuilder::InsertPointOrErrorTy AfterIP = OMPBuilder.createParallel(
InsertPointTy(CGBB, CGBB->end()), AllocaIP, InnerBodyGenCB, PrivCB,
FiniCB, nullptr, nullptr, OMP_PROC_BIND_default, false);
+ assert(AfterIP && "unexpected error");
- Builder.restoreIP(AfterIP);
+ Builder.restoreIP(*AfterIP);
Builder.CreateBr(NewBB);
+ return Error::success();
};
IRBuilder<>::InsertPoint AllocaIP(&F->getEntryBlock(),
F->getEntryBlock().getFirstInsertionPt());
- IRBuilder<>::InsertPoint AfterIP =
+ OpenMPIRBuilder::InsertPointOrErrorTy AfterIP =
OMPBuilder.createParallel(Loc, AllocaIP, OuterBodyGenCB, PrivCB, FiniCB,
nullptr, nullptr, OMP_PROC_BIND_default, false);
+ assert(AfterIP && "unexpected error");
EXPECT_EQ(NumInnerBodiesGenerated, 1U);
EXPECT_EQ(NumOuterBodiesGenerated, 1U);
EXPECT_EQ(NumFinalizationPoints, 2U);
- Builder.restoreIP(AfterIP);
+ Builder.restoreIP(*AfterIP);
Builder.CreateRetVoid();
OMPBuilder.finalize();
@@ -920,6 +966,7 @@ TEST_F(OpenMPIRBuilderTest, ParallelNested2Inner) {
auto InnerBodyGenCB = [&](InsertPointTy AllocaIP, InsertPointTy CodeGenIP) {
++NumInnerBodiesGenerated;
+ return Error::success();
};
auto PrivCB = [&](InsertPointTy AllocaIP, InsertPointTy CodeGenIP,
@@ -935,7 +982,10 @@ TEST_F(OpenMPIRBuilderTest, ParallelNested2Inner) {
return CodeGenIP;
};
- auto FiniCB = [&](InsertPointTy CodeGenIP) { ++NumFinalizationPoints; };
+ auto FiniCB = [&](InsertPointTy CodeGenIP) {
+ ++NumFinalizationPoints;
+ return Error::success();
+ };
auto OuterBodyGenCB = [&](InsertPointTy AllocaIP, InsertPointTy CodeGenIP) {
++NumOuterBodiesGenerated;
@@ -948,32 +998,36 @@ TEST_F(OpenMPIRBuilderTest, ParallelNested2Inner) {
NewBB1->getTerminator()->eraseFromParent();
;
- IRBuilder<>::InsertPoint AfterIP1 = OMPBuilder.createParallel(
+ OpenMPIRBuilder::InsertPointOrErrorTy AfterIP1 = OMPBuilder.createParallel(
InsertPointTy(CGBB, CGBB->end()), AllocaIP, InnerBodyGenCB, PrivCB,
FiniCB, nullptr, nullptr, OMP_PROC_BIND_default, false);
+ assert(AfterIP1 && "unexpected error");
- Builder.restoreIP(AfterIP1);
+ Builder.restoreIP(*AfterIP1);
Builder.CreateBr(NewBB1);
- IRBuilder<>::InsertPoint AfterIP2 = OMPBuilder.createParallel(
+ OpenMPIRBuilder::InsertPointOrErrorTy AfterIP2 = OMPBuilder.createParallel(
InsertPointTy(NewBB1, NewBB1->end()), AllocaIP, InnerBodyGenCB, PrivCB,
FiniCB, nullptr, nullptr, OMP_PROC_BIND_default, false);
+ assert(AfterIP2 && "unexpected error");
- Builder.restoreIP(AfterIP2);
+ Builder.restoreIP(*AfterIP2);
Builder.CreateBr(NewBB2);
+ return Error::success();
};
IRBuilder<>::InsertPoint AllocaIP(&F->getEntryBlock(),
F->getEntryBlock().getFirstInsertionPt());
- IRBuilder<>::InsertPoint AfterIP =
+ OpenMPIRBuilder::InsertPointOrErrorTy AfterIP =
OMPBuilder.createParallel(Loc, AllocaIP, OuterBodyGenCB, PrivCB, FiniCB,
nullptr, nullptr, OMP_PROC_BIND_default, false);
+ assert(AfterIP && "unexpected error");
EXPECT_EQ(NumInnerBodiesGenerated, 2U);
EXPECT_EQ(NumOuterBodiesGenerated, 1U);
EXPECT_EQ(NumFinalizationPoints, 3U);
- Builder.restoreIP(AfterIP);
+ Builder.restoreIP(*AfterIP);
Builder.CreateRetVoid();
OMPBuilder.finalize();
@@ -1043,6 +1097,7 @@ TEST_F(OpenMPIRBuilderTest, ParallelIfCond) {
Instruction *ThenTerm, *ElseTerm;
SplitBlockAndInsertIfThenElse(Cmp, &*Builder.GetInsertPoint(), &ThenTerm,
&ElseTerm);
+ return Error::success();
};
auto PrivCB = [&](InsertPointTy AllocaIP, InsertPointTy CodeGenIP,
@@ -1073,20 +1128,22 @@ TEST_F(OpenMPIRBuilderTest, ParallelIfCond) {
auto FiniCB = [&](InsertPointTy CodeGenIP) {
++NumFinalizationPoints;
// No destructors.
+ return Error::success();
};
IRBuilder<>::InsertPoint AllocaIP(&F->getEntryBlock(),
F->getEntryBlock().getFirstInsertionPt());
- IRBuilder<>::InsertPoint AfterIP =
+ OpenMPIRBuilder::InsertPointOrErrorTy AfterIP =
OMPBuilder.createParallel(Loc, AllocaIP, BodyGenCB, PrivCB, FiniCB,
Builder.CreateIsNotNull(F->arg_begin()),
nullptr, OMP_PROC_BIND_default, false);
+ assert(AfterIP && "unexpected error");
EXPECT_EQ(NumBodiesGenerated, 1U);
EXPECT_EQ(NumPrivatizedVars, 1U);
EXPECT_EQ(NumFinalizationPoints, 1U);
- Builder.restoreIP(AfterIP);
+ Builder.restoreIP(*AfterIP);
Builder.CreateRetVoid();
OMPBuilder.finalize();
@@ -1141,8 +1198,10 @@ TEST_F(OpenMPIRBuilderTest, ParallelCancelBarrier) {
// Create three barriers, two cancel barriers but only one checked.
Function *CBFn, *BFn;
- Builder.restoreIP(
- OMPBuilder.createBarrier(Builder.saveIP(), OMPD_parallel));
+ OpenMPIRBuilder::InsertPointOrErrorTy BarrierIP1 =
+ OMPBuilder.createBarrier(Builder.saveIP(), OMPD_parallel);
+ assert(BarrierIP1 && "unexpected error");
+ Builder.restoreIP(*BarrierIP1);
CBFn = M->getFunction("__kmpc_cancel_barrier");
BFn = M->getFunction("__kmpc_barrier");
@@ -1153,8 +1212,10 @@ TEST_F(OpenMPIRBuilderTest, ParallelCancelBarrier) {
ASSERT_EQ(CBFn->user_back()->getNumUses(), 1U);
CheckedBarrier = cast<CallInst>(CBFn->user_back());
- Builder.restoreIP(
- OMPBuilder.createBarrier(Builder.saveIP(), OMPD_parallel, true));
+ OpenMPIRBuilder::InsertPointOrErrorTy BarrierIP2 =
+ OMPBuilder.createBarrier(Builder.saveIP(), OMPD_parallel, true);
+ assert(BarrierIP2 && "unexpected error");
+ Builder.restoreIP(*BarrierIP2);
CBFn = M->getFunction("__kmpc_cancel_barrier");
BFn = M->getFunction("__kmpc_barrier");
ASSERT_NE(CBFn, nullptr);
@@ -1164,8 +1225,10 @@ TEST_F(OpenMPIRBuilderTest, ParallelCancelBarrier) {
ASSERT_TRUE(isa<CallInst>(BFn->user_back()));
ASSERT_EQ(BFn->user_back()->getNumUses(), 0U);
- Builder.restoreIP(OMPBuilder.createBarrier(Builder.saveIP(), OMPD_parallel,
- false, false));
+ OpenMPIRBuilder::InsertPointOrErrorTy BarrierIP3 =
+ OMPBuilder.createBarrier(Builder.saveIP(), OMPD_parallel, false, false);
+ assert(BarrierIP3 && "unexpected error");
+ Builder.restoreIP(*BarrierIP3);
ASSERT_EQ(CBFn->getNumUses(), 2U);
ASSERT_EQ(BFn->getNumUses(), 1U);
ASSERT_TRUE(CBFn->user_back() != CheckedBarrier);
@@ -1190,21 +1253,23 @@ TEST_F(OpenMPIRBuilderTest, ParallelCancelBarrier) {
Builder.restoreIP(IP);
Builder.CreateCall(FakeDestructor,
{Builder.getInt32(NumFinalizationPoints)});
+ return Error::success();
};
IRBuilder<>::InsertPoint AllocaIP(&F->getEntryBlock(),
F->getEntryBlock().getFirstInsertionPt());
- IRBuilder<>::InsertPoint AfterIP =
- OMPBuilder.createParallel(Loc, AllocaIP, BodyGenCB, PrivCB, FiniCB,
- Builder.CreateIsNotNull(F->arg_begin()),
- nullptr, OMP_PROC_BIND_default, true);
+ OpenMPIRBuilder::InsertPointOrErrorTy AfterIP = OMPBuilder.createParallel(
+ Loc, AllocaIP, BODYGENCB_WRAPPER(BodyGenCB), PrivCB, FiniCB,
+ Builder.CreateIsNotNull(F->arg_begin()), nullptr, OMP_PROC_BIND_default,
+ true);
+ assert(AfterIP && "unexpected error");
EXPECT_EQ(NumBodiesGenerated, 1U);
EXPECT_EQ(NumPrivatizedVars, 0U);
EXPECT_EQ(NumFinalizationPoints, 2U);
EXPECT_EQ(FakeDestructor->getNumUses(), 2U);
- Builder.restoreIP(AfterIP);
+ Builder.restoreIP(*AfterIP);
Builder.CreateRetVoid();
OMPBuilder.finalize();
@@ -1269,20 +1334,22 @@ TEST_F(OpenMPIRBuilderTest, ParallelForwardAsPointers) {
Builder.CreateCall(TakeI32PtrFunc, I32PtrVal);
Builder.CreateCall(TakeStructFunc, StructVal);
Builder.CreateCall(TakeStructPtrFunc, StructPtrVal);
+ return Error::success();
};
auto PrivCB = [&](InsertPointTy AllocaIP, InsertPointTy CodeGenIP, Value &,
Value &Inner, Value *&ReplacementValue) {
ReplacementValue = &Inner;
return CodeGenIP;
};
- auto FiniCB = [](InsertPointTy) {};
+ auto FiniCB = [](InsertPointTy) { return Error::success(); };
IRBuilder<>::InsertPoint AllocaIP(&F->getEntryBlock(),
F->getEntryBlock().getFirstInsertionPt());
- IRBuilder<>::InsertPoint AfterIP =
+ OpenMPIRBuilder::InsertPointOrErrorTy AfterIP =
OMPBuilder.createParallel(Loc, AllocaIP, BodyGenCB, PrivCB, FiniCB,
nullptr, nullptr, OMP_PROC_BIND_default, false);
- Builder.restoreIP(AfterIP);
+ assert(AfterIP && "unexpected error");
+ Builder.restoreIP(*AfterIP);
Builder.CreateRetVoid();
OMPBuilder.finalize();
@@ -1312,10 +1379,13 @@ TEST_F(OpenMPIRBuilderTest, CanonicalLoopSimple) {
Instruction *ThenTerm, *ElseTerm;
SplitBlockAndInsertIfThenElse(Cmp, CodeGenIP.getBlock()->getTerminator(),
&ThenTerm, &ElseTerm);
+ return Error::success();
};
- CanonicalLoopInfo *Loop =
+ Expected<CanonicalLoopInfo *> LoopResult =
OMPBuilder.createCanonicalLoop(Loc, LoopBodyGenCB, TripCount);
+ assert(LoopResult && "unexpected error");
+ CanonicalLoopInfo *Loop = *LoopResult;
Builder.restoreIP(Loop->getAfterIP());
ReturnInst *RetInst = Builder.CreateRetVoid();
@@ -1367,10 +1437,14 @@ TEST_F(OpenMPIRBuilderTest, CanonicalLoopBounds) {
Value *StartVal = ConstantInt::get(LCTy, Start);
Value *StopVal = ConstantInt::get(LCTy, Stop);
Value *StepVal = ConstantInt::get(LCTy, Step);
- auto LoopBodyGenCB = [&](InsertPointTy CodeGenIP, llvm::Value *LC) {};
- CanonicalLoopInfo *Loop =
+ auto LoopBodyGenCB = [&](InsertPointTy CodeGenIP, llvm::Value *LC) {
+ return Error::success();
+ };
+ Expected<CanonicalLoopInfo *> LoopResult =
OMPBuilder.createCanonicalLoop(Loc, LoopBodyGenCB, StartVal, StopVal,
StepVal, IsSigned, InclusiveStop);
+ assert(LoopResult && "unexpected error");
+ CanonicalLoopInfo *Loop = *LoopResult;
Loop->assertOK();
Builder.restoreIP(Loop->getAfterIP());
Value *TripCount = Loop->getTripCount();
@@ -1463,16 +1537,22 @@ TEST_F(OpenMPIRBuilderTest, CollapseNestedLoops) {
Value *InnerLC) {
Builder.restoreIP(InnerCodeGenIP);
Call = createPrintfCall(Builder, "body i=%d j=%d\\n", {OuterLC, InnerLC});
+ return Error::success();
};
- InnerLoop = OMPBuilder.createCanonicalLoop(
+ Expected<CanonicalLoopInfo *> LoopResult = OMPBuilder.createCanonicalLoop(
Builder.saveIP(), InnerLoopBodyGenCB, InnerTripCount, "inner");
+ assert(LoopResult && "unexpected error");
+ InnerLoop = *LoopResult;
Builder.restoreIP(InnerLoop->getAfterIP());
InbetweenTrail =
createPrintfCall(Builder, "In-between trail i=%d\\n", {OuterLC});
+ return Error::success();
};
- CanonicalLoopInfo *OuterLoop = OMPBuilder.createCanonicalLoop(
+ Expected<CanonicalLoopInfo *> LoopResult = OMPBuilder.createCanonicalLoop(
OuterLoc, OuterLoopBodyGenCB, OuterTripCount, "outer");
+ assert(LoopResult && "unexpected error");
+ CanonicalLoopInfo *OuterLoop = *LoopResult;
// Finish the function.
Builder.restoreIP(OuterLoop->getAfterIP());
@@ -1582,12 +1662,18 @@ TEST_F(OpenMPIRBuilderTest, TileNestedLoops) {
// Add something that consumes the induction variables to the body.
createPrintfCall(Builder, "i=%d j=%d\\n", {OuterLC, InnerLC});
+ return Error::success();
};
- InnerLoop = OMPBuilder.createCanonicalLoop(
+ Expected<CanonicalLoopInfo *> LoopResult = OMPBuilder.createCanonicalLoop(
OuterCodeGenIP, InnerLoopBodyGenCB, TripCount, "inner");
+ assert(LoopResult && "unexpected error");
+ InnerLoop = *LoopResult;
+ return Error::success();
};
- CanonicalLoopInfo *OuterLoop = OMPBuilder.createCanonicalLoop(
+ Expected<CanonicalLoopInfo *> LoopResult = OMPBuilder.createCanonicalLoop(
Loc, OuterLoopBodyGenCB, TripCount, "outer");
+ assert(LoopResult && "unexpected error");
+ CanonicalLoopInfo *OuterLoop = *LoopResult;
// Finalize the function.
Builder.restoreIP(OuterLoop->getAfterIP());
@@ -1682,14 +1768,20 @@ TEST_F(OpenMPIRBuilderTest, TileNestedLoopsWithBounds) {
// Add something that consumes the induction variable to the body.
Call = createPrintfCall(Builder, "i=%d j=%d\\n", {OuterLC, InnerLC});
+ return Error::success();
};
- InnerLoop = OMPBuilder.createCanonicalLoop(
+ Expected<CanonicalLoopInfo *> LoopResult = OMPBuilder.createCanonicalLoop(
OuterCodeGenIP, InnerLoopBodyGenCB, InnerStartVal, InnerStopVal,
InnerStep, false, false, ComputeIP, "inner");
+ assert(LoopResult && "unexpected error");
+ InnerLoop = *LoopResult;
+ return Error::success();
};
- CanonicalLoopInfo *OuterLoop = OMPBuilder.createCanonicalLoop(
+ Expected<CanonicalLoopInfo *> LoopResult = OMPBuilder.createCanonicalLoop(
Loc, OuterLoopBodyGenCB, OuterStartVal, OuterStopVal, OuterStep, false,
false, ComputeIP, "outer");
+ assert(LoopResult && "unexpected error");
+ CanonicalLoopInfo *OuterLoop = *LoopResult;
// Finalize the function
Builder.restoreIP(OuterLoop->getAfterIP());
@@ -1793,10 +1885,14 @@ TEST_F(OpenMPIRBuilderTest, TileSingleLoopCounts) {
Value *StepVal = ConstantInt::get(LCTy, Step);
// Generate a loop.
- auto LoopBodyGenCB = [&](InsertPointTy CodeGenIP, llvm::Value *LC) {};
- CanonicalLoopInfo *Loop =
+ auto LoopBodyGenCB = [&](InsertPointTy CodeGenIP, llvm::Value *LC) {
+ return Error::success();
+ };
+ Expected<CanonicalLoopInfo *> LoopResult =
OMPBuilder.createCanonicalLoop(Loc, LoopBodyGenCB, StartVal, StopVal,
StepVal, IsSigned, InclusiveStop);
+ assert(LoopResult && "unexpected error");
+ CanonicalLoopInfo *Loop = *LoopResult;
InsertPointTy AfterIP = Loop->getAfterIP();
// Tile the loop.
@@ -2245,19 +2341,22 @@ TEST_F(OpenMPIRBuilderTest, StaticWorkshareLoopTarget) {
Value *StartVal = ConstantInt::get(LCTy, 10);
Value *StopVal = ConstantInt::get(LCTy, 52);
Value *StepVal = ConstantInt::get(LCTy, 2);
- auto LoopBodyGen = [&](InsertPointTy, Value *) {};
+ auto LoopBodyGen = [&](InsertPointTy, Value *) { return Error::success(); };
- CanonicalLoopInfo *CLI = OMPBuilder.createCanonicalLoop(
+ Expected<CanonicalLoopInfo *> LoopResult = OMPBuilder.createCanonicalLoop(
Loc, LoopBodyGen, StartVal, StopVal, StepVal, false, false);
+ assert(LoopResult && "unexpected error");
+ CanonicalLoopInfo *CLI = *LoopResult;
BasicBlock *Preheader = CLI->getPreheader();
Value *TripCount = CLI->getTripCount();
Builder.SetInsertPoint(BB, BB->getFirstInsertionPt());
- IRBuilder<>::InsertPoint AfterIP = OMPBuilder.applyWorkshareLoop(
+ OpenMPIRBuilder::InsertPointOrErrorTy AfterIP = OMPBuilder.applyWorkshareLoop(
DL, CLI, AllocaIP, true, OMP_SCHEDULE_Static, nullptr, false, false,
false, false, WorksharingLoopType::ForStaticLoop);
- Builder.restoreIP(AfterIP);
+ assert(AfterIP && "unexpected error");
+ Builder.restoreIP(*AfterIP);
Builder.CreateRetVoid();
OMPBuilder.finalize();
@@ -2306,11 +2405,15 @@ TEST_F(OpenMPIRBuilderTest, StaticWorkShareLoop) {
Value *StartVal = ConstantInt::get(LCTy, 10);
Value *StopVal = ConstantInt::get(LCTy, 52);
Value *StepVal = ConstantInt::get(LCTy, 2);
- auto LoopBodyGen = [&](InsertPointTy, llvm::Value *) {};
+ auto LoopBodyGen = [&](InsertPointTy, llvm::Value *) {
+ return Error::success();
+ };
- CanonicalLoopInfo *CLI = OMPBuilder.createCanonicalLoop(
+ Expected<CanonicalLoopInfo *> LoopResult = OMPBuilder.createCanonicalLoop(
Loc, LoopBodyGen, StartVal, StopVal, StepVal,
/*IsSigned=*/false, /*InclusiveStop=*/false);
+ assert(LoopResult && "unexpected error");
+ CanonicalLoopInfo *CLI = *LoopResult;
BasicBlock *Preheader = CLI->getPreheader();
BasicBlock *Body = CLI->getBody();
Value *IV = CLI->getIndVar();
@@ -2319,8 +2422,9 @@ TEST_F(OpenMPIRBuilderTest, StaticWorkShareLoop) {
Builder.SetInsertPoint(BB, BB->getFirstInsertionPt());
InsertPointTy AllocaIP = Builder.saveIP();
- OMPBuilder.applyWorkshareLoop(DL, CLI, AllocaIP, /*NeedsBarrier=*/true,
- OMP_SCHEDULE_Static);
+ OpenMPIRBuilder::InsertPointOrErrorTy AfterIP = OMPBuilder.applyWorkshareLoop(
+ DL, CLI, AllocaIP, /*NeedsBarrier=*/true, OMP_SCHEDULE_Static);
+ assert(AfterIP && "unexpected error");
BasicBlock *Cond = Body->getSinglePredecessor();
Instruction *Cmp = &*Cond->begin();
@@ -2412,8 +2516,9 @@ TEST_P(OpenMPIRBuilderTestWithIVBits, StaticChunkedWorkshareLoop) {
Value *ChunkSize = ConstantInt::get(LCTy, 5);
InsertPointTy AllocaIP{&F->getEntryBlock(),
F->getEntryBlock().getFirstInsertionPt()};
- OMPBuilder.applyWorkshareLoop(DL, CLI, AllocaIP, /*NeedsBarrier=*/true,
- OMP_SCHEDULE_Static, ChunkSize);
+ OpenMPIRBuilder::InsertPointOrErrorTy AfterIP = OMPBuilder.applyWorkshareLoop(
+ DL, CLI, AllocaIP, /*NeedsBarrier=*/true, OMP_SCHEDULE_Static, ChunkSize);
+ assert(AfterIP && "unexpected error");
OMPBuilder.finalize();
EXPECT_FALSE(verifyModule(*M, &errs()));
@@ -2500,11 +2605,15 @@ TEST_P(OpenMPIRBuilderTestWithParams, DynamicWorkShareLoop) {
Value *StepVal = ConstantInt::get(LCTy, 2);
Value *ChunkVal =
(ChunkSize == 1) ? nullptr : ConstantInt::get(LCTy, ChunkSize);
- auto LoopBodyGen = [&](InsertPointTy, llvm::Value *) {};
+ auto LoopBodyGen = [&](InsertPointTy, llvm::Value *) {
+ return Error::success();
+ };
- CanonicalLoopInfo *CLI = OMPBuilder.createCanonicalLoop(
+ Expected<CanonicalLoopInfo *> LoopResult = OMPBuilder.createCanonicalLoop(
Loc, LoopBodyGen, StartVal, StopVal, StepVal,
/*IsSigned=*/false, /*InclusiveStop=*/false);
+ assert(LoopResult && "unexpected error");
+ CanonicalLoopInfo *CLI = *LoopResult;
Builder.SetInsertPoint(BB, BB->getFirstInsertionPt());
InsertPointTy AllocaIP = Builder.saveIP();
@@ -2517,7 +2626,7 @@ TEST_P(OpenMPIRBuilderTestWithParams, DynamicWorkShareLoop) {
BasicBlock *LatchBlock = CLI->getLatch();
Value *IV = CLI->getIndVar();
- InsertPointTy EndIP = OMPBuilder.applyWorkshareLoop(
+ OpenMPIRBuilder::InsertPointOrErrorTy EndIP = OMPBuilder.applyWorkshareLoop(
DL, CLI, AllocaIP, /*NeedsBarrier=*/true, getSchedKind(SchedType),
ChunkVal, /*Simd=*/false,
(SchedType & omp::OMPScheduleType::ModifierMonotonic) ==
@@ -2525,10 +2634,11 @@ TEST_P(OpenMPIRBuilderTestWithParams, DynamicWorkShareLoop) {
(SchedType & omp::OMPScheduleType::ModifierNonmonotonic) ==
omp::OMPScheduleType::ModifierNonmonotonic,
/*Ordered=*/false);
+ assert(EndIP && "unexpected error");
// The returned value should be the "after" point.
- ASSERT_EQ(EndIP.getBlock(), AfterIP.getBlock());
- ASSERT_EQ(EndIP.getPoint(), AfterIP.getPoint());
+ ASSERT_EQ(EndIP->getBlock(), AfterIP.getBlock());
+ ASSERT_EQ(EndIP->getPoint(), AfterIP.getPoint());
auto AllocaIter = BB->begin();
ASSERT_GE(std::distance(BB->begin(), BB->end()), 4);
@@ -2603,7 +2713,7 @@ TEST_P(OpenMPIRBuilderTestWithParams, DynamicWorkShareLoop) {
EXPECT_EQ(NumCallsInExitBlock, 2u);
// Add a termination to our block and check that it is internally consistent.
- Builder.restoreIP(EndIP);
+ Builder.restoreIP(*EndIP);
Builder.CreateRetVoid();
OMPBuilder.finalize();
EXPECT_FALSE(verifyModule(*M, &errs()));
@@ -2642,11 +2752,15 @@ TEST_F(OpenMPIRBuilderTest, DynamicWorkShareLoopOrdered) {
Value *StopVal = ConstantInt::get(LCTy, 52);
Value *StepVal = ConstantInt::get(LCTy, 2);
Value *ChunkVal = ConstantInt::get(LCTy, ChunkSize);
- auto LoopBodyGen = [&](InsertPointTy, llvm::Value *) {};
+ auto LoopBodyGen = [&](InsertPointTy, llvm::Value *) {
+ return llvm::Error::success();
+ };
- CanonicalLoopInfo *CLI = OMPBuilder.createCanonicalLoop(
+ Expected<CanonicalLoopInfo *> LoopResult = OMPBuilder.createCanonicalLoop(
Loc, LoopBodyGen, StartVal, StopVal, StepVal,
/*IsSigned=*/false, /*InclusiveStop=*/false);
+ assert(LoopResult && "unexpected error");
+ CanonicalLoopInfo *CLI = *LoopResult;
Builder.SetInsertPoint(BB, BB->getFirstInsertionPt());
InsertPointTy AllocaIP = Builder.saveIP();
@@ -2658,14 +2772,15 @@ TEST_F(OpenMPIRBuilderTest, DynamicWorkShareLoopOrdered) {
BasicBlock *LatchBlock = CLI->getLatch();
Value *IV = CLI->getIndVar();
- InsertPointTy EndIP = OMPBuilder.applyWorkshareLoop(
+ OpenMPIRBuilder::InsertPointOrErrorTy EndIP = OMPBuilder.applyWorkshareLoop(
DL, CLI, AllocaIP, /*NeedsBarrier=*/true, OMP_SCHEDULE_Static, ChunkVal,
/*HasSimdModifier=*/false, /*HasMonotonicModifier=*/false,
/*HasNonmonotonicModifier=*/false,
/*HasOrderedClause=*/true);
+ assert(EndIP && "unexpected error");
// Add a termination to our block and check that it is internally consistent.
- Builder.restoreIP(EndIP);
+ Builder.restoreIP(*EndIP);
Builder.CreateRetVoid();
OMPBuilder.finalize();
EXPECT_FALSE(verifyModule(*M, &errs()));
@@ -2749,7 +2864,10 @@ TEST_F(OpenMPIRBuilderTest, MasterDirective) {
EXPECT_NE(IPBB->end(), IP.getPoint());
};
- Builder.restoreIP(OMPBuilder.createMaster(Builder, BodyGenCB, FiniCB));
+ OpenMPIRBuilder::InsertPointOrErrorTy AfterIP = OMPBuilder.createMaster(
+ Builder, BODYGENCB_WRAPPER(BodyGenCB), FINICB_WRAPPER(FiniCB));
+ assert(AfterIP && "unexpected error");
+ Builder.restoreIP(*AfterIP);
Value *EntryBBTI = EntryBB->getTerminator();
EXPECT_NE(EntryBBTI, nullptr);
EXPECT_TRUE(isa<BranchInst>(EntryBBTI));
@@ -2827,8 +2945,10 @@ TEST_F(OpenMPIRBuilderTest, MaskedDirective) {
};
Constant *Filter = ConstantInt::get(Type::getInt32Ty(M->getContext()), 0);
- Builder.restoreIP(
- OMPBuilder.createMasked(Builder, BodyGenCB, FiniCB, Filter));
+ OpenMPIRBuilder::InsertPointOrErrorTy AfterIP = OMPBuilder.createMasked(
+ Builder, BODYGENCB_WRAPPER(BodyGenCB), FINICB_WRAPPER(FiniCB), Filter);
+ assert(AfterIP && "unexpected error");
+ Builder.restoreIP(*AfterIP);
Value *EntryBBTI = EntryBB->getTerminator();
EXPECT_NE(EntryBBTI, nullptr);
EXPECT_TRUE(isa<BranchInst>(EntryBBTI));
@@ -2893,8 +3013,11 @@ TEST_F(OpenMPIRBuilderTest, CriticalDirective) {
};
BasicBlock *EntryBB = Builder.GetInsertBlock();
- Builder.restoreIP(OMPBuilder.createCritical(Builder, BodyGenCB, FiniCB,
- "testCRT", nullptr));
+ OpenMPIRBuilder::InsertPointOrErrorTy AfterIP =
+ OMPBuilder.createCritical(Builder, BODYGENCB_WRAPPER(BodyGenCB),
+ FINICB_WRAPPER(FiniCB), "testCRT", nullptr);
+ assert(AfterIP && "unexpected error");
+ Builder.restoreIP(*AfterIP);
CallInst *CriticalEntryCI = nullptr;
for (auto &EI : *EntryBB) {
@@ -3141,8 +3264,11 @@ TEST_F(OpenMPIRBuilderTest, OrderedDirectiveThreads) {
// Test for "#omp ordered [threads]"
BasicBlock *EntryBB = Builder.GetInsertBlock();
- Builder.restoreIP(
- OMPBuilder.createOrderedThreadsSimd(Builder, BodyGenCB, FiniCB, true));
+ OpenMPIRBuilder::InsertPointOrErrorTy AfterIP =
+ OMPBuilder.createOrderedThreadsSimd(Builder, BODYGENCB_WRAPPER(BodyGenCB),
+ FINICB_WRAPPER(FiniCB), true);
+ assert(AfterIP && "unexpected error");
+ Builder.restoreIP(*AfterIP);
Builder.CreateRetVoid();
OMPBuilder.finalize();
@@ -3212,8 +3338,11 @@ TEST_F(OpenMPIRBuilderTest, OrderedDirectiveSimd) {
// Test for "#omp ordered simd"
BasicBlock *EntryBB = Builder.GetInsertBlock();
- Builder.restoreIP(
- OMPBuilder.createOrderedThreadsSimd(Builder, BodyGenCB, FiniCB, false));
+ OpenMPIRBuilder::InsertPointOrErrorTy AfterIP =
+ OMPBuilder.createOrderedThreadsSimd(Builder, BODYGENCB_WRAPPER(BodyGenCB),
+ FINICB_WRAPPER(FiniCB), false);
+ assert(AfterIP && "unexpected error");
+ Builder.restoreIP(*AfterIP);
Builder.CreateRetVoid();
OMPBuilder.finalize();
@@ -3326,8 +3455,11 @@ TEST_F(OpenMPIRBuilderTest, SingleDirective) {
EXPECT_NE(IPBB->end(), IP.getPoint());
};
- Builder.restoreIP(
- OMPBuilder.createSingle(Builder, BodyGenCB, FiniCB, /*IsNowait*/ false));
+ OpenMPIRBuilder::InsertPointOrErrorTy AfterIP =
+ OMPBuilder.createSingle(Builder, BODYGENCB_WRAPPER(BodyGenCB),
+ FINICB_WRAPPER(FiniCB), /*IsNowait*/ false);
+ assert(AfterIP && "unexpected error");
+ Builder.restoreIP(*AfterIP);
Value *EntryBBTI = EntryBB->getTerminator();
EXPECT_NE(EntryBBTI, nullptr);
EXPECT_TRUE(isa<BranchInst>(EntryBBTI));
@@ -3416,8 +3548,11 @@ TEST_F(OpenMPIRBuilderTest, SingleDirectiveNowait) {
EXPECT_NE(IPBB->end(), IP.getPoint());
};
- Builder.restoreIP(
- OMPBuilder.createSingle(Builder, BodyGenCB, FiniCB, /*IsNowait*/ true));
+ OpenMPIRBuilder::InsertPointOrErrorTy AfterIP =
+ OMPBuilder.createSingle(Builder, BODYGENCB_WRAPPER(BodyGenCB),
+ FINICB_WRAPPER(FiniCB), /*IsNowait*/ true);
+ assert(AfterIP && "unexpected error");
+ Builder.restoreIP(*AfterIP);
Value *EntryBBTI = EntryBB->getTerminator();
EXPECT_NE(EntryBBTI, nullptr);
EXPECT_TRUE(isa<BranchInst>(EntryBBTI));
@@ -3535,9 +3670,11 @@ TEST_F(OpenMPIRBuilderTest, SingleDirectiveCopyPrivate) {
EXPECT_NE(IPBB->end(), IP.getPoint());
};
- Builder.restoreIP(OMPBuilder.createSingle(Builder, BodyGenCB, FiniCB,
- /*IsNowait*/ false, {CPVar},
- {CopyFunc}));
+ OpenMPIRBuilder::InsertPointOrErrorTy AfterIP = OMPBuilder.createSingle(
+ Builder, BODYGENCB_WRAPPER(BodyGenCB), FINICB_WRAPPER(FiniCB),
+ /*IsNowait*/ false, {CPVar}, {CopyFunc});
+ assert(AfterIP && "unexpected error");
+ Builder.restoreIP(*AfterIP);
Value *EntryBBTI = EntryBB->getTerminator();
EXPECT_NE(EntryBBTI, nullptr);
EXPECT_TRUE(isa<BranchInst>(EntryBBTI));
@@ -3798,8 +3935,10 @@ TEST_F(OpenMPIRBuilderTest, OMPAtomicUpdate) {
Sub = IRB.CreateSub(ConstVal, Atomic);
return Sub;
};
- Builder.restoreIP(OMPBuilder.createAtomicUpdate(
- Builder, AllocaIP, X, Expr, AO, RMWOp, UpdateOp, IsXLHSInRHSPart));
+ OpenMPIRBuilder::InsertPointOrErrorTy AfterIP = OMPBuilder.createAtomicUpdate(
+ Builder, AllocaIP, X, Expr, AO, RMWOp, UpdateOp, IsXLHSInRHSPart);
+ assert(AfterIP && "unexpected error");
+ Builder.restoreIP(*AfterIP);
BasicBlock *ContBB = EntryBB->getSingleSuccessor();
BranchInst *ContTI = dyn_cast<BranchInst>(ContBB->getTerminator());
EXPECT_NE(ContTI, nullptr);
@@ -3865,8 +4004,10 @@ TEST_F(OpenMPIRBuilderTest, OMPAtomicUpdateFloat) {
Sub = IRB.CreateFSub(ConstVal, Atomic);
return Sub;
};
- Builder.restoreIP(OMPBuilder.createAtomicUpdate(
- Builder, AllocaIP, X, Expr, AO, RMWOp, UpdateOp, IsXLHSInRHSPart));
+ OpenMPIRBuilder::InsertPointOrErrorTy AfterIP = OMPBuilder.createAtomicUpdate(
+ Builder, AllocaIP, X, Expr, AO, RMWOp, UpdateOp, IsXLHSInRHSPart);
+ assert(AfterIP && "unexpected error");
+ Builder.restoreIP(*AfterIP);
BasicBlock *ContBB = EntryBB->getSingleSuccessor();
BranchInst *ContTI = dyn_cast<BranchInst>(ContBB->getTerminator());
EXPECT_NE(ContTI, nullptr);
@@ -3931,8 +4072,10 @@ TEST_F(OpenMPIRBuilderTest, OMPAtomicUpdateIntr) {
Sub = IRB.CreateSub(ConstVal, Atomic);
return Sub;
};
- Builder.restoreIP(OMPBuilder.createAtomicUpdate(
- Builder, AllocaIP, X, Expr, AO, RMWOp, UpdateOp, IsXLHSInRHSPart));
+ OpenMPIRBuilder::InsertPointOrErrorTy AfterIP = OMPBuilder.createAtomicUpdate(
+ Builder, AllocaIP, X, Expr, AO, RMWOp, UpdateOp, IsXLHSInRHSPart);
+ assert(AfterIP && "unexpected error");
+ Builder.restoreIP(*AfterIP);
BasicBlock *ContBB = EntryBB->getSingleSuccessor();
BranchInst *ContTI = dyn_cast<BranchInst>(ContBB->getTerminator());
EXPECT_NE(ContTI, nullptr);
@@ -4003,9 +4146,12 @@ TEST_F(OpenMPIRBuilderTest, OMPAtomicCapture) {
// integer update - not used
auto UpdateOp = [&](Value *Atomic, IRBuilder<> &IRB) { return nullptr; };
- Builder.restoreIP(OMPBuilder.createAtomicCapture(
- Builder, AllocaIP, X, V, Expr, AO, RMWOp, UpdateOp, UpdateExpr,
- IsPostfixUpdate, IsXLHSInRHSPart));
+ OpenMPIRBuilder::InsertPointOrErrorTy AfterIP =
+ OMPBuilder.createAtomicCapture(Builder, AllocaIP, X, V, Expr, AO, RMWOp,
+ UpdateOp, UpdateExpr, IsPostfixUpdate,
+ IsXLHSInRHSPart);
+ assert(AfterIP && "unexpected error");
+ Builder.restoreIP(*AfterIP);
EXPECT_EQ(EntryBB->getParent()->size(), 1U);
AtomicRMWInst *ARWM = dyn_cast<AtomicRMWInst>(Init->getNextNode());
EXPECT_NE(ARWM, nullptr);
@@ -4361,12 +4507,15 @@ TEST_F(OpenMPIRBuilderTest, CreateTeams) {
Instruction *ThenTerm, *ElseTerm;
SplitBlockAndInsertIfThenElse(Cmp, CodeGenIP.getBlock()->getTerminator(),
&ThenTerm, &ElseTerm);
+ return Error::success();
};
OpenMPIRBuilder::LocationDescription Loc({Builder.saveIP(), DL});
- Builder.restoreIP(OMPBuilder.createTeams(
+ OpenMPIRBuilder::InsertPointOrErrorTy AfterIP = OMPBuilder.createTeams(
Builder, BodyGenCB, /*NumTeamsLower=*/nullptr, /*NumTeamsUpper=*/nullptr,
- /*ThreadLimit=*/nullptr, /*IfExpr=*/nullptr));
+ /*ThreadLimit=*/nullptr, /*IfExpr=*/nullptr);
+ assert(AfterIP && "unexpected error");
+ Builder.restoreIP(*AfterIP);
OMPBuilder.finalize();
Builder.CreateRetVoid();
@@ -4423,14 +4572,16 @@ TEST_F(OpenMPIRBuilderTest, CreateTeamsWithThreadLimit) {
auto BodyGenCB = [&](InsertPointTy AllocaIP, InsertPointTy CodeGenIP) {
Builder.restoreIP(CodeGenIP);
Builder.CreateCall(FakeFunction, {});
+ return Error::success();
};
// `F` has an argument - an integer, so we use that as the thread limit.
- Builder.restoreIP(OMPBuilder.createTeams(/*=*/Builder, BodyGenCB,
- /*NumTeamsLower=*/nullptr,
- /*NumTeamsUpper=*/nullptr,
- /*ThreadLimit=*/F->arg_begin(),
- /*IfExpr=*/nullptr));
+ OpenMPIRBuilder::InsertPointOrErrorTy AfterIP = OMPBuilder.createTeams(
+ /*=*/Builder, BodyGenCB, /*NumTeamsLower=*/nullptr,
+ /*NumTeamsUpper=*/nullptr, /*ThreadLimit=*/F->arg_begin(),
+ /*IfExpr=*/nullptr);
+ assert(AfterIP && "unexpected error");
+ Builder.restoreIP(*AfterIP);
Builder.CreateRetVoid();
OMPBuilder.finalize();
@@ -4474,15 +4625,19 @@ TEST_F(OpenMPIRBuilderTest, CreateTeamsWithNumTeamsUpper) {
auto BodyGenCB = [&](InsertPointTy AllocaIP, InsertPointTy CodeGenIP) {
Builder.restoreIP(CodeGenIP);
Builder.CreateCall(FakeFunction, {});
+ return Error::success();
};
// `F` already has an integer argument, so we use that as upper bound to
// `num_teams`
- Builder.restoreIP(OMPBuilder.createTeams(Builder, BodyGenCB,
- /*NumTeamsLower=*/nullptr,
- /*NumTeamsUpper=*/F->arg_begin(),
- /*ThreadLimit=*/nullptr,
- /*IfExpr=*/nullptr));
+ OpenMPIRBuilder::InsertPointOrErrorTy AfterIP =
+ OMPBuilder.createTeams(Builder, BodyGenCB,
+ /*NumTeamsLower=*/nullptr,
+ /*NumTeamsUpper=*/F->arg_begin(),
+ /*ThreadLimit=*/nullptr,
+ /*IfExpr=*/nullptr);
+ assert(AfterIP && "unexpected error");
+ Builder.restoreIP(*AfterIP);
Builder.CreateRetVoid();
OMPBuilder.finalize();
@@ -4531,13 +4686,16 @@ TEST_F(OpenMPIRBuilderTest, CreateTeamsWithNumTeamsBoth) {
auto BodyGenCB = [&](InsertPointTy AllocaIP, InsertPointTy CodeGenIP) {
Builder.restoreIP(CodeGenIP);
Builder.CreateCall(FakeFunction, {});
+ return Error::success();
};
// `F` already has an integer argument, so we use that as upper bound to
// `num_teams`
- Builder.restoreIP(
+ OpenMPIRBuilder::InsertPointOrErrorTy AfterIP =
OMPBuilder.createTeams(Builder, BodyGenCB, NumTeamsLower, NumTeamsUpper,
- /*ThreadLimit=*/nullptr, /*IfExpr=*/nullptr));
+ /*ThreadLimit=*/nullptr, /*IfExpr=*/nullptr);
+ assert(AfterIP && "unexpected error");
+ Builder.restoreIP(*AfterIP);
Builder.CreateRetVoid();
OMPBuilder.finalize();
@@ -4593,11 +4751,14 @@ TEST_F(OpenMPIRBuilderTest, CreateTeamsWithNumTeamsAndThreadLimit) {
auto BodyGenCB = [&](InsertPointTy AllocaIP, InsertPointTy CodeGenIP) {
Builder.restoreIP(CodeGenIP);
Builder.CreateCall(FakeFunction, {});
+ return Error::success();
};
OpenMPIRBuilder::LocationDescription Loc({Builder.saveIP(), DL});
- Builder.restoreIP(OMPBuilder.createTeams(
- Builder, BodyGenCB, NumTeamsLower, NumTeamsUpper, ThreadLimit, nullptr));
+ OpenMPIRBuilder::InsertPointOrErrorTy AfterIP = OMPBuilder.createTeams(
+ Builder, BodyGenCB, NumTeamsLower, NumTeamsUpper, ThreadLimit, nullptr);
+ assert(AfterIP && "unexpected error");
+ Builder.restoreIP(*AfterIP);
Builder.CreateRetVoid();
OMPBuilder.finalize();
@@ -4644,13 +4805,16 @@ TEST_F(OpenMPIRBuilderTest, CreateTeamsWithIfCondition) {
auto BodyGenCB = [&](InsertPointTy AllocaIP, InsertPointTy CodeGenIP) {
Builder.restoreIP(CodeGenIP);
Builder.CreateCall(FakeFunction, {});
+ return Error::success();
};
// `F` already has an integer argument, so we use that as upper bound to
// `num_teams`
- Builder.restoreIP(OMPBuilder.createTeams(
+ OpenMPIRBuilder::InsertPointOrErrorTy AfterIP = OMPBuilder.createTeams(
Builder, BodyGenCB, /*NumTeamsLower=*/nullptr, /*NumTeamsUpper=*/nullptr,
- /*ThreadLimit=*/nullptr, IfExpr));
+ /*ThreadLimit=*/nullptr, IfExpr);
+ assert(AfterIP && "unexpected error");
+ Builder.restoreIP(*AfterIP);
Builder.CreateRetVoid();
OMPBuilder.finalize();
@@ -4707,12 +4871,15 @@ TEST_F(OpenMPIRBuilderTest, CreateTeamsWithIfConditionAndNumTeams) {
auto BodyGenCB = [&](InsertPointTy AllocaIP, InsertPointTy CodeGenIP) {
Builder.restoreIP(CodeGenIP);
Builder.CreateCall(FakeFunction, {});
+ return Error::success();
};
// `F` already has an integer argument, so we use that as upper bound to
// `num_teams`
- Builder.restoreIP(OMPBuilder.createTeams(Builder, BodyGenCB, NumTeamsLower,
- NumTeamsUpper, ThreadLimit, IfExpr));
+ OpenMPIRBuilder::InsertPointOrErrorTy AfterIP = OMPBuilder.createTeams(
+ Builder, BodyGenCB, NumTeamsLower, NumTeamsUpper, ThreadLimit, IfExpr);
+ assert(AfterIP && "unexpected error");
+ Builder.restoreIP(*AfterIP);
Builder.CreateRetVoid();
OMPBuilder.finalize();
@@ -4937,6 +5104,7 @@ TEST_F(OpenMPIRBuilderTest, CreateReductions) {
BodyIP = Builder.saveIP();
BodyAllocaIP = InnerAllocaIP;
+ return Error::success();
};
// Privatization for reduction creates local copies of reduction variables and
@@ -4969,14 +5137,15 @@ TEST_F(OpenMPIRBuilderTest, CreateReductions) {
};
// Do nothing in finalization.
- auto FiniCB = [&](InsertPointTy CodeGenIP) { return CodeGenIP; };
+ auto FiniCB = [&](InsertPointTy CodeGenIP) { return Error::success(); };
- InsertPointTy AfterIP =
+ OpenMPIRBuilder::InsertPointOrErrorTy AfterIP =
OMPBuilder.createParallel(Loc, OuterAllocaIP, BodyGenCB, PrivCB, FiniCB,
/* IfCondition */ nullptr,
/* NumThreads */ nullptr, OMP_PROC_BIND_default,
/* IsCancellable */ false);
- Builder.restoreIP(AfterIP);
+ assert(AfterIP && "unexpected error");
+ Builder.restoreIP(*AfterIP);
OpenMPIRBuilder::ReductionInfo ReductionInfos[] = {
{SumType, SumReduced, SumPrivatized,
@@ -4989,10 +5158,12 @@ TEST_F(OpenMPIRBuilderTest, CreateReductions) {
bool ReduceVariableByRef[] = {false, false};
- OMPBuilder.createReductions(BodyIP, BodyAllocaIP, ReductionInfos,
- ReduceVariableByRef);
+ OpenMPIRBuilder::InsertPointOrErrorTy ReductionsIP =
+ OMPBuilder.createReductions(BodyIP, BodyAllocaIP, ReductionInfos,
+ ReduceVariableByRef);
+ assert(ReductionsIP && "unexpected error");
- Builder.restoreIP(AfterIP);
+ Builder.restoreIP(*AfterIP);
Builder.CreateRetVoid();
OMPBuilder.finalize(F);
@@ -5172,6 +5343,7 @@ TEST_F(OpenMPIRBuilderTest, CreateTwoReductions) {
FirstBodyIP = Builder.saveIP();
FirstBodyAllocaIP = InnerAllocaIP;
+ return Error::success();
};
InsertPointTy SecondBodyIP, SecondBodyAllocaIP;
@@ -5190,6 +5362,7 @@ TEST_F(OpenMPIRBuilderTest, CreateTwoReductions) {
SecondBodyIP = Builder.saveIP();
SecondBodyAllocaIP = InnerAllocaIP;
+ return Error::success();
};
// Privatization for reduction creates local copies of reduction variables and
@@ -5224,36 +5397,44 @@ TEST_F(OpenMPIRBuilderTest, CreateTwoReductions) {
};
// Do nothing in finalization.
- auto FiniCB = [&](InsertPointTy CodeGenIP) { return CodeGenIP; };
+ auto FiniCB = [&](InsertPointTy CodeGenIP) { return Error::success(); };
- Builder.restoreIP(
+ OpenMPIRBuilder::InsertPointOrErrorTy AfterIP1 =
OMPBuilder.createParallel(Loc, OuterAllocaIP, FirstBodyGenCB, PrivCB,
FiniCB, /* IfCondition */ nullptr,
/* NumThreads */ nullptr, OMP_PROC_BIND_default,
- /* IsCancellable */ false));
- InsertPointTy AfterIP = OMPBuilder.createParallel(
+ /* IsCancellable */ false);
+ assert(AfterIP1 && "unexpected error");
+ Builder.restoreIP(*AfterIP1);
+ OpenMPIRBuilder::InsertPointOrErrorTy AfterIP2 = OMPBuilder.createParallel(
{Builder.saveIP(), DL}, OuterAllocaIP, SecondBodyGenCB, PrivCB, FiniCB,
/* IfCondition */ nullptr,
/* NumThreads */ nullptr, OMP_PROC_BIND_default,
/* IsCancellable */ false);
+ assert(AfterIP2 && "unexpected error");
+ Builder.restoreIP(*AfterIP2);
OMPBuilder.Config.setIsGPU(false);
bool ReduceVariableByRef[] = {false};
- OMPBuilder.createReductions(
- FirstBodyIP, FirstBodyAllocaIP,
- {{SumType, SumReduced, SumPrivatized,
- /*EvaluationKind=*/OpenMPIRBuilder::EvalKind::Scalar, sumReduction,
- /*ReductionGenClang=*/nullptr, sumAtomicReduction}},
- ReduceVariableByRef);
- OMPBuilder.createReductions(
- SecondBodyIP, SecondBodyAllocaIP,
- {{XorType, XorReduced, XorPrivatized,
- /*EvaluationKind=*/OpenMPIRBuilder::EvalKind::Scalar, xorReduction,
- /*ReductionGenClang=*/nullptr, xorAtomicReduction}},
- ReduceVariableByRef);
-
- Builder.restoreIP(AfterIP);
+ OpenMPIRBuilder::InsertPointOrErrorTy ReductionsIP1 =
+ OMPBuilder.createReductions(
+ FirstBodyIP, FirstBodyAllocaIP,
+ {{SumType, SumReduced, SumPrivatized,
+ /*EvaluationKind=*/OpenMPIRBuilder::EvalKind::Scalar, sumReduction,
+ /*ReductionGenClang=*/nullptr, sumAtomicReduction}},
+ ReduceVariableByRef);
+ assert(ReductionsIP1 && "unexpected error");
+ OpenMPIRBuilder::InsertPointOrErrorTy ReductionsIP2 =
+ OMPBuilder.createReductions(
+ SecondBodyIP, SecondBodyAllocaIP,
+ {{XorType, XorReduced, XorPrivatized,
+ /*EvaluationKind=*/OpenMPIRBuilder::EvalKind::Scalar, xorReduction,
+ /*ReductionGenClang=*/nullptr, xorAtomicReduction}},
+ ReduceVariableByRef);
+ assert(ReductionsIP2 && "unexpected error");
+
+ Builder.restoreIP(*AfterIP2);
Builder.CreateRetVoid();
OMPBuilder.finalize(F);
@@ -5320,8 +5501,10 @@ TEST_F(OpenMPIRBuilderTest, CreateSectionsSimple) {
llvm::SmallVector<BodyGenCallbackTy, 4> SectionCBVector;
llvm::SmallVector<BasicBlock *, 4> CaseBBs;
- auto FiniCB = [&](InsertPointTy IP) {};
- auto SectionCB = [&](InsertPointTy AllocaIP, InsertPointTy CodeGenIP) {};
+ auto FiniCB = [&](InsertPointTy IP) { return Error::success(); };
+ auto SectionCB = [&](InsertPointTy AllocaIP, InsertPointTy CodeGenIP) {
+ return Error::success();
+ };
SectionCBVector.push_back(SectionCB);
auto PrivCB = [](InsertPointTy AllocaIP, InsertPointTy CodeGenIP,
@@ -5329,8 +5512,10 @@ TEST_F(OpenMPIRBuilderTest, CreateSectionsSimple) {
llvm::Value *&ReplVal) { return CodeGenIP; };
IRBuilder<>::InsertPoint AllocaIP(&F->getEntryBlock(),
F->getEntryBlock().getFirstInsertionPt());
- Builder.restoreIP(OMPBuilder.createSections(Loc, AllocaIP, SectionCBVector,
- PrivCB, FiniCB, false, false));
+ OpenMPIRBuilder::InsertPointOrErrorTy AfterIP = OMPBuilder.createSections(
+ Loc, AllocaIP, SectionCBVector, PrivCB, FiniCB, false, false);
+ assert(AfterIP && "unexpected error");
+ Builder.restoreIP(*AfterIP);
Builder.CreateRetVoid(); // Required at the end of the function
EXPECT_NE(F->getEntryBlock().getTerminator(), nullptr);
EXPECT_FALSE(verifyModule(*M, &errs()));
@@ -5371,6 +5556,7 @@ TEST_F(OpenMPIRBuilderTest, CreateSections) {
Value *PrivLoad =
Builder.CreateLoad(F->arg_begin()->getType(), PrivAI, "local.alloca");
Builder.CreateICmpNE(F->arg_begin(), PrivLoad);
+ return Error::success();
};
auto PrivCB = [](InsertPointTy AllocaIP, InsertPointTy CodeGenIP,
llvm::Value &, llvm::Value &Val, llvm::Value *&ReplVal) {
@@ -5383,8 +5569,11 @@ TEST_F(OpenMPIRBuilderTest, CreateSections) {
IRBuilder<>::InsertPoint AllocaIP(&F->getEntryBlock(),
F->getEntryBlock().getFirstInsertionPt());
- Builder.restoreIP(OMPBuilder.createSections(Loc, AllocaIP, SectionCBVector,
- PrivCB, FiniCB, false, false));
+ OpenMPIRBuilder::InsertPointOrErrorTy AfterIP =
+ OMPBuilder.createSections(Loc, AllocaIP, SectionCBVector, PrivCB,
+ FINICB_WRAPPER(FiniCB), false, false);
+ assert(AfterIP && "unexpected error");
+ Builder.restoreIP(*AfterIP);
Builder.CreateRetVoid(); // Required at the end of the function
// Switch BB's predecessor is loop condition BB, whose successor at index 1 is
@@ -5468,10 +5657,12 @@ TEST_F(OpenMPIRBuilderTest, CreateSectionsNoWait) {
auto PrivCB = [](InsertPointTy AllocaIP, InsertPointTy CodeGenIP,
llvm::Value &, llvm::Value &Val,
llvm::Value *&ReplVal) { return CodeGenIP; };
- auto FiniCB = [&](InsertPointTy IP) {};
+ auto FiniCB = [&](InsertPointTy IP) { return Error::success(); };
- Builder.restoreIP(OMPBuilder.createSections(Loc, AllocaIP, SectionCBVector,
- PrivCB, FiniCB, false, true));
+ OpenMPIRBuilder::InsertPointOrErrorTy AfterIP = OMPBuilder.createSections(
+ Loc, AllocaIP, SectionCBVector, PrivCB, FiniCB, false, true);
+ assert(AfterIP && "unexpected error");
+ Builder.restoreIP(*AfterIP);
Builder.CreateRetVoid(); // Required at the end of the function
for (auto &Inst : instructions(*F)) {
EXPECT_FALSE(isa<CallInst>(Inst) &&
@@ -5692,9 +5883,11 @@ TEST_F(OpenMPIRBuilderTest, TargetEnterData) {
OMPBuilder.Config.setIsGPU(true);
llvm::omp::RuntimeFunction RTLFunc = OMPRTL___tgt_target_data_begin_mapper;
- Builder.restoreIP(OMPBuilder.createTargetData(
+ OpenMPIRBuilder::InsertPointOrErrorTy AfterIP = OMPBuilder.createTargetData(
Loc, AllocaIP, Builder.saveIP(), Builder.getInt64(DeviceID),
- /* IfCond= */ nullptr, Info, GenMapInfoCB, &RTLFunc));
+ /* IfCond= */ nullptr, Info, GenMapInfoCB, &RTLFunc);
+ assert(AfterIP && "unexpected error");
+ Builder.restoreIP(*AfterIP);
CallInst *TargetDataCall = dyn_cast<CallInst>(&BB->back());
EXPECT_NE(TargetDataCall, nullptr);
@@ -5751,9 +5944,11 @@ TEST_F(OpenMPIRBuilderTest, TargetExitData) {
OMPBuilder.Config.setIsGPU(true);
llvm::omp::RuntimeFunction RTLFunc = OMPRTL___tgt_target_data_end_mapper;
- Builder.restoreIP(OMPBuilder.createTargetData(
+ OpenMPIRBuilder::InsertPointOrErrorTy AfterIP = OMPBuilder.createTargetData(
Loc, AllocaIP, Builder.saveIP(), Builder.getInt64(DeviceID),
- /* IfCond= */ nullptr, Info, GenMapInfoCB, &RTLFunc));
+ /* IfCond= */ nullptr, Info, GenMapInfoCB, &RTLFunc);
+ assert(AfterIP && "unexpected error");
+ Builder.restoreIP(*AfterIP);
CallInst *TargetDataCall = dyn_cast<CallInst>(&BB->back());
EXPECT_NE(TargetDataCall, nullptr);
@@ -5859,9 +6054,12 @@ TEST_F(OpenMPIRBuilderTest, TargetDataRegion) {
return Builder.saveIP();
};
- Builder.restoreIP(OMPBuilder.createTargetData(
- Loc, AllocaIP, Builder.saveIP(), Builder.getInt64(DeviceID),
- /* IfCond= */ nullptr, Info, GenMapInfoCB, nullptr, BodyCB));
+ OpenMPIRBuilder::InsertPointOrErrorTy TargetDataIP1 =
+ OMPBuilder.createTargetData(
+ Loc, AllocaIP, Builder.saveIP(), Builder.getInt64(DeviceID),
+ /* IfCond= */ nullptr, Info, GenMapInfoCB, nullptr, BodyCB);
+ assert(TargetDataIP1 && "unexpected error");
+ Builder.restoreIP(*TargetDataIP1);
CallInst *TargetDataCall = dyn_cast<CallInst>(&BB->back());
EXPECT_NE(TargetDataCall, nullptr);
@@ -5884,9 +6082,12 @@ TEST_F(OpenMPIRBuilderTest, TargetDataRegion) {
EXPECT_EQ(TargetDataCall, nullptr);
return Builder.saveIP();
};
- Builder.restoreIP(OMPBuilder.createTargetData(
- Loc, AllocaIP, Builder.saveIP(), Builder.getInt64(DeviceID),
- /* IfCond= */ nullptr, Info, GenMapInfoCB, nullptr, BodyTargetCB));
+ OpenMPIRBuilder::InsertPointOrErrorTy TargetDataIP2 =
+ OMPBuilder.createTargetData(
+ Loc, AllocaIP, Builder.saveIP(), Builder.getInt64(DeviceID),
+ /* IfCond= */ nullptr, Info, GenMapInfoCB, nullptr, BodyTargetCB);
+ assert(TargetDataIP2 && "unexpected error");
+ Builder.restoreIP(*TargetDataIP2);
EXPECT_TRUE(CheckDevicePassBodyGen);
Builder.CreateRetVoid();
@@ -5981,9 +6182,11 @@ TEST_F(OpenMPIRBuilderTest, TargetRegion) {
TargetRegionEntryInfo EntryInfo("func", 42, 4711, 17);
OpenMPIRBuilder::LocationDescription OmpLoc({Builder.saveIP(), DL});
- Builder.restoreIP(OMPBuilder.createTarget(
+ OpenMPIRBuilder::InsertPointOrErrorTy AfterIP = OMPBuilder.createTarget(
OmpLoc, /*IsOffloadEntry=*/true, Builder.saveIP(), Builder.saveIP(),
- EntryInfo, -1, 0, Inputs, GenMapInfoCB, BodyGenCB, SimpleArgAccessorCB));
+ EntryInfo, -1, 0, Inputs, GenMapInfoCB, BodyGenCB, SimpleArgAccessorCB);
+ assert(AfterIP && "unexpected error");
+ Builder.restoreIP(*AfterIP);
OMPBuilder.finalize();
Builder.CreateRetVoid();
@@ -6089,11 +6292,13 @@ TEST_F(OpenMPIRBuilderTest, TargetRegionDevice) {
TargetRegionEntryInfo EntryInfo("parent", /*DeviceID=*/1, /*FileID=*/2,
/*Line=*/3, /*Count=*/0);
- Builder.restoreIP(
+ OpenMPIRBuilder::InsertPointOrErrorTy AfterIP =
OMPBuilder.createTarget(Loc, /*IsOffloadEntry=*/true, EntryIP, EntryIP,
EntryInfo, /*NumTeams=*/-1,
/*NumThreads=*/0, CapturedArgs, GenMapInfoCB,
- BodyGenCB, SimpleArgAccessorCB));
+ BodyGenCB, SimpleArgAccessorCB);
+ assert(AfterIP && "unexpected error");
+ Builder.restoreIP(*AfterIP);
Builder.CreateRetVoid();
OMPBuilder.finalize();
@@ -6238,11 +6443,13 @@ TEST_F(OpenMPIRBuilderTest, ConstantAllocaRaise) {
TargetRegionEntryInfo EntryInfo("parent", /*DeviceID=*/1, /*FileID=*/2,
/*Line=*/3, /*Count=*/0);
- Builder.restoreIP(
+ OpenMPIRBuilder::InsertPointOrErrorTy AfterIP =
OMPBuilder.createTarget(Loc, /*IsOffloadEntry=*/true, EntryIP, EntryIP,
EntryInfo, /*NumTeams=*/-1,
/*NumThreads=*/0, CapturedArgs, GenMapInfoCB,
- BodyGenCB, SimpleArgAccessorCB));
+ BodyGenCB, SimpleArgAccessorCB);
+ assert(AfterIP && "unexpected error");
+ Builder.restoreIP(*AfterIP);
Builder.CreateRetVoid();
OMPBuilder.finalize();
@@ -6354,15 +6561,17 @@ TEST_F(OpenMPIRBuilderTest, CreateTask) {
Instruction *ThenTerm, *ElseTerm;
SplitBlockAndInsertIfThenElse(Cmp, CodeGenIP.getBlock()->getTerminator(),
&ThenTerm, &ElseTerm);
+ return Error::success();
};
BasicBlock *AllocaBB = Builder.GetInsertBlock();
BasicBlock *BodyBB = splitBB(Builder, /*CreateBranch=*/true, "alloca.split");
OpenMPIRBuilder::LocationDescription Loc(
InsertPointTy(BodyBB, BodyBB->getFirstInsertionPt()), DL);
- Builder.restoreIP(OMPBuilder.createTask(
- Loc, InsertPointTy(AllocaBB, AllocaBB->getFirstInsertionPt()),
- BodyGenCB));
+ OpenMPIRBuilder::InsertPointOrErrorTy AfterIP = OMPBuilder.createTask(
+ Loc, InsertPointTy(AllocaBB, AllocaBB->getFirstInsertionPt()), BodyGenCB);
+ assert(AfterIP && "unexpected error");
+ Builder.restoreIP(*AfterIP);
OMPBuilder.finalize();
Builder.CreateRetVoid();
@@ -6460,15 +6669,18 @@ TEST_F(OpenMPIRBuilderTest, CreateTaskNoArgs) {
F->setName("func");
IRBuilder<> Builder(BB);
- auto BodyGenCB = [&](InsertPointTy AllocaIP, InsertPointTy CodeGenIP) {};
+ auto BodyGenCB = [&](InsertPointTy AllocaIP, InsertPointTy CodeGenIP) {
+ return Error::success();
+ };
BasicBlock *AllocaBB = Builder.GetInsertBlock();
BasicBlock *BodyBB = splitBB(Builder, /*CreateBranch=*/true, "alloca.split");
OpenMPIRBuilder::LocationDescription Loc(
InsertPointTy(BodyBB, BodyBB->getFirstInsertionPt()), DL);
- Builder.restoreIP(OMPBuilder.createTask(
- Loc, InsertPointTy(AllocaBB, AllocaBB->getFirstInsertionPt()),
- BodyGenCB));
+ OpenMPIRBuilder::InsertPointOrErrorTy AfterIP = OMPBuilder.createTask(
+ Loc, InsertPointTy(AllocaBB, AllocaBB->getFirstInsertionPt()), BodyGenCB);
+ assert(AfterIP && "unexpected error");
+ Builder.restoreIP(*AfterIP);
OMPBuilder.finalize();
Builder.CreateRetVoid();
@@ -6490,14 +6702,18 @@ TEST_F(OpenMPIRBuilderTest, CreateTaskUntied) {
OMPBuilder.initialize();
F->setName("func");
IRBuilder<> Builder(BB);
- auto BodyGenCB = [&](InsertPointTy AllocaIP, InsertPointTy CodeGenIP) {};
+ auto BodyGenCB = [&](InsertPointTy AllocaIP, InsertPointTy CodeGenIP) {
+ return Error::success();
+ };
BasicBlock *AllocaBB = Builder.GetInsertBlock();
BasicBlock *BodyBB = splitBB(Builder, /*CreateBranch=*/true, "alloca.split");
OpenMPIRBuilder::LocationDescription Loc(
InsertPointTy(BodyBB, BodyBB->getFirstInsertionPt()), DL);
- Builder.restoreIP(OMPBuilder.createTask(
+ OpenMPIRBuilder::InsertPointOrErrorTy AfterIP = OMPBuilder.createTask(
Loc, InsertPointTy(AllocaBB, AllocaBB->getFirstInsertionPt()), BodyGenCB,
- /*Tied=*/false));
+ /*Tied=*/false);
+ assert(AfterIP && "unexpected error");
+ Builder.restoreIP(*AfterIP);
OMPBuilder.finalize();
Builder.CreateRetVoid();
@@ -6520,7 +6736,9 @@ TEST_F(OpenMPIRBuilderTest, CreateTaskDepend) {
OMPBuilder.initialize();
F->setName("func");
IRBuilder<> Builder(BB);
- auto BodyGenCB = [&](InsertPointTy AllocaIP, InsertPointTy CodeGenIP) {};
+ auto BodyGenCB = [&](InsertPointTy AllocaIP, InsertPointTy CodeGenIP) {
+ return Error::success();
+ };
BasicBlock *AllocaBB = Builder.GetInsertBlock();
BasicBlock *BodyBB = splitBB(Builder, /*CreateBranch=*/true, "alloca.split");
OpenMPIRBuilder::LocationDescription Loc(
@@ -6532,9 +6750,11 @@ TEST_F(OpenMPIRBuilderTest, CreateTaskDepend) {
Type::getInt32Ty(M->getContext()), InDep);
DDS.push_back(DDIn);
}
- Builder.restoreIP(OMPBuilder.createTask(
+ OpenMPIRBuilder::InsertPointOrErrorTy AfterIP = OMPBuilder.createTask(
Loc, InsertPointTy(AllocaBB, AllocaBB->getFirstInsertionPt()), BodyGenCB,
- /*Tied=*/false, /*Final*/ nullptr, /*IfCondition*/ nullptr, DDS));
+ /*Tied=*/false, /*Final*/ nullptr, /*IfCondition*/ nullptr, DDS);
+ assert(AfterIP && "unexpected error");
+ Builder.restoreIP(*AfterIP);
OMPBuilder.finalize();
Builder.CreateRetVoid();
@@ -6594,7 +6814,9 @@ TEST_F(OpenMPIRBuilderTest, CreateTaskFinal) {
OMPBuilder.initialize();
F->setName("func");
IRBuilder<> Builder(BB);
- auto BodyGenCB = [&](InsertPointTy AllocaIP, InsertPointTy CodeGenIP) {};
+ auto BodyGenCB = [&](InsertPointTy AllocaIP, InsertPointTy CodeGenIP) {
+ return Error::success();
+ };
BasicBlock *BodyBB = splitBB(Builder, /*CreateBranch=*/true, "alloca.split");
IRBuilderBase::InsertPoint AllocaIP = Builder.saveIP();
Builder.SetInsertPoint(BodyBB);
@@ -6602,8 +6824,11 @@ TEST_F(OpenMPIRBuilderTest, CreateTaskFinal) {
CmpInst::Predicate::ICMP_EQ, F->getArg(0),
ConstantInt::get(Type::getInt32Ty(M->getContext()), 0U));
OpenMPIRBuilder::LocationDescription Loc(Builder.saveIP(), DL);
- Builder.restoreIP(OMPBuilder.createTask(Loc, AllocaIP, BodyGenCB,
- /*Tied=*/false, Final));
+ OpenMPIRBuilder::InsertPointOrErrorTy AfterIP =
+ OMPBuilder.createTask(Loc, AllocaIP, BodyGenCB,
+ /*Tied=*/false, Final);
+ assert(AfterIP && "unexpected error");
+ Builder.restoreIP(*AfterIP);
OMPBuilder.finalize();
Builder.CreateRetVoid();
@@ -6648,7 +6873,9 @@ TEST_F(OpenMPIRBuilderTest, CreateTaskIfCondition) {
OMPBuilder.initialize();
F->setName("func");
IRBuilder<> Builder(BB);
- auto BodyGenCB = [&](InsertPointTy AllocaIP, InsertPointTy CodeGenIP) {};
+ auto BodyGenCB = [&](InsertPointTy AllocaIP, InsertPointTy CodeGenIP) {
+ return Error::success();
+ };
BasicBlock *BodyBB = splitBB(Builder, /*CreateBranch=*/true, "alloca.split");
IRBuilderBase::InsertPoint AllocaIP = Builder.saveIP();
Builder.SetInsertPoint(BodyBB);
@@ -6656,9 +6883,11 @@ TEST_F(OpenMPIRBuilderTest, CreateTaskIfCondition) {
CmpInst::Predicate::ICMP_EQ, F->getArg(0),
ConstantInt::get(Type::getInt32Ty(M->getContext()), 0U));
OpenMPIRBuilder::LocationDescription Loc(Builder.saveIP(), DL);
- Builder.restoreIP(OMPBuilder.createTask(Loc, AllocaIP, BodyGenCB,
- /*Tied=*/false, /*Final=*/nullptr,
- IfCondition));
+ OpenMPIRBuilder::InsertPointOrErrorTy AfterIP =
+ OMPBuilder.createTask(Loc, AllocaIP, BodyGenCB,
+ /*Tied=*/false, /*Final=*/nullptr, IfCondition);
+ assert(AfterIP && "unexpected error");
+ Builder.restoreIP(*AfterIP);
OMPBuilder.finalize();
Builder.CreateRetVoid();
@@ -6742,15 +6971,17 @@ TEST_F(OpenMPIRBuilderTest, CreateTaskgroup) {
SplitBlockAndInsertIfThenElse(InternalIfCmp,
CodeGenIP.getBlock()->getTerminator(),
&ThenTerm, &ElseTerm);
+ return Error::success();
};
BasicBlock *AllocaBB = Builder.GetInsertBlock();
BasicBlock *BodyBB = splitBB(Builder, /*CreateBranch=*/true, "alloca.split");
OpenMPIRBuilder::LocationDescription Loc(
InsertPointTy(BodyBB, BodyBB->getFirstInsertionPt()), DL);
- Builder.restoreIP(OMPBuilder.createTaskgroup(
- Loc, InsertPointTy(AllocaBB, AllocaBB->getFirstInsertionPt()),
- BodyGenCB));
+ OpenMPIRBuilder::InsertPointOrErrorTy AfterIP = OMPBuilder.createTaskgroup(
+ Loc, InsertPointTy(AllocaBB, AllocaBB->getFirstInsertionPt()), BodyGenCB);
+ assert(AfterIP && "unexpected error");
+ Builder.restoreIP(*AfterIP);
OMPBuilder.finalize();
Builder.CreateRetVoid();
@@ -6823,9 +7054,13 @@ TEST_F(OpenMPIRBuilderTest, CreateTaskgroupWithTasks) {
Builder.CreateLoad(Alloca64->getAllocatedType(), Alloca64);
Value *AddInst = Builder.CreateAdd(LoadValue, Builder.getInt64(64));
Builder.CreateStore(AddInst, Alloca64);
+ return Error::success();
};
OpenMPIRBuilder::LocationDescription Loc(Builder.saveIP(), DL);
- Builder.restoreIP(OMPBuilder.createTask(Loc, AllocaIP, TaskBodyGenCB1));
+ OpenMPIRBuilder::InsertPointOrErrorTy TaskIP1 =
+ OMPBuilder.createTask(Loc, AllocaIP, TaskBodyGenCB1);
+ assert(TaskIP1 && "unexpected error");
+ Builder.restoreIP(*TaskIP1);
auto TaskBodyGenCB2 = [&](InsertPointTy AllocaIP, InsertPointTy CodeGenIP) {
Builder.restoreIP(CodeGenIP);
@@ -6833,18 +7068,24 @@ TEST_F(OpenMPIRBuilderTest, CreateTaskgroupWithTasks) {
Builder.CreateLoad(Alloca32->getAllocatedType(), Alloca32);
Value *AddInst = Builder.CreateAdd(LoadValue, Builder.getInt32(32));
Builder.CreateStore(AddInst, Alloca32);
+ return Error::success();
};
OpenMPIRBuilder::LocationDescription Loc2(Builder.saveIP(), DL);
- Builder.restoreIP(OMPBuilder.createTask(Loc2, AllocaIP, TaskBodyGenCB2));
+ OpenMPIRBuilder::InsertPointOrErrorTy TaskIP2 =
+ OMPBuilder.createTask(Loc2, AllocaIP, TaskBodyGenCB2);
+ assert(TaskIP2 && "unexpected error");
+ Builder.restoreIP(*TaskIP2);
+ return Error::success();
};
BasicBlock *AllocaBB = Builder.GetInsertBlock();
BasicBlock *BodyBB = splitBB(Builder, /*CreateBranch=*/true, "alloca.split");
OpenMPIRBuilder::LocationDescription Loc(
InsertPointTy(BodyBB, BodyBB->getFirstInsertionPt()), DL);
- Builder.restoreIP(OMPBuilder.createTaskgroup(
- Loc, InsertPointTy(AllocaBB, AllocaBB->getFirstInsertionPt()),
- BodyGenCB));
+ OpenMPIRBuilder::InsertPointOrErrorTy AfterIP = OMPBuilder.createTaskgroup(
+ Loc, InsertPointTy(AllocaBB, AllocaBB->getFirstInsertionPt()), BodyGenCB);
+ assert(AfterIP && "unexpected error");
+ Builder.restoreIP(*AfterIP);
OMPBuilder.finalize();
Builder.CreateRetVoid();