From 2faf397e4f55b9d3e6aea682e66a948b056fce2d Mon Sep 17 00:00:00 2001 From: Valentin Clement Date: Fri, 30 Jun 2023 11:12:14 -0700 Subject: [PATCH] [flang][openacc] Lower async/wait clauses for acc.data Lower async and wait clauses to the correponding attributes and operands on the acc.data operation. Depends on D154131 Reviewed By: razvanlupusoru Differential Revision: https://reviews.llvm.org/D154155 --- flang/lib/Lower/OpenACC.cpp | 9 ++++++++- flang/test/Lower/OpenACC/acc-data.f90 | 30 ++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/flang/lib/Lower/OpenACC.cpp b/flang/lib/Lower/OpenACC.cpp index 648e7e2..c281b8f 100644 --- a/flang/lib/Lower/OpenACC.cpp +++ b/flang/lib/Lower/OpenACC.cpp @@ -1459,6 +1459,13 @@ static void genACCDataOp(Fortran::lower::AbstractConverter &converter, /*structured=*/true); attachEntryOperands.append(dataClauseOperands.begin() + crtDataStart, dataClauseOperands.end()); + } else if (const auto *asyncClause = + std::get_if(&clause.u)) { + genAsyncClause(converter, asyncClause, async, addAsyncAttr, stmtCtx); + } else if (const auto *waitClause = + std::get_if(&clause.u)) { + genWaitClause(converter, waitClause, waitOperands, waitDevnum, + addWaitAttr, stmtCtx); } } @@ -1475,7 +1482,7 @@ static void genACCDataOp(Fortran::lower::AbstractConverter &converter, builder, currentLocation, operands, operandSegments); dataOp.setAsyncAttr(addAsyncAttr); - dataOp.setAsyncAttr(addWaitAttr); + dataOp.setWaitAttr(addWaitAttr); auto insPt = builder.saveInsertionPoint(); builder.setInsertionPointAfter(dataOp); diff --git a/flang/test/Lower/OpenACC/acc-data.f90 b/flang/test/Lower/OpenACC/acc-data.f90 index 32af803..7b880d7 100644 --- a/flang/test/Lower/OpenACC/acc-data.f90 +++ b/flang/test/Lower/OpenACC/acc-data.f90 @@ -144,5 +144,35 @@ subroutine acc_data ! CHECK: acc.detach accPtr(%[[ATTACH_D]] : !fir.ptr) {dataClause = 10 : i64, name = "d"} ! CHECK: acc.detach accPtr(%[[ATTACH_E]] : !fir.ptr) {dataClause = 10 : i64, name = "e"} + !$acc data present(a) async + !$acc end data + +! CHECK: acc.data dataOperands(%{{.*}}) { +! CHECK: } attributes {asyncAttr} + + !$acc data present(a) async(1) + !$acc end data + +! CHECK: acc.data async(%{{.*}} : i32) dataOperands(%{{.*}}) { +! CHECK: }{{$}} + + !$acc data present(a) wait + !$acc end data + +! CHECK: acc.data dataOperands(%{{.*}}) { +! CHECK: } attributes {waitAttr} + + !$acc data present(a) wait(1) + !$acc end data + +! CHECK: acc.data dataOperands(%{{.*}}) wait(%{{.*}} : i32) { +! CHECK: }{{$}} + + !$acc data present(a) wait(devnum: 0: 1) + !$acc end data + +! CHECK: acc.data dataOperands(%{{.*}}) wait_devnum(%{{.*}} : i32) wait(%{{.*}} : i32) { +! CHECK: }{{$}} + end subroutine acc_data -- 2.7.4