216 lines · cpp
1// RUN: %clang_cc1 %s -fopenacc -ast-dump | FileCheck %s2 3// Test this with PCH.4// RUN: %clang_cc1 %s -fopenacc -emit-pch -o %t %s5// RUN: %clang_cc1 %s -fopenacc -include-pch %t -ast-dump-all | FileCheck %s6#ifndef PCH_HELPER7#define PCH_HELPER8void NormalUses() {9 // CHECK: FunctionDecl{{.*}}NormalUses10 // CHECK-NEXT: CompoundStmt11 12 int Val;13 14#pragma acc parallel loop gang(dim:1)15 for(int i = 0; i < 5; ++i);16 // CHECK: OpenACCCombinedConstruct{{.*}} parallel loop17 // CHECK-NEXT: gang clause dim18 // CHECK-NEXT: ConstantExpr19 // CHECK-NEXT: value: Int 120 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 121 // CHECK-NEXT: ForStmt22 // CHECK: NullStmt23 24#pragma acc parallel loop gang(static:Val)25 for(int i = 0; i < 5; ++i);26 // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} parallel loop27 // CHECK-NEXT: gang clause static28 // CHECK-NEXT: ImplicitCastExpr29 // CHECK-NEXT: DeclRefExpr{{.*}}'Val' 'int'30 // CHECK-NEXT: ForStmt31 // CHECK: NullStmt32 33#pragma acc kernels loop gang(num:1) gang(static:Val)34 for(int i = 0; i < 5; ++i);35 // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} kernels loop36 // CHECK-NEXT: gang clause num37 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 138 // CHECK-NEXT: gang clause static39 // CHECK-NEXT: ImplicitCastExpr40 // CHECK-NEXT: DeclRefExpr{{.*}}'Val' 'int'41 // CHECK-NEXT: ForStmt42 // CHECK: NullStmt43 44#pragma acc parallel loop gang(dim:1, static:Val)45 for(int i = 0; i < 5; ++i);46 // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} parallel loop47 // CHECK-NEXT: gang clause dim static48 // CHECK-NEXT: ConstantExpr49 // CHECK-NEXT: value: Int 150 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 151 // CHECK-NEXT: ImplicitCastExpr52 // CHECK-NEXT: DeclRefExpr{{.*}}'Val' 'int'53 // CHECK-NEXT: ForStmt54 // CHECK: NullStmt55 56#pragma acc serial loop gang(static:Val)57 for(int i = 0; i < 5; ++i);58 // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} serial loop59 // CHECK-NEXT: gang clause static60 // CHECK-NEXT: ImplicitCastExpr61 // CHECK-NEXT: DeclRefExpr{{.*}}'Val' 'int'62 // CHECK-NEXT: ForStmt63 // CHECK: NullStmt64 65#pragma acc serial loop gang(static:*)66 for(int i = 0; i < 5; ++i);67 // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} serial loop68 // CHECK-NEXT: gang clause static69 // CHECK-NEXT: OpenACCAsteriskSizeExpr70 // CHECK-NEXT: ForStmt71 // CHECK: NullStmt72 73#pragma acc serial loop gang74 for(int i = 0; i < 5; ++i);75 // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} serial loop76 // CHECK-NEXT: gang clause77 // CHECK-NEXT: ForStmt78 // CHECK: NullStmt79 80#pragma acc kernels loop gang(num:1)81 for(int i = 0; i < 5; ++i);82 // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} kernels loop83 // CHECK-NEXT: gang clause num84 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 185 // CHECK-NEXT: ForStmt86 // CHECK: NullStmt87}88 89template<typename T, unsigned One>90void TemplateUses(T Val) {91 // CHECK: FunctionTemplateDecl{{.*}}TemplateUses92 // CHECK-NEXT: TemplateTypeParmDecl {{.*}} referenced typename depth 0 index 0 T93 // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}} referenced 'unsigned int' depth 0 index 1 One94 // CHECK-NEXT: FunctionDecl{{.*}} TemplateUses 'void (T)'95 // CHECK-NEXT: ParmVarDecl{{.*}} referenced Val 'T'96 // CHECK-NEXT: CompoundStmt97 98#pragma acc parallel loop gang(dim:One)99 for(int i = 0; i < 5; ++i);100 // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} parallel loop101 // CHECK-NEXT: gang clause dim102 // CHECK-NEXT: DeclRefExpr{{.*}}'One' 'unsigned int'103 // CHECK-NEXT: ForStmt104 // CHECK: NullStmt105 106#pragma acc parallel loop gang(static:Val)107 for(int i = 0; i < 5; ++i);108 // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} parallel loop109 // CHECK-NEXT: gang clause static110 // CHECK-NEXT: DeclRefExpr{{.*}}'Val' 'T'111 // CHECK-NEXT: ForStmt112 // CHECK: NullStmt113 114 115#pragma acc parallel loop gang(static:*)116 for(int i = 0; i < 5; ++i);117 // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} parallel loop118 // CHECK-NEXT: gang clause static119 // CHECK-NEXT: OpenACCAsteriskSizeExpr120 // CHECK-NEXT: ForStmt121 // CHECK: NullStmt122 123#pragma acc parallel loop gang(dim:One) gang(static:Val)124 for(int i = 0; i < 5; ++i);125 // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} parallel loop126 // CHECK-NEXT: gang clause dim127 // CHECK-NEXT: DeclRefExpr{{.*}}'One' 'unsigned int'128 // CHECK-NEXT: gang clause static129 // CHECK-NEXT: DeclRefExpr{{.*}}'Val' 'T'130 // CHECK-NEXT: ForStmt131 // CHECK: NullStmt132 133#pragma acc parallel loop gang(dim:One, static:Val)134 for(int i = 0; i < 5; ++i);135 // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} parallel loop136 // CHECK-NEXT: gang clause dim static137 // CHECK-NEXT: DeclRefExpr{{.*}}'One' 'unsigned int'138 // CHECK-NEXT: DeclRefExpr{{.*}}'Val' 'T'139 // CHECK-NEXT: ForStmt140 // CHECK: NullStmt141 142#pragma acc serial loop gang143 for(int i = 0; i < 5; ++i);144 // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} serial loop145 // CHECK-NEXT: gang clause146 // CHECK-NEXT: ForStmt147 // CHECK: NullStmt148 149 // Instantiation:150 // CHECK-NEXT: FunctionDecl{{.*}} used TemplateUses 'void (int)' implicit_instantiation151 // CHECK-NEXT: TemplateArgument type 'int'152 // CHECK-NEXT: BuiltinType{{.*}} 'int'153 // CHECK-NEXT: TemplateArgument integral '1U'154 // CHECK-NEXT: ParmVarDecl{{.*}} used Val 'int'155 // CHECK-NEXT: CompoundStmt156 157 // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} parallel loop158 // CHECK-NEXT: gang clause dim159 // CHECK-NEXT: ConstantExpr160 // CHECK-NEXT: value: Int 1161 // CHECK-NEXT: SubstNonTypeTemplateParmExpr162 // CHECK-NEXT: NonTypeTemplateParmDecl163 // CHECK-NEXT: IntegerLiteral{{.*}}'unsigned int' 1164 // CHECK-NEXT: ForStmt165 // CHECK: NullStmt166 167 // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} parallel loop168 // CHECK-NEXT: gang clause static169 // CHECK-NEXT: ImplicitCastExpr170 // CHECK-NEXT: DeclRefExpr{{.*}}'Val' 'int'171 // CHECK-NEXT: ForStmt172 // CHECK: NullStmt173 174 // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} parallel loop175 // CHECK-NEXT: gang clause static176 // CHECK-NEXT: OpenACCAsteriskSizeExpr177 // CHECK-NEXT: ForStmt178 // CHECK: NullStmt179 180 // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} parallel loop181 // CHECK-NEXT: gang clause dim182 // CHECK-NEXT: ConstantExpr183 // CHECK-NEXT: value: Int 1184 // CHECK-NEXT: SubstNonTypeTemplateParmExpr185 // CHECK-NEXT: NonTypeTemplateParmDecl186 // CHECK-NEXT: IntegerLiteral{{.*}}'unsigned int' 1187 // CHECK-NEXT: gang clause static188 // CHECK-NEXT: ImplicitCastExpr189 // CHECK-NEXT: DeclRefExpr{{.*}}'Val' 'int'190 // CHECK-NEXT: ForStmt191 // CHECK: NullStmt192 193 // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} parallel loop194 // CHECK-NEXT: gang clause dim static195 // CHECK-NEXT: ConstantExpr196 // CHECK-NEXT: value: Int 1197 // CHECK-NEXT: SubstNonTypeTemplateParmExpr198 // CHECK-NEXT: NonTypeTemplateParmDecl199 // CHECK-NEXT: IntegerLiteral{{.*}}'unsigned int' 1200 // CHECK-NEXT: ImplicitCastExpr201 // CHECK-NEXT: DeclRefExpr{{.*}}'Val' 'int'202 // CHECK-NEXT: ForStmt203 // CHECK: NullStmt204 205 // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} serial loop206 // CHECK-NEXT: gang clause207 // CHECK-NEXT: ForStmt208 // CHECK: NullStmt209}210 211void inst() {212 TemplateUses<int, 1>(5);213}214 215#endif // PCH_HELPER216