mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-25 18:16:04 +00:00
[flang][openacc] Lower acc declare link for module variable
This patch adds support to lower the link clause on OpenACC declare construct in module declaration. Depends on D156463 Reviewed By: razvanlupusoru Differential Revision: https://reviews.llvm.org/D156464
This commit is contained in:
parent
bbd214d997
commit
a2b92017d3
@ -2416,7 +2416,6 @@ static void genACC(Fortran::lower::AbstractConverter &converter,
|
||||
} else if (moduleOp) {
|
||||
mlir::OpBuilder modBuilder(moduleOp.getBodyRegion());
|
||||
for (const Fortran::parser::AccClause &clause : accClauseList.v) {
|
||||
mlir::Location clauseLocation = converter.genLocation(clause.source);
|
||||
if (const auto *createClause =
|
||||
std::get_if<Fortran::parser::AccClause::Create>(&clause.u)) {
|
||||
genGlobalCtorsWithModifier<Fortran::parser::AccClause::Create,
|
||||
@ -2441,8 +2440,14 @@ static void genACC(Fortran::lower::AbstractConverter &converter,
|
||||
mlir::acc::DeclareDeviceResidentOp>(
|
||||
converter, modBuilder, deviceResidentClause->v,
|
||||
mlir::acc::DataClause::acc_declare_device_resident);
|
||||
} else if (const auto *linkClause =
|
||||
std::get_if<Fortran::parser::AccClause::Link>(
|
||||
&clause.u)) {
|
||||
genGlobalCtors<mlir::acc::DeclareLinkOp, mlir::acc::DeclareLinkOp>(
|
||||
converter, modBuilder, linkClause->v,
|
||||
mlir::acc::DataClause::acc_declare_link);
|
||||
} else {
|
||||
TODO(clauseLocation, "OpenACC declare clause");
|
||||
llvm::report_fatal_error("unsupported clause on DECLARE directive");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -70,3 +70,18 @@ end module
|
||||
! CHECK: acc.declare_enter dataOperands(%[[DEVICERESIDENT]] : !fir.ref<!fir.array<5000xi32>>)
|
||||
! CHECK: acc.terminator
|
||||
! CHECK: }
|
||||
|
||||
module acc_declare_device_link_test
|
||||
integer, parameter :: n = 5000
|
||||
integer, dimension(n) :: data1
|
||||
!$acc declare link(data1)
|
||||
end module
|
||||
|
||||
! CHECK-LABEL: fir.global @_QMacc_declare_device_link_testEdata1 {acc.declare = #acc.declare<dataClause = acc_declare_link>} : !fir.array<5000xi32> {
|
||||
|
||||
! CHECK-LABEL: acc.global_ctor @_QMacc_declare_device_link_testEdata1_acc_ctor {
|
||||
! CHECK: %[[GLOBAL_ADDR:.*]] = fir.address_of(@_QMacc_declare_device_link_testEdata1) {acc.declare = #acc.declare<dataClause = acc_declare_link>} : !fir.ref<!fir.array<5000xi32>>
|
||||
! CHECK: %[[LINK:.*]] = acc.declare_link varPtr(%[[GLOBAL_ADDR]] : !fir.ref<!fir.array<5000xi32>>) -> !fir.ref<!fir.array<5000xi32>> {name = "data1"}
|
||||
! CHECK: acc.declare_enter dataOperands(%[[LINK]] : !fir.ref<!fir.array<5000xi32>>)
|
||||
! CHECK: acc.terminator
|
||||
! CHECK: }
|
||||
|
Loading…
x
Reference in New Issue
Block a user