Skip to content

Commit

Permalink
[flang][openacc] Lower async/wait clauses for acc.data
Browse files Browse the repository at this point in the history
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
  • Loading branch information
clementval committed Jun 30, 2023
1 parent 5e2f094 commit 2faf397
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 1 deletion.
9 changes: 8 additions & 1 deletion flang/lib/Lower/OpenACC.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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<Fortran::parser::AccClause::Async>(&clause.u)) {
genAsyncClause(converter, asyncClause, async, addAsyncAttr, stmtCtx);
} else if (const auto *waitClause =
std::get_if<Fortran::parser::AccClause::Wait>(&clause.u)) {
genWaitClause(converter, waitClause, waitOperands, waitDevnum,
addWaitAttr, stmtCtx);
}
}

Expand All @@ -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);
Expand Down
30 changes: 30 additions & 0 deletions flang/test/Lower/OpenACC/acc-data.f90
Original file line number Diff line number Diff line change
Expand Up @@ -144,5 +144,35 @@ subroutine acc_data
! CHECK: acc.detach accPtr(%[[ATTACH_D]] : !fir.ptr<f32>) {dataClause = 10 : i64, name = "d"}
! CHECK: acc.detach accPtr(%[[ATTACH_E]] : !fir.ptr<f32>) {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

0 comments on commit 2faf397

Please sign in to comment.