mirror of
https://github.com/intel/llvm.git
synced 2026-01-24 17:01:00 +08:00
[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:
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user