xref: /llvm-project/clang/test/SemaOpenACC/compute-construct-device_type-ast.cpp (revision 8ef2011b2cd3a8fc2ef8d6ea0facb1a39a0dd621)
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