[flang][OpenMP] Added support for lowering OpenMP taskwait construct

Summary:
This patch lower `!OMP TASKWAIT` construct from PFT to
OpenMPDialect operations.
Construct is lowered with conformance to OpenMP 4.5 spec.

Patch is carved out of following approved PR:
https://github.com/flang-compiler/f18-llvm-project/pull/280

Reviewed By: kiranchandramohan, clementval

Differential Revision: https://reviews.llvm.org/D83983
This commit is contained in:
Sourabh Singh Tomar 2020-07-17 01:30:11 +05:30
parent 8dea7f3202
commit 079b49b3fb
2 changed files with 18 additions and 1 deletions

View File

@ -35,7 +35,9 @@ static void genOMP(Fortran::lower::AbstractConverter &absConv,
absConv.getCurrentLocation());
break;
case llvm::omp::Directive::OMPD_taskwait:
TODO();
absConv.getFirOpBuilder().create<mlir::omp::TaskwaitOp>(
absConv.getCurrentLocation());
break;
case llvm::omp::Directive::OMPD_taskyield:
TODO();
case llvm::omp::Directive::OMPD_target_enter_data:

View File

@ -41,4 +41,19 @@ TEST_F(OpenMPLoweringTest, Barrier) {
EXPECT_EQ(succeeded(barrierOp.verify()), true);
}
TEST_F(OpenMPLoweringTest, TaskWait) {
// Construct a dummy parse tree node for `!OMP taskwait`.
struct Fortran::parser::OmpSimpleStandaloneDirective taskWaitDirective(
llvm::omp::Directive::OMPD_taskwait);
// Check and lower the `!OMP taskwait` node to `TaskwaitOp` operation of
// OpenMPDialect.
EXPECT_EQ(taskWaitDirective.v, llvm::omp::Directive::OMPD_taskwait);
auto taskWaitOp = mlirOpBuilder->create<mlir::omp::TaskwaitOp>(
mlirOpBuilder->getUnknownLoc());
EXPECT_EQ(taskWaitOp.getOperationName(), "omp.taskwait");
EXPECT_EQ(succeeded(taskWaitOp.verify()), true);
}
// main() from gtest_main