Skip to content

Commit b82c259

Browse files
committed
[flang][openacc] Add lowering support for the link clause on OpenACC declare
Lower link clause with data entry operation. Reviewed By: razvanlupusoru Differential Revision: https://reviews.llvm.org/D156913
1 parent 4b08be7 commit b82c259

File tree

2 files changed

+22
-0
lines changed

2 files changed

+22
-0
lines changed

flang/lib/Lower/OpenACC.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2465,6 +2465,12 @@ genDeclareInFunction(Fortran::lower::AbstractConverter &converter,
24652465
devicePtrClause->v, converter, semanticsContext, stmtCtx,
24662466
dataClauseOperands, mlir::acc::DataClause::acc_deviceptr,
24672467
/*structured=*/true);
2468+
} else if (const auto *linkClause =
2469+
std::get_if<Fortran::parser::AccClause::Link>(&clause.u)) {
2470+
genDataOperandOperations<mlir::acc::DeclareLinkOp>(
2471+
linkClause->v, converter, semanticsContext, stmtCtx,
2472+
dataClauseOperands, mlir::acc::DataClause::acc_declare_link,
2473+
/*structured=*/true);
24682474
} else {
24692475
mlir::Location clauseLocation = converter.genLocation(clause.source);
24702476
TODO(clauseLocation, "clause on declare directive");

flang/test/Lower/OpenACC/acc-declare.f90

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,22 @@ subroutine acc_declare_deviceptr(a)
187187
! CHECK: %[[DEVICEPTR:.*]] = acc.deviceptr varPtr(%[[ARG0]] : !fir.ref<!fir.array<100xi32>>) bounds(%{{.*}}) -> !fir.ref<!fir.array<100xi32>> {name = "a"}
188188
! CHECK: acc.declare_enter dataOperands(%[[DEVICEPTR]] : !fir.ref<!fir.array<100xi32>>)
189189
! CHECK: %{{.*}}:2 = fir.do_loop %{{.*}} = %{{.*}} to %{{.*}} step %{{.*}} iter_args(%arg{{.*}} = %{{.*}}) -> (index, i32)
190+
! CHECK-NOT: acc.declare_exit
191+
192+
subroutine acc_declare_link(a)
193+
integer :: a(100), i
194+
!$acc declare link(a)
195+
196+
do i = 1, 100
197+
a(i) = i
198+
end do
199+
end subroutine
200+
201+
! CHECK-LABEL: func.func @_QMacc_declarePacc_declare_link(
202+
! CHECK-SAME: %[[ARG0:.*]]: !fir.ref<!fir.array<100xi32>> {fir.bindc_name = "a"})
203+
! CHECK: %[[LINK:.*]] = acc.declare_link varPtr(%[[ARG0]] : !fir.ref<!fir.array<100xi32>>) bounds(%{{.*}}) -> !fir.ref<!fir.array<100xi32>> {name = "a"}
204+
! CHECK: acc.declare_enter dataOperands(%[[LINK]] : !fir.ref<!fir.array<100xi32>>)
205+
! CHECK: %{{.*}}:2 = fir.do_loop %{{.*}} = %{{.*}} to %{{.*}} step %{{.*}} iter_args(%arg{{.*}} = %{{.*}}) -> (index, i32)
190206
! CHECK-NOT: acc.declare_exit
191207

192208
end module

0 commit comments

Comments
 (0)