Skip to content

Commit 5048808

Browse files
committed
[OpenACC] Implement 'default' Sema for 'data' clause
No additional rules here beyond enabling it, this patch just enables 'default' and adds tests.
1 parent 186fac3 commit 5048808

11 files changed

+111
-20
lines changed

clang/lib/Sema/SemaOpenACC.cpp

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -587,14 +587,6 @@ class SemaOpenACCClauseVisitor {
587587

588588
OpenACCClause *SemaOpenACCClauseVisitor::VisitDefaultClause(
589589
SemaOpenACC::OpenACCParsedClause &Clause) {
590-
// Restrictions only properly implemented on 'compute'/'combined' constructs,
591-
// and 'compute'/'combined' constructs are the only construct that can do
592-
// anything with this yet, so skip/treat as unimplemented in this case.
593-
// Only 'data' is left.
594-
if (!isOpenACCComputeDirectiveKind(Clause.getDirectiveKind()) &&
595-
!isOpenACCCombinedDirectiveKind(Clause.getDirectiveKind()))
596-
return isNotImplemented();
597-
598590
// Don't add an invalid clause to the AST.
599591
if (Clause.getDefaultClauseKind() == OpenACCDefaultClauseKind::Invalid)
600592
return nullptr;

clang/test/AST/ast-print-openacc-data-construct.cpp

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,7 @@ void foo() {
66
// them, so the 'check' lines should start to include those once we implement
77
// them. For now, they don't emit those because they are 'not implemented'.
88

9-
// CHECK: #pragma acc data
10-
// CHECK-NOT: default(none)
9+
// CHECK: #pragma acc data default(none)
1110
#pragma acc data default(none)
1211
;
1312

@@ -32,7 +31,7 @@ void foo() {
3231
int *iPtr;
3332
int array[5];
3433

35-
// CHECK: #pragma acc data if(i == array[1])
34+
// CHECK: #pragma acc data default(none) if(i == array[1])
3635
#pragma acc data default(none) if(i == array[1])
3736
;
3837
// CHECK: #pragma acc enter data if(i == array[1])
@@ -45,15 +44,15 @@ void foo() {
4544
#pragma acc host_data use_device(Var) if(i == array[1])
4645
;
4746

48-
// CHECK: #pragma acc data async(i)
47+
// CHECK: #pragma acc data default(none) async(i)
4948
#pragma acc data default(none) async(i)
5049
;
5150
// CHECK: #pragma acc enter data async(i)
5251
#pragma acc enter data copyin(i) async(i)
5352
// CHECK: #pragma acc exit data async
5453
#pragma acc exit data copyout(i) async
5554

56-
// CHECK: #pragma acc data wait
55+
// CHECK: #pragma acc data default(none) wait
5756
#pragma acc data default(none) wait()
5857
;
5958

@@ -63,7 +62,7 @@ void foo() {
6362
// CHECK: #pragma acc exit data wait(*iPtr, i)
6463
#pragma acc exit data copyout(Var) wait(*iPtr, i)
6564

66-
// CHECK: #pragma acc data wait(queues: *iPtr, i)
65+
// CHECK: #pragma acc data default(none) wait(queues: *iPtr, i)
6766
#pragma acc data default(none) wait(queues:*iPtr, i)
6867
;
6968

@@ -72,4 +71,12 @@ void foo() {
7271

7372
// CHECK: #pragma acc exit data wait(devnum: i : queues: *iPtr, i)
7473
#pragma acc exit data copyout(Var) wait(devnum:i:queues:*iPtr, i)
74+
75+
// CHECK: #pragma acc data default(none)
76+
#pragma acc data default(none)
77+
;
78+
79+
// CHECK: #pragma acc data default(present)
80+
#pragma acc data default(present)
81+
;
7582
}

clang/test/SemaOpenACC/combined-construct-default-ast.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
21
// RUN: %clang_cc1 %s -fopenacc -ast-dump | FileCheck %s
32

43
// Test this with PCH.

clang/test/SemaOpenACC/combined-construct-default-clause.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ void SingleOnly() {
2828
#pragma acc kernels loop default(none)
2929
for(int i = 0; i < 5; ++i);
3030

31-
// expected-warning@+1{{OpenACC clause 'default' not yet implemented}}
3231
#pragma acc data default(none)
3332
while(0);
3433

clang/test/SemaOpenACC/compute-construct-default-clause.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ void SingleOnly() {
2828
#pragma acc kernels default(none)
2929
for(int i = 0; i < 5; ++i);
3030

31-
// expected-warning@+1{{OpenACC clause 'default' not yet implemented}}
3231
#pragma acc data default(none)
3332
while(0);
3433

clang/test/SemaOpenACC/data-construct-ast.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ void NormalFunc() {
2222
#pragma acc data default(none)
2323
while (Var);
2424
// CHECK-NEXT: OpenACCDataConstruct{{.*}}data
25+
// CHECK-NEXT: default(none)
2526
// CHECK-NEXT: WhileStmt
2627
// CHECK: NullStmt
2728
#pragma acc enter data copyin(Var)
@@ -49,6 +50,7 @@ void TemplFunc() {
4950
#pragma acc data default(none)
5051
while (Var);
5152
// CHECK-NEXT: OpenACCDataConstruct{{.*}}data
53+
// CHECK-NEXT: default(none)
5254
// CHECK-NEXT: WhileStmt
5355
// CHECK: NullStmt
5456
#pragma acc enter data copyin(Var)
@@ -71,6 +73,7 @@ void TemplFunc() {
7173
// CHECK-NEXT: VarDecl
7274

7375
// CHECK-NEXT: OpenACCDataConstruct{{.*}}data
76+
// CHECK-NEXT: default(none)
7477
// CHECK-NEXT: WhileStmt
7578
// CHECK: NullStmt
7679

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
// RUN: %clang_cc1 %s -fopenacc -ast-dump | FileCheck %s
2+
3+
// Test this with PCH.
4+
// RUN: %clang_cc1 %s -fopenacc -emit-pch -o %t %s
5+
// RUN: %clang_cc1 %s -fopenacc -include-pch %t -ast-dump-all | FileCheck %s
6+
7+
#ifndef PCH_HELPER
8+
#define PCH_HELPER
9+
void NormalFunc() {
10+
// CHECK-LABEL: NormalFunc
11+
// CHECK-NEXT: CompoundStmt
12+
// CHECK-NEXT: OpenACCDataConstruct {{.*}}data
13+
// CHECK-NEXT: default(none)
14+
#pragma acc data default(none)
15+
// CHECK: OpenACCDataConstruct {{.*}}data
16+
// CHECK-NEXT: default(present)
17+
#pragma acc data default(present)
18+
;
19+
}
20+
template<typename T>
21+
void TemplFunc() {
22+
#pragma acc data default(none)
23+
for (unsigned i = 0; i < 5; ++i) {
24+
typename T::type I;
25+
}
26+
27+
#pragma acc data default(present)
28+
for (unsigned i = 0; i < 5; ++i) {
29+
typename T::type I;
30+
}
31+
32+
// CHECK-LABEL: FunctionTemplateDecl {{.*}}TemplFunc
33+
// CHECK-NEXT: TemplateTypeParmDecl
34+
35+
// Template Pattern:
36+
// CHECK-NEXT: FunctionDecl
37+
// CHECK-NEXT: CompoundStmt
38+
// CHECK-NEXT: OpenACCDataConstruct {{.*}}data
39+
// CHECK-NEXT: default(none)
40+
// CHECK: VarDecl{{.*}} I 'typename T::type'
41+
42+
// CHECK-NEXT: OpenACCDataConstruct {{.*}}data
43+
// CHECK-NEXT: default(present)
44+
// CHECK: VarDecl{{.*}} I 'typename T::type'
45+
46+
// Check instantiation.
47+
// CHECK-LABEL: FunctionDecl{{.*}} used TemplFunc 'void ()' implicit_instantiation
48+
// CHECK-NEXT: TemplateArgument type 'S'
49+
// CHECK-NEXT: RecordType
50+
// CHECK-NEXT: CXXRecord
51+
// CHECK-NEXT: CompoundStmt
52+
// CHECK-NEXT: OpenACCDataConstruct {{.*}}data
53+
// CHECK-NEXT: default(none)
54+
// CHECK: VarDecl{{.*}} I 'typename S::type':'int'
55+
// CHECK-NEXT: OpenACCDataConstruct {{.*}}data
56+
// CHECK-NEXT: default(present)
57+
// CHECK: VarDecl{{.*}} I 'typename S::type':'int'
58+
59+
}
60+
struct S {
61+
using type = int;
62+
};
63+
64+
void use() {
65+
TemplFunc<S>();
66+
}
67+
68+
#endif
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
// RUN: %clang_cc1 %s -fopenacc -verify
2+
3+
void use() {
4+
// expected-error@+1{{invalid value for 'default' clause; expected 'present' or 'none'}}
5+
#pragma acc data default(garbage)
6+
;
7+
#pragma acc data default(present)
8+
;
9+
#pragma acc data default(none)
10+
;
11+
// expected-error@+2{{OpenACC 'default' clause cannot appear more than once on a 'data' directive}}
12+
// expected-note@+1{{previous clause is here}}
13+
#pragma acc data default(none) default(present)
14+
;
15+
// expected-error@+1{{OpenACC 'default' clause is not valid on 'enter data' directive}}
16+
#pragma acc enter data default(present)
17+
;
18+
// expected-error@+1{{OpenACC 'default' clause is not valid on 'exit data' directive}}
19+
#pragma acc exit data default(none)
20+
;
21+
// expected-error@+1{{OpenACC 'default' clause is not valid on 'host_data' directive}}
22+
#pragma acc host_data default(present)
23+
;
24+
}

clang/test/SemaOpenACC/data-construct-if-ast.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ void NormalFunc(int j, float f) {
2121
// CHECK-NEXT: DeclRefExpr{{.*}} 'int' lvalue ParmVar{{.*}} 'j' 'int'
2222
// CHECK-NEXT: ImplicitCastExpr{{.*}} 'float' <LValueToRValue>
2323
// CHECK-NEXT: DeclRefExpr{{.*}} 'float' lvalue ParmVar{{.*}} 'f' 'float'
24+
// CHECK-NEXT: default(none)
2425
// CHECK-NEXT: NullStmt
2526

2627
}
@@ -39,6 +40,7 @@ void TemplFunc() {
3940
#pragma acc data default(none) if(T::SomeFloat < typename T::IntTy{})
4041
;
4142
// CHECK-NEXT: OpenACCDataConstruct{{.*}}data
43+
// CHECK-NEXT: default(none)
4244
// CHECK-NEXT: if clause
4345
// CHECK-NEXT: BinaryOperator{{.*}} '<dependent type>' '<'
4446
// CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '<dependent type>' lvalue
@@ -79,6 +81,7 @@ void TemplFunc() {
7981
// CHECK-NEXT: CompoundStmt
8082

8183
// CHECK-NEXT: OpenACCDataConstruct{{.*}}data
84+
// CHECK-NEXT: default(none)
8285
// CHECK-NEXT: if clause
8386
// CHECK-NEXT: BinaryOperator{{.*}} 'bool' '<'
8487
// CHECK-NEXT: ImplicitCastExpr{{.*}} 'float' <LValueToRValue>

clang/test/SemaOpenACC/data-construct-if-clause.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,8 @@
22

33
void Foo() {
44
int Var;
5-
// expected-warning@+1{{OpenACC clause 'default' not yet implemented}}
65
#pragma acc data default(present) if(1)
76
;
8-
// expected-warning@+3{{OpenACC clause 'default' not yet implemented}}
97
// expected-error@+2{{OpenACC 'if' clause cannot appear more than once on a 'data' directive}}
108
// expected-note@+1{{previous clause is here}}
119
#pragma acc data default(present) if(1) if (2)

clang/test/SemaOpenACC/data-construct.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@ void AtLeastOneOf() {
4545
// expected-warning@+1{{OpenACC clause 'attach' not yet implemented}}
4646
#pragma acc data attach(Var)
4747
;
48-
// expected-warning@+1{{OpenACC clause 'default' not yet implemented}}
4948
#pragma acc data default(none)
5049
;
5150

0 commit comments

Comments
 (0)