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 #ifndef PCH_HELPER
7 #define PCH_HELPER
8
9 struct SomeS{};
NormalUses()10 void NormalUses() {
11 // CHECK: FunctionDecl{{.*}}NormalUses
12 // CHECK-NEXT: CompoundStmt
13
14 SomeS SomeImpl;
15 // CHECK-NEXT: DeclStmt
16 // CHECK-NEXT: VarDecl{{.*}} SomeImpl 'SomeS'
17 // CHECK-NEXT: CXXConstructExpr
18 bool SomeVar;
19 // CHECK-NEXT: DeclStmt
20 // CHECK-NEXT: VarDecl{{.*}} SomeVar 'bool'
21
22 #pragma acc parallel device_type(SomeS) dtype(SomeImpl)
23 while(true){}
24 // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel
25 // CHECK-NEXT: device_type(SomeS)
26 // CHECK-NEXT: dtype(SomeImpl)
27 // CHECK-NEXT: WhileStmt
28 // CHECK-NEXT: CXXBoolLiteralExpr
29 // CHECK-NEXT: CompoundStmt
30 #pragma acc parallel device_type(SomeVar) dtype(int)
31 while(true){}
32 // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel
33 // CHECK-NEXT: device_type(SomeVar)
34 // CHECK-NEXT: dtype(int)
35 // CHECK-NEXT: WhileStmt
36 // CHECK-NEXT: CXXBoolLiteralExpr
37 // CHECK-NEXT: CompoundStmt
38 #pragma acc parallel device_type(private) dtype(struct)
39 while(true){}
40 // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel
41 // CHECK-NEXT: device_type(private)
42 // CHECK-NEXT: dtype(struct)
43 // CHECK-NEXT: WhileStmt
44 // CHECK-NEXT: CXXBoolLiteralExpr
45 // CHECK-NEXT: CompoundStmt
46 #pragma acc parallel device_type(private) dtype(class)
47 while(true){}
48 // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel
49 // CHECK-NEXT: device_type(private)
50 // CHECK-NEXT: dtype(class)
51 // CHECK-NEXT: WhileStmt
52 // CHECK-NEXT: CXXBoolLiteralExpr
53 // CHECK-NEXT: CompoundStmt
54 #pragma acc parallel device_type(float) dtype(*)
55 while(true){}
56 // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel
57 // CHECK-NEXT: device_type(float)
58 // CHECK-NEXT: dtype(*)
59 // CHECK-NEXT: WhileStmt
60 // CHECK-NEXT: CXXBoolLiteralExpr
61 // CHECK-NEXT: CompoundStmt
62 #pragma acc parallel device_type(float, int) dtype(*)
63 while(true){}
64 // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel
65 // CHECK-NEXT: device_type(float, int)
66 // CHECK-NEXT: dtype(*)
67 // CHECK-NEXT: WhileStmt
68 // CHECK-NEXT: CXXBoolLiteralExpr
69 // CHECK-NEXT: CompoundStmt
70 }
71
72 template<typename T>
TemplUses()73 void TemplUses() {
74 // CHECK-NEXT: FunctionTemplateDecl{{.*}}TemplUses
75 // CHECK-NEXT: TemplateTypeParmDecl{{.*}}T
76 // CHECK-NEXT: FunctionDecl{{.*}}TemplUses
77 // CHECK-NEXT: CompoundStmt
78 #pragma acc parallel device_type(T) dtype(T)
79 while(true){}
80 // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel
81 // CHECK-NEXT: device_type(T)
82 // CHECK-NEXT: dtype(T)
83 // CHECK-NEXT: WhileStmt
84 // CHECK-NEXT: CXXBoolLiteralExpr
85 // CHECK-NEXT: CompoundStmt
86
87
88 // Instantiations
89 // CHECK-NEXT: FunctionDecl{{.*}} TemplUses 'void ()' implicit_instantiation
90 // CHECK-NEXT: TemplateArgument type 'int'
91 // CHECK-NEXT: BuiltinType{{.*}} 'int'
92 // CHECK-NEXT: CompoundStmt
93
94 // CHECK-NEXT: OpenACCComputeConstruct{{.*}}parallel
95 // CHECK-NEXT: device_type(T)
96 // CHECK-NEXT: dtype(T)
97 // CHECK-NEXT: WhileStmt
98 // CHECK-NEXT: CXXBoolLiteralExpr
99 // CHECK-NEXT: CompoundStmt
100 }
101
Inst()102 void Inst() {
103 TemplUses<int>();
104 }
105 #endif // PCH_HELPER
106