Author: erichkeane Date: 2024-11-27T08:32:33-08:00 New Revision: 969b7658fe34cf7638e1385d813e765a4c61dfc7
URL: https://github.com/llvm/llvm-project/commit/969b7658fe34cf7638e1385d813e765a4c61dfc7 DIFF: https://github.com/llvm/llvm-project/commit/969b7658fe34cf7638e1385d813e765a4c61dfc7.diff LOG: [OpenACC] Enable 'wait' for combined constructs Once again a situation where the combined and compute do the exact same thing as far as Sema/AST/etc is concerned, so this patch adds tests and enables it. Added: Modified: clang/lib/Sema/SemaOpenACC.cpp clang/test/AST/ast-print-openacc-combined-construct.cpp clang/test/SemaOpenACC/combined-construct-auto_seq_independent-clauses.c clang/test/SemaOpenACC/combined-construct-device_type-clause.c Removed: ################################################################################ diff --git a/clang/lib/Sema/SemaOpenACC.cpp b/clang/lib/Sema/SemaOpenACC.cpp index f9c002d116b20d..00514f4cf5b4ee 100644 --- a/clang/lib/Sema/SemaOpenACC.cpp +++ b/clang/lib/Sema/SemaOpenACC.cpp @@ -984,10 +984,11 @@ OpenACCClause *SemaOpenACCClauseVisitor::VisitDevicePtrClause( OpenACCClause *SemaOpenACCClauseVisitor::VisitWaitClause( SemaOpenACC::OpenACCParsedClause &Clause) { - // Restrictions only properly implemented on 'compute' constructs, and - // 'compute' constructs are the only construct that can do anything with - // this yet, so skip/treat as unimplemented in this case. - if (!isOpenACCComputeDirectiveKind(Clause.getDirectiveKind())) + // Restrictions only properly implemented on 'compute'/'combined' constructs, + // and 'compute'/'combined' constructs are the only construct that can do + // anything with this yet, so skip/treat as unimplemented in this case. + if (!isOpenACCComputeDirectiveKind(Clause.getDirectiveKind()) && + !isOpenACCCombinedDirectiveKind(Clause.getDirectiveKind())) return isNotImplemented(); return OpenACCWaitClause::Create( diff --git a/clang/test/AST/ast-print-openacc-combined-construct.cpp b/clang/test/AST/ast-print-openacc-combined-construct.cpp index 0d02d3daad162e..42c0d248c79fff 100644 --- a/clang/test/AST/ast-print-openacc-combined-construct.cpp +++ b/clang/test/AST/ast-print-openacc-combined-construct.cpp @@ -137,4 +137,25 @@ void foo() { // CHECK: #pragma acc kernels loop deviceptr(iPtr, arrayPtr[0]) #pragma acc kernels loop deviceptr(iPtr, arrayPtr[0]) for(int i = 0;i<5;++i); + +// CHECK: #pragma acc parallel loop wait() +#pragma acc parallel loop wait() + for(int i = 0;i<5;++i); + +// CHECK: #pragma acc parallel loop wait(*iPtr, i) +#pragma acc parallel loop wait(*iPtr, i) + for(int i = 0;i<5;++i); + +// CHECK: #pragma acc parallel loop wait(queues: *iPtr, i) +#pragma acc parallel loop wait(queues:*iPtr, i) + for(int i = 0;i<5;++i); + +// CHECK: #pragma acc parallel loop wait(devnum: i : *iPtr, i) +#pragma acc parallel loop wait(devnum:i:*iPtr, i) + for(int i = 0;i<5;++i); + +// CHECK: #pragma acc parallel loop wait(devnum: i : queues: *iPtr, i) +#pragma acc parallel loop wait(devnum:i:queues:*iPtr, i) + for(int i = 0;i<5;++i); + } diff --git a/clang/test/SemaOpenACC/combined-construct-auto_seq_independent-clauses.c b/clang/test/SemaOpenACC/combined-construct-auto_seq_independent-clauses.c index fe86960cac4ba1..e338177cf93afc 100644 --- a/clang/test/SemaOpenACC/combined-construct-auto_seq_independent-clauses.c +++ b/clang/test/SemaOpenACC/combined-construct-auto_seq_independent-clauses.c @@ -195,8 +195,6 @@ void uses() { // expected-warning@+1{{OpenACC clause 'gang' not yet implemented}} #pragma acc parallel loop auto gang for(unsigned i = 0; i < 5; ++i); - // TODOexpected-error@+1{{OpenACC 'wait' clause is not valid on 'parallel loop' directive}} - // expected-warning@+1{{OpenACC clause 'wait' not yet implemented}} #pragma acc parallel loop auto wait for(unsigned i = 0; i < 5; ++i); @@ -354,8 +352,6 @@ void uses() { // expected-warning@+1{{OpenACC clause 'gang' not yet implemented}} #pragma acc parallel loop gang auto for(unsigned i = 0; i < 5; ++i); - // TODOexpected-error@+1{{OpenACC 'wait' clause is not valid on 'parallel loop' directive}} - // expected-warning@+1{{OpenACC clause 'wait' not yet implemented}} #pragma acc parallel loop wait auto for(unsigned i = 0; i < 5; ++i); @@ -514,8 +510,6 @@ void uses() { // expected-warning@+1{{OpenACC clause 'gang' not yet implemented}} #pragma acc parallel loop independent gang for(unsigned i = 0; i < 5; ++i); - // TODOexpected-error@+1{{OpenACC 'wait' clause is not valid on 'parallel loop' directive}} - // expected-warning@+1{{OpenACC clause 'wait' not yet implemented}} #pragma acc parallel loop independent wait for(unsigned i = 0; i < 5; ++i); @@ -673,8 +667,6 @@ void uses() { // expected-warning@+1{{OpenACC clause 'gang' not yet implemented}} #pragma acc parallel loop gang independent for(unsigned i = 0; i < 5; ++i); - // TODOexpected-error@+1{{OpenACC 'wait' clause is not valid on 'parallel loop' directive}} - // expected-warning@+1{{OpenACC clause 'wait' not yet implemented}} #pragma acc parallel loop wait independent for(unsigned i = 0; i < 5; ++i); @@ -836,8 +828,6 @@ void uses() { #pragma acc parallel loop seq tile(1+2, 1) for(;;) for(unsigned i = 0; i < 5; ++i); - // TODOexpected-error@+1{{OpenACC 'wait' clause is not valid on 'parallel loop' directive}} - // expected-warning@+1{{OpenACC clause 'wait' not yet implemented}} #pragma acc parallel loop seq wait for(unsigned i = 0; i < 5; ++i); @@ -1001,8 +991,6 @@ void uses() { #pragma acc parallel loop tile(1+2, 1) seq for(;;) for(unsigned i = 0; i < 5; ++i); - // TODOexpected-error@+1{{OpenACC 'wait' clause is not valid on 'parallel loop' directive}} - // expected-warning@+1{{OpenACC clause 'wait' not yet implemented}} #pragma acc parallel loop wait seq for(unsigned i = 0; i < 5; ++i); } diff --git a/clang/test/SemaOpenACC/combined-construct-device_type-clause.c b/clang/test/SemaOpenACC/combined-construct-device_type-clause.c index 9b7a3ec6b0adae..58b3cdc2820bcf 100644 --- a/clang/test/SemaOpenACC/combined-construct-device_type-clause.c +++ b/clang/test/SemaOpenACC/combined-construct-device_type-clause.c @@ -218,7 +218,6 @@ void uses() { // expected-warning@+1{{OpenACC clause 'gang' not yet implemented, clause ignored}} #pragma acc serial loop dtype(*) gang for(int i = 0; i < 5; ++i); - // expected-warning@+1{{OpenACC clause 'wait' not yet implemented, clause ignored}} #pragma acc parallel loop device_type(*) wait for(int i = 0; i < 5; ++i); } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits