[flang-commits] [flang] [flang][openacc] Allow acc routine before implicit part (PR #71460)
Valentin Clement バレンタイン クレメン via flang-commits
flang-commits at lists.llvm.org
Mon Nov 6 16:13:18 PST 2023
https://github.com/clementval updated https://github.com/llvm/llvm-project/pull/71460
>From 8298d64d4ab1a1b3853a6545d03c263900ca22f1 Mon Sep 17 00:00:00 2001
From: Valentin Clement <clementval at gmail.com>
Date: Mon, 6 Nov 2023 15:27:56 -0800
Subject: [PATCH 1/2] [flang][openacc] Allow acc routine before implicit part
---
flang/include/flang/Parser/parse-tree.h | 3 +-
flang/lib/Parser/Fortran-parsers.cpp | 3 +-
flang/test/Lower/OpenACC/acc-routine04.f90 | 34 ++++++++++++++++++++++
3 files changed, 38 insertions(+), 2 deletions(-)
create mode 100644 flang/test/Lower/OpenACC/acc-routine04.f90
diff --git a/flang/include/flang/Parser/parse-tree.h b/flang/include/flang/Parser/parse-tree.h
index 4806fc49f3441de..393e0e24ec5cbd9 100644
--- a/flang/include/flang/Parser/parse-tree.h
+++ b/flang/include/flang/Parser/parse-tree.h
@@ -413,7 +413,8 @@ struct ImplicitPartStmt {
Statement<common::Indirection<OldParameterStmt>>,
Statement<common::Indirection<FormatStmt>>,
Statement<common::Indirection<EntryStmt>>,
- common::Indirection<CompilerDirective>>
+ common::Indirection<CompilerDirective>,
+ common::Indirection<OpenACCDeclarativeConstruct>>
u;
};
diff --git a/flang/lib/Parser/Fortran-parsers.cpp b/flang/lib/Parser/Fortran-parsers.cpp
index d7e01c924c6b32c..c070bc1de37352f 100644
--- a/flang/lib/Parser/Fortran-parsers.cpp
+++ b/flang/lib/Parser/Fortran-parsers.cpp
@@ -114,7 +114,8 @@ TYPE_PARSER(first(
construct<ImplicitPartStmt>(statement(indirect(oldParameterStmt))),
construct<ImplicitPartStmt>(statement(indirect(formatStmt))),
construct<ImplicitPartStmt>(statement(indirect(entryStmt))),
- construct<ImplicitPartStmt>(indirect(compilerDirective))))
+ construct<ImplicitPartStmt>(indirect(compilerDirective)),
+ construct<ImplicitPartStmt>(indirect(openaccDeclarativeConstruct))))
// R512 internal-subprogram -> function-subprogram | subroutine-subprogram
// Internal subprograms are not program units, so their END statements
diff --git a/flang/test/Lower/OpenACC/acc-routine04.f90 b/flang/test/Lower/OpenACC/acc-routine04.f90
new file mode 100644
index 000000000000000..f7b1d50af2bda30
--- /dev/null
+++ b/flang/test/Lower/OpenACC/acc-routine04.f90
@@ -0,0 +1,34 @@
+! This test checks correct lowering when OpenACC routine directive is placed
+! before implicit none.
+
+! RUN: bbc -fopenacc -emit-fir %s -o - | FileCheck %s
+! RUN: bbc -fopenacc -emit-hlfir %s -o - | FileCheck %s
+
+module dummy_mod
+contains
+
+ subroutine sub1(i)
+ !$acc routine seq
+ integer :: i
+ end subroutine
+end module
+
+program test_acc_routine
+ use dummy_mod
+
+ !$acc routine(sub2) seq
+
+ implicit none
+
+ integer :: i
+
+contains
+ subroutine sub2()
+ end subroutine
+
+end program
+
+! CHECK: acc.routine @acc_routine_1 func(@_QFPsub2) seq
+! CHECK: acc.routine @acc_routine_0 func(@_QMdummy_modPsub1) seq
+! CHECK: func.func @_QMdummy_modPsub1(%arg0: !fir.ref<i32> {fir.bindc_name = "i"}) attributes {acc.routine_info = #acc.routine_info<[@acc_routine_0]>}
+! CHECK: func.func @_QQmain() attributes {fir.bindc_name = "test_acc_routine"}
>From ce38b2c5d09ec5dc4ebc487750634a1c7ef78a17 Mon Sep 17 00:00:00 2001
From: Valentin Clement <clementval at gmail.com>
Date: Mon, 6 Nov 2023 16:13:02 -0800
Subject: [PATCH 2/2] Add check line for sub2
---
flang/test/Lower/OpenACC/acc-routine04.f90 | 1 +
1 file changed, 1 insertion(+)
diff --git a/flang/test/Lower/OpenACC/acc-routine04.f90 b/flang/test/Lower/OpenACC/acc-routine04.f90
index f7b1d50af2bda30..a2987a3598e7992 100644
--- a/flang/test/Lower/OpenACC/acc-routine04.f90
+++ b/flang/test/Lower/OpenACC/acc-routine04.f90
@@ -32,3 +32,4 @@ subroutine sub2()
! CHECK: acc.routine @acc_routine_0 func(@_QMdummy_modPsub1) seq
! CHECK: func.func @_QMdummy_modPsub1(%arg0: !fir.ref<i32> {fir.bindc_name = "i"}) attributes {acc.routine_info = #acc.routine_info<[@acc_routine_0]>}
! CHECK: func.func @_QQmain() attributes {fir.bindc_name = "test_acc_routine"}
+! CHECK: func.func @_QFPsub2() attributes {acc.routine_info = #acc.routine_info<[@acc_routine_1]>}
More information about the flang-commits
mailing list