aboutsummaryrefslogtreecommitdiff
path: root/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp
diff options
context:
space:
mode:
authorDavid Truby <david.truby@arm.com>2022-11-22 13:32:47 +0000
committerDavid Truby <david.truby@arm.com>2022-12-09 14:23:27 +0000
commitb72f1ec9fbb14cd7d2f5112d2c52ef5cdd1aa94a (patch)
tree6d49423d2ef1fe20e529fb30c39b19a29480b9b0 /llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp
parente7328a9eb22307d80f86f668a75c2b082ee8636e (diff)
downloadllvm-b72f1ec9fbb14cd7d2f5112d2c52ef5cdd1aa94a.zip
llvm-b72f1ec9fbb14cd7d2f5112d2c52ef5cdd1aa94a.tar.gz
llvm-b72f1ec9fbb14cd7d2f5112d2c52ef5cdd1aa94a.tar.bz2
[openmp][mlir] Lower parallel if to new fork_call_if function.
This patch adds a new runtime function `fork_call_if` and uses that to lower parallel if statements when going through OpenMPIRBuilder. This fixes an issue where the OpenMPIRBuilder passes all arguments to fork_call as a struct but this struct is not filled corretly in the non-if branch by handling the fork inside the runtime. Differential Revision: https://reviews.llvm.org/D138495
Diffstat (limited to 'llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp')
-rw-r--r--llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp32
1 files changed, 8 insertions, 24 deletions
diff --git a/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp b/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp
index c5a9e6e..30d8aee 100644
--- a/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp
+++ b/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp
@@ -986,38 +986,22 @@ TEST_F(OpenMPIRBuilderTest, ParallelIfCond) {
EXPECT_EQ(OutlinedFn->arg_size(), 3U);
EXPECT_EQ(&OutlinedFn->getEntryBlock(), PrivAI->getParent());
- ASSERT_EQ(OutlinedFn->getNumUses(), 2U);
+ ASSERT_EQ(OutlinedFn->getNumUses(), 1U);
- CallInst *DirectCI = nullptr;
CallInst *ForkCI = nullptr;
for (User *Usr : OutlinedFn->users()) {
- if (isa<CallInst>(Usr)) {
- ASSERT_EQ(DirectCI, nullptr);
- DirectCI = cast<CallInst>(Usr);
- } else {
- ASSERT_TRUE(isa<ConstantExpr>(Usr));
- ASSERT_EQ(Usr->getNumUses(), 1U);
- ASSERT_TRUE(isa<CallInst>(Usr->user_back()));
- ForkCI = cast<CallInst>(Usr->user_back());
- }
+ ASSERT_TRUE(isa<ConstantExpr>(Usr));
+ ASSERT_EQ(Usr->getNumUses(), 1U);
+ ASSERT_TRUE(isa<CallInst>(Usr->user_back()));
+ ForkCI = cast<CallInst>(Usr->user_back());
}
- EXPECT_EQ(ForkCI->getCalledFunction()->getName(), "__kmpc_fork_call");
- EXPECT_EQ(ForkCI->arg_size(), 4U);
+ EXPECT_EQ(ForkCI->getCalledFunction()->getName(), "__kmpc_fork_call_if");
+ EXPECT_EQ(ForkCI->arg_size(), 5U);
EXPECT_TRUE(isa<GlobalVariable>(ForkCI->getArgOperand(0)));
EXPECT_EQ(ForkCI->getArgOperand(1),
ConstantInt::get(Type::getInt32Ty(Ctx), 1));
- Value *StoredForkArg =
- findStoredValueInAggregateAt(Ctx, ForkCI->getArgOperand(3), 0);
- EXPECT_EQ(StoredForkArg, F->arg_begin());
-
- EXPECT_EQ(DirectCI->getCalledFunction(), OutlinedFn);
- EXPECT_EQ(DirectCI->arg_size(), 3U);
- EXPECT_TRUE(isa<AllocaInst>(DirectCI->getArgOperand(0)));
- EXPECT_TRUE(isa<AllocaInst>(DirectCI->getArgOperand(1)));
- Value *StoredDirectArg =
- findStoredValueInAggregateAt(Ctx, DirectCI->getArgOperand(2), 0);
- EXPECT_EQ(StoredDirectArg, F->arg_begin());
+ EXPECT_EQ(ForkCI->getArgOperand(3)->getType(), Type::getInt32Ty(Ctx));
}
TEST_F(OpenMPIRBuilderTest, ParallelCancelBarrier) {