aboutsummaryrefslogtreecommitdiff
path: root/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp
diff options
context:
space:
mode:
authorAlexey Bataev <a.bataev@outlook.com>2021-06-03 14:13:35 -0700
committerAlexey Bataev <a.bataev@outlook.com>2021-06-04 08:24:55 -0700
commitc84a5448b5ac3212303c553866e8d42a5a75ce30 (patch)
tree199b267d071b6cbaac1e7ee1856a438d759e22e6 /llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp
parenta85f5874e2a4d4bad8c53d277e9df183122793ae (diff)
downloadllvm-c84a5448b5ac3212303c553866e8d42a5a75ce30.zip
llvm-c84a5448b5ac3212303c553866e8d42a5a75ce30.tar.gz
llvm-c84a5448b5ac3212303c553866e8d42a5a75ce30.tar.bz2
[OPENMP]Fix PR50129: omp cancel parallel not working as expected.
Need to emit a call for __kmpc_cancel_barrier in the exit block for __kmpc_cancel function call if cancellation of the parallel block is requested. Differential Revision: https://reviews.llvm.org/D103646
Diffstat (limited to 'llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp')
-rw-r--r--llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp34
1 files changed, 30 insertions, 4 deletions
diff --git a/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp b/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp
index c9e4bed..0df6fe5 100644
--- a/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp
+++ b/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp
@@ -231,7 +231,7 @@ TEST_F(OpenMPIRBuilderTest, CreateCancel) {
auto NewIP = OMPBuilder.createCancel(Loc, nullptr, OMPD_parallel);
Builder.restoreIP(NewIP);
EXPECT_FALSE(M->global_empty());
- EXPECT_EQ(M->size(), 3U);
+ EXPECT_EQ(M->size(), 4U);
EXPECT_EQ(F->size(), 4U);
EXPECT_EQ(BB->size(), 4U);
@@ -252,7 +252,20 @@ TEST_F(OpenMPIRBuilderTest, CreateCancel) {
Instruction *CancelBBTI = Cancel->getParent()->getTerminator();
EXPECT_EQ(CancelBBTI->getNumSuccessors(), 2U);
EXPECT_EQ(CancelBBTI->getSuccessor(0), NewIP.getBlock());
- EXPECT_EQ(CancelBBTI->getSuccessor(1)->size(), 1U);
+ EXPECT_EQ(CancelBBTI->getSuccessor(1)->size(), 3U);
+ CallInst *GTID1 = dyn_cast<CallInst>(&CancelBBTI->getSuccessor(1)->front());
+ EXPECT_NE(GTID1, nullptr);
+ EXPECT_EQ(GTID1->getNumArgOperands(), 1U);
+ EXPECT_EQ(GTID1->getCalledFunction()->getName(), "__kmpc_global_thread_num");
+ EXPECT_FALSE(GTID1->getCalledFunction()->doesNotAccessMemory());
+ EXPECT_FALSE(GTID1->getCalledFunction()->doesNotFreeMemory());
+ CallInst *Barrier = dyn_cast<CallInst>(GTID1->getNextNode());
+ EXPECT_NE(Barrier, nullptr);
+ EXPECT_EQ(Barrier->getNumArgOperands(), 2U);
+ EXPECT_EQ(Barrier->getCalledFunction()->getName(), "__kmpc_cancel_barrier");
+ EXPECT_FALSE(Barrier->getCalledFunction()->doesNotAccessMemory());
+ EXPECT_FALSE(Barrier->getCalledFunction()->doesNotFreeMemory());
+ EXPECT_EQ(Barrier->getNumUses(), 0U);
EXPECT_EQ(CancelBBTI->getSuccessor(1)->getTerminator()->getNumSuccessors(),
1U);
EXPECT_EQ(CancelBBTI->getSuccessor(1)->getTerminator()->getSuccessor(0),
@@ -286,7 +299,7 @@ TEST_F(OpenMPIRBuilderTest, CreateCancelIfCond) {
auto NewIP = OMPBuilder.createCancel(Loc, Builder.getTrue(), OMPD_parallel);
Builder.restoreIP(NewIP);
EXPECT_FALSE(M->global_empty());
- EXPECT_EQ(M->size(), 3U);
+ EXPECT_EQ(M->size(), 4U);
EXPECT_EQ(F->size(), 7U);
EXPECT_EQ(BB->size(), 1U);
ASSERT_TRUE(isa<BranchInst>(BB->getTerminator()));
@@ -313,7 +326,20 @@ TEST_F(OpenMPIRBuilderTest, CreateCancelIfCond) {
EXPECT_EQ(CancelBBTI->getNumSuccessors(), 2U);
EXPECT_EQ(CancelBBTI->getSuccessor(0)->size(), 1U);
EXPECT_EQ(CancelBBTI->getSuccessor(0)->getUniqueSuccessor(), NewIP.getBlock());
- EXPECT_EQ(CancelBBTI->getSuccessor(1)->size(), 1U);
+ EXPECT_EQ(CancelBBTI->getSuccessor(1)->size(), 3U);
+ CallInst *GTID1 = dyn_cast<CallInst>(&CancelBBTI->getSuccessor(1)->front());
+ EXPECT_NE(GTID1, nullptr);
+ EXPECT_EQ(GTID1->getNumArgOperands(), 1U);
+ EXPECT_EQ(GTID1->getCalledFunction()->getName(), "__kmpc_global_thread_num");
+ EXPECT_FALSE(GTID1->getCalledFunction()->doesNotAccessMemory());
+ EXPECT_FALSE(GTID1->getCalledFunction()->doesNotFreeMemory());
+ CallInst *Barrier = dyn_cast<CallInst>(GTID1->getNextNode());
+ EXPECT_NE(Barrier, nullptr);
+ EXPECT_EQ(Barrier->getNumArgOperands(), 2U);
+ EXPECT_EQ(Barrier->getCalledFunction()->getName(), "__kmpc_cancel_barrier");
+ EXPECT_FALSE(Barrier->getCalledFunction()->doesNotAccessMemory());
+ EXPECT_FALSE(Barrier->getCalledFunction()->doesNotFreeMemory());
+ EXPECT_EQ(Barrier->getNumUses(), 0U);
EXPECT_EQ(CancelBBTI->getSuccessor(1)->getTerminator()->getNumSuccessors(),
1U);
EXPECT_EQ(CancelBBTI->getSuccessor(1)->getTerminator()->getSuccessor(0),