aboutsummaryrefslogtreecommitdiff
path: root/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp
diff options
context:
space:
mode:
authorMats Petersson <mats.petersson@arm.com>2021-04-30 14:13:55 +0100
committerMats Petersson <mats.petersson@arm.com>2021-05-27 12:28:27 +0100
commitea4c5fb04c6d9618d451fb2d2c360dc95c6d9131 (patch)
tree1fa6834cd6820acf015018b749be1f4b89354ad6 /llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp
parent1d5b976b778327901bfe35c164590f80169e5170 (diff)
downloadllvm-ea4c5fb04c6d9618d451fb2d2c360dc95c6d9131.zip
llvm-ea4c5fb04c6d9618d451fb2d2c360dc95c6d9131.tar.gz
llvm-ea4c5fb04c6d9618d451fb2d2c360dc95c6d9131.tar.bz2
[OpenMP]Add support for workshare loop modifier in lowering
When lowering the dynamic, guided, auto and runtime types of scheduling, there is an optional monotonic or non-monotonic modifier. This patch adds support in the OMP IR Builder to pass this down to the runtime functions. Also implements tests for the variants. Differential Revision: https://reviews.llvm.org/D102008
Diffstat (limited to 'llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp')
-rw-r--r--llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp30
1 files changed, 21 insertions, 9 deletions
diff --git a/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp b/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp
index 962dcc2..c2da3f3 100644
--- a/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp
+++ b/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp
@@ -1721,7 +1721,7 @@ TEST_P(OpenMPIRBuilderTestWithParams, DynamicWorkShareLoop) {
omp::OMPScheduleType SchedType = GetParam();
uint32_t ChunkSize = 1;
- switch (SchedType) {
+ switch (SchedType & ~omp::OMPScheduleType::ModifierMask) {
case omp::OMPScheduleType::DynamicChunked:
case omp::OMPScheduleType::GuidedChunked:
ChunkSize = 7;
@@ -1794,8 +1794,9 @@ TEST_P(OpenMPIRBuilderTestWithParams, DynamicWorkShareLoop) {
EXPECT_EQ(InitCall->getCalledFunction()->getName(),
"__kmpc_dispatch_init_4u");
EXPECT_EQ(InitCall->getNumArgOperands(), 7U);
- EXPECT_EQ(InitCall->getArgOperand(6),
- ConstantInt::get(Type::getInt32Ty(Ctx), ChunkSize));
+ EXPECT_EQ(InitCall->getArgOperand(6), ConstantInt::get(LCTy, ChunkSize));
+ ConstantInt *SchedVal = cast<ConstantInt>(InitCall->getArgOperand(2));
+ EXPECT_EQ(SchedVal->getValue(), static_cast<uint64_t>(SchedType));
ConstantInt *OrigLowerBound =
dyn_cast<ConstantInt>(LowerBoundStore->getValueOperand());
@@ -1827,12 +1828,23 @@ TEST_P(OpenMPIRBuilderTestWithParams, DynamicWorkShareLoop) {
EXPECT_FALSE(verifyModule(*M, &errs()));
}
-INSTANTIATE_TEST_SUITE_P(OpenMPWSLoopSchedulingTypes,
- OpenMPIRBuilderTestWithParams,
- ::testing::Values(omp::OMPScheduleType::DynamicChunked,
- omp::OMPScheduleType::GuidedChunked,
- omp::OMPScheduleType::Auto,
- omp::OMPScheduleType::Runtime));
+INSTANTIATE_TEST_CASE_P(
+ OpenMPWSLoopSchedulingTypes, OpenMPIRBuilderTestWithParams,
+ ::testing::Values(omp::OMPScheduleType::DynamicChunked,
+ omp::OMPScheduleType::GuidedChunked,
+ omp::OMPScheduleType::Auto, omp::OMPScheduleType::Runtime,
+ omp::OMPScheduleType::DynamicChunked |
+ omp::OMPScheduleType::ModifierMonotonic,
+ omp::OMPScheduleType::DynamicChunked |
+ omp::OMPScheduleType::ModifierNonmonotonic,
+ omp::OMPScheduleType::GuidedChunked |
+ omp::OMPScheduleType::ModifierMonotonic,
+ omp::OMPScheduleType::GuidedChunked |
+ omp::OMPScheduleType::ModifierNonmonotonic,
+ omp::OMPScheduleType::Auto |
+ omp::OMPScheduleType::ModifierMonotonic,
+ omp::OMPScheduleType::Runtime |
+ omp::OMPScheduleType::ModifierMonotonic));
TEST_F(OpenMPIRBuilderTest, MasterDirective) {
using InsertPointTy = OpenMPIRBuilder::InsertPointTy;