diff options
author | David Truby <david.truby@arm.com> | 2022-11-22 13:32:47 +0000 |
---|---|---|
committer | David Truby <david.truby@arm.com> | 2022-12-09 14:23:27 +0000 |
commit | b72f1ec9fbb14cd7d2f5112d2c52ef5cdd1aa94a (patch) | |
tree | 6d49423d2ef1fe20e529fb30c39b19a29480b9b0 /llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp | |
parent | e7328a9eb22307d80f86f668a75c2b082ee8636e (diff) | |
download | llvm-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.cpp | 32 |
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) { |