-
Notifications
You must be signed in to change notification settings - Fork 759
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[OpenACC] Implement firstprivate clause for compute constructs
This clause is pretty nearly copy/paste from private, except that it doesn't support 'loop', and thus 'kernelsloop' for appertainment.
- Loading branch information
1 parent
72e07d4
commit a13c514
Showing
17 changed files
with
377 additions
and
24 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
55 changes: 55 additions & 0 deletions
55
clang/test/SemaOpenACC/compute-construct-firstprivate-clause.c
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,55 @@ | ||
// RUN: %clang_cc1 %s -fopenacc -verify | ||
|
||
typedef struct IsComplete { | ||
struct S { int A; } CompositeMember; | ||
int ScalarMember; | ||
float ArrayMember[5]; | ||
void *PointerMember; | ||
} Complete; | ||
void uses(int IntParam, short *PointerParam, float ArrayParam[5], Complete CompositeParam) { | ||
int LocalInt; | ||
short *LocalPointer; | ||
float LocalArray[5]; | ||
Complete LocalComposite; | ||
// Check Appertainment: | ||
#pragma acc parallel firstprivate(LocalInt) | ||
while(1); | ||
#pragma acc serial firstprivate(LocalInt) | ||
while(1); | ||
// expected-error@+1{{OpenACC 'firstprivate' clause is not valid on 'kernels' directive}} | ||
#pragma acc kernels firstprivate(LocalInt) | ||
while(1); | ||
|
||
// Valid cases: | ||
#pragma acc parallel firstprivate(LocalInt, LocalPointer, LocalArray) | ||
while(1); | ||
#pragma acc parallel firstprivate(LocalArray[2:1]) | ||
while(1); | ||
|
||
#pragma acc parallel firstprivate(LocalComposite.ScalarMember, LocalComposite.ScalarMember) | ||
while(1); | ||
|
||
// expected-error@+1{{OpenACC variable is not a valid variable name, sub-array, array element, or composite variable member}} | ||
#pragma acc parallel firstprivate(1 + IntParam) | ||
while(1); | ||
|
||
// expected-error@+1{{OpenACC variable is not a valid variable name, sub-array, array element, or composite variable member}} | ||
#pragma acc parallel firstprivate(+IntParam) | ||
while(1); | ||
|
||
// expected-error@+1{{OpenACC sub-array length is unspecified and cannot be inferred because the subscripted value is not an array}} | ||
#pragma acc parallel firstprivate(PointerParam[2:]) | ||
while(1); | ||
|
||
// expected-error@+1{{OpenACC sub-array specified range [2:5] would be out of the range of the subscripted array size of 5}} | ||
#pragma acc parallel firstprivate(ArrayParam[2:5]) | ||
while(1); | ||
|
||
// expected-error@+2{{OpenACC sub-array specified range [2:5] would be out of the range of the subscripted array size of 5}} | ||
// expected-error@+1{{OpenACC variable is not a valid variable name, sub-array, array element, or composite variable member}} | ||
#pragma acc parallel firstprivate((float*)ArrayParam[2:5]) | ||
while(1); | ||
// expected-error@+1{{OpenACC variable is not a valid variable name, sub-array, array element, or composite variable member}} | ||
#pragma acc parallel firstprivate((float)ArrayParam[2]) | ||
while(1); | ||
} |
Oops, something went wrong.