Skip to content

Commit 86bbf8e

Browse files
committed
[flang][openacc] Fix wait-argument for wait clause + add tests
This patch fix the usage of the wait-argument in a clause and add several tests and fix the unparsing of the wait-argument. Reviewed By: sscalpone Differential Revision: https://reviews.llvm.org/D86325
1 parent f6615b2 commit 86bbf8e

File tree

3 files changed

+33
-3
lines changed

3 files changed

+33
-3
lines changed

flang/lib/Parser/openacc-parsers.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ TYPE_PARSER("AUTO" >> construct<AccClause>(construct<AccClause::Auto>()) ||
111111
construct<AccClause>(construct<AccClause::Vector>(maybe(
112112
parenthesized(("LENGTH:" >> scalarIntExpr || scalarIntExpr))))) ||
113113
"WAIT" >> construct<AccClause>(construct<AccClause::Wait>(
114-
maybe(Parser<AccWaitArgument>{}))) ||
114+
maybe(parenthesized(Parser<AccWaitArgument>{})))) ||
115115
"WORKER" >>
116116
construct<AccClause>(construct<AccClause::Worker>(maybe(
117117
parenthesized(("NUM:" >> scalarIntExpr || scalarIntExpr))))) ||
@@ -125,8 +125,10 @@ TYPE_PARSER(construct<AccObjectList>(nonemptyList(Parser<AccObject>{})))
125125
TYPE_PARSER(construct<AccObjectListWithModifier>(
126126
maybe(Parser<AccDataModifier>{}), Parser<AccObjectList>{}))
127127

128-
TYPE_PARSER(construct<AccWaitArgument>(
129-
maybe("DEVNUM:" >> scalarIntExpr / ":"), nonemptyList(scalarIntExpr)))
128+
// 2.16.3 (2485) wait-argument is:
129+
// [devnum : int-expr :] [queues :] int-expr-list
130+
TYPE_PARSER(construct<AccWaitArgument>(maybe("DEVNUM:" >> scalarIntExpr / ":"),
131+
"QUEUES:" >> nonemptyList(scalarIntExpr) || nonemptyList(scalarIntExpr)))
130132

131133
// 2.9 (1609) size-expr is one of:
132134
// int-expr

flang/lib/Parser/unparse.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1937,6 +1937,10 @@ class UnparseVisitor {
19371937
Put("\n");
19381938
EndOpenACC();
19391939
}
1940+
void Unparse(const AccWaitArgument &x) {
1941+
Walk("DEVNUM:", std::get<std::optional<ScalarIntExpr>>(x.t), ":");
1942+
Walk(std::get<std::list<ScalarIntExpr>>(x.t), ",");
1943+
}
19401944
void Unparse(const OpenACCWaitConstruct &x) {
19411945
BeginOpenACC();
19421946
Word("!$ACC ");

flang/test/Semantics/acc-clause-validity.f90

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,30 @@ program openacc_clause_validity
187187
!ERROR: Unmatched END PARALLEL LOOP directive
188188
!$acc end parallel loop
189189

190+
!$acc kernels wait(1, 2) async(3)
191+
!$acc end kernels
192+
193+
!$acc kernels wait(queues: 1, 2) async(3)
194+
!$acc end kernels
195+
196+
!$acc kernels wait(devnum: 1: 1, 2) async(3)
197+
!$acc end kernels
198+
199+
!$acc kernels wait(devnum: 1: queues: 1, 2) async(3)
200+
!$acc end kernels
201+
202+
!$acc wait(1)
203+
!$acc wait(1, 2)
204+
205+
!$acc wait(queues: 1)
206+
!$acc wait(queues: 1, 2)
207+
208+
!$acc wait(devnum: 1: 3)
209+
!$acc wait(devnum: 1: 3, 4)
210+
211+
!$acc wait(devnum: 1: queues: 3)
212+
!$acc wait(devnum: 1: queues: 3, 4)
213+
190214
contains
191215

192216
subroutine sub1(a)

0 commit comments

Comments
 (0)