[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.
This commit is contained in:
erichkeane
2024-11-27 08:14:16 -08:00
parent d668304998
commit 969b7658fe
4 changed files with 26 additions and 17 deletions

View File

@@ -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(

View File

@@ -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);
}

View File

@@ -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);
}

View File

@@ -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);
}