315 lines · cpp
1// RUN: %clang_cc1 -fopenacc -Wno-openacc-deprecated-clause-alias -ast-print %s -o - | FileCheck %s2 3struct SomeStruct{};4 5constexpr int get_value() { return 1; }6void foo() {7// CHECK: #pragma acc loop8// CHECK-NEXT: for (int i = 0; i < 5; ++i)9// CHECK-NEXT: ;10#pragma acc loop11 for(int i = 0;i<5;++i);12 13// CHECK: #pragma acc loop device_type(default)14// CHECK-NEXT: for (int i = 0; i < 5; ++i)15// CHECK-NEXT: ;16#pragma acc loop device_type(default)17 for(int i = 0;i<5;++i);18 19// CHECK: #pragma acc loop device_type(nvidia)20// CHECK-NEXT: for (int i = 0; i < 5; ++i)21// CHECK-NEXT: ;22#pragma acc loop device_type(nvidia)23 for(int i = 0;i<5;++i);24 25// CHECK: #pragma acc loop dtype(radeon)26// CHECK-NEXT: for (int i = 0; i < 5; ++i)27// CHECK-NEXT: ;28#pragma acc loop dtype(radeon)29 for(int i = 0;i<5;++i);30 31// CHECK: #pragma acc loop dtype(host)32// CHECK-NEXT: for (int i = 0; i < 5; ++i)33// CHECK-NEXT: ;34#pragma acc loop dtype(host)35 for(int i = 0;i<5;++i);36 37// CHECK: #pragma acc loop independent38// CHECK-NEXT: for (int i = 0; i < 5; ++i)39// CHECK-NEXT: ;40#pragma acc loop independent41 for(int i = 0;i<5;++i);42// CHECK: #pragma acc loop seq43// CHECK-NEXT: for (int i = 0; i < 5; ++i)44// CHECK-NEXT: ;45#pragma acc loop seq46 for(int i = 0;i<5;++i);47// CHECK: #pragma acc loop auto48// CHECK-NEXT: for (int i = 0; i < 5; ++i)49// CHECK-NEXT: ;50#pragma acc loop auto51 for(int i = 0;i<5;++i);52 53 int i;54 float array[5];55 56// CHECK: #pragma acc loop private(i, array[1], array, array[1:2])57// CHECK-NEXT: for (int i = 0; i < 5; ++i)58// CHECK-NEXT: ;59#pragma acc loop private(i, array[1], array, array[1:2])60 for(int i = 0;i<5;++i);61 62// CHECK: #pragma acc loop collapse(1)63// CHECK-NEXT: for (int i = 0; i < 5; ++i)64// CHECK-NEXT: ;65#pragma acc loop collapse(1)66 for(int i = 0;i<5;++i);67// CHECK: #pragma acc loop collapse(force:1)68// CHECK-NEXT: for (int i = 0; i < 5; ++i)69// CHECK-NEXT: ;70#pragma acc loop collapse(force:1)71 for(int i = 0;i<5;++i);72// CHECK: #pragma acc loop collapse(2)73// CHECK-NEXT: for (int i = 0; i < 5; ++i)74// CHECK-NEXT: for (int i = 0; i < 5; ++i)75// CHECK-NEXT: ;76#pragma acc loop collapse(2)77 for(int i = 0;i<5;++i)78 for(int i = 0;i<5;++i);79// CHECK: #pragma acc loop collapse(force:2)80// CHECK-NEXT: for (int i = 0; i < 5; ++i)81// CHECK-NEXT: for (int i = 0; i < 5; ++i)82// CHECK-NEXT: ;83#pragma acc loop collapse(force:2)84 for(int i = 0;i<5;++i)85 for(int i = 0;i<5;++i);86 87// CHECK: #pragma acc loop tile(1, 3, *, get_value())88// CHECK-NEXT: for (int i = 0; i < 5; ++i)89// CHECK-NEXT: for (int i = 0; i < 5; ++i)90// CHECK-NEXT: for (int i = 0; i < 5; ++i)91// CHECK-NEXT: for (int i = 0; i < 5; ++i)92// CHECK-NEXT: ;93#pragma acc loop tile(1, 3, *, get_value())94 for(int i = 0;i<5;++i)95 for(int i = 0;i<5;++i)96 for(int i = 0;i<5;++i)97 for(int i = 0;i<5;++i);98 99// CHECK: #pragma acc loop gang(dim: 2)100// CHECK-NEXT: for (int i = 0; i < 5; ++i)101// CHECK-NEXT: ;102#pragma acc loop gang(dim:2)103 for(int i = 0;i<5;++i);104 105// CHECK: #pragma acc loop gang(static: i)106// CHECK-NEXT: for (int i = 0; i < 5; ++i)107// CHECK-NEXT: ;108#pragma acc loop gang(static:i)109 for(int i = 0;i<5;++i);110 111// CHECK: #pragma acc loop gang(static: i) gang(dim: 2)112// CHECK-NEXT: for (int i = 0; i < 5; ++i)113// CHECK-NEXT: ;114#pragma acc loop gang(static:i) gang(dim:2)115 for(int i = 0;i<5;++i);116 117// CHECK: #pragma acc parallel118// CHECK-NEXT: #pragma acc loop gang(dim: 2)119// CHECK-NEXT: for (int i = 0; i < 5; ++i)120// CHECK-NEXT: ;121#pragma acc parallel122#pragma acc loop gang(dim:2)123 for(int i = 0;i<5;++i);124 125// CHECK: #pragma acc parallel126// CHECK-NEXT: #pragma acc loop gang(static: i)127// CHECK-NEXT: for (int i = 0; i < 5; ++i)128// CHECK-NEXT: ;129#pragma acc parallel130#pragma acc loop gang(static:i)131 for(int i = 0;i<5;++i);132 133// CHECK: #pragma acc parallel134// CHECK-NEXT: #pragma acc loop gang(static: i) gang(dim: 2)135// CHECK-NEXT: for (int i = 0; i < 5; ++i)136// CHECK-NEXT: ;137#pragma acc parallel138#pragma acc loop gang(static:i) gang(dim:2)139 for(int i = 0;i<5;++i);140 141// CHECK: #pragma acc kernels142// CHECK-NEXT: #pragma acc loop gang(num: i) gang(static: i)143// CHECK-NEXT: for (int i = 0; i < 5; ++i)144// CHECK-NEXT: ;145#pragma acc kernels146#pragma acc loop gang(i) gang(static:i)147 for(int i = 0;i<5;++i);148 149// CHECK: #pragma acc kernels150// CHECK-NEXT: #pragma acc loop gang(num: i) gang(static: i)151// CHECK-NEXT: for (int i = 0; i < 5; ++i)152// CHECK-NEXT: ;153#pragma acc kernels154#pragma acc loop gang(num:i) gang(static:i)155 for(int i = 0;i<5;++i);156 157// CHECK: #pragma acc serial158// CHECK-NEXT: #pragma acc loop gang(static: i)159// CHECK-NEXT: for (int i = 0; i < 5; ++i)160// CHECK-NEXT: ;161#pragma acc serial162#pragma acc loop gang(static:i)163 for(int i = 0;i<5;++i);164 165// CHECK: #pragma acc serial166// CHECK-NEXT: #pragma acc loop gang(static: *)167// CHECK-NEXT: for (int i = 0; i < 5; ++i)168// CHECK-NEXT: ;169#pragma acc serial170#pragma acc loop gang(static:*)171 for(int i = 0;i<5;++i);172 173// CHECK: #pragma acc serial174// CHECK-NEXT: #pragma acc loop175// CHECK-NEXT: for (int i = 0; i < 5; ++i)176// CHECK-NEXT: ;177#pragma acc serial178#pragma acc loop gang179 for(int i = 0;i<5;++i);180 181// CHECK: #pragma acc loop worker182// CHECK-NEXT: for (int i = 0; i < 5; ++i)183// CHECK-NEXT: ;184#pragma acc parallel185#pragma acc loop worker186 for(int i = 0;i<5;++i);187 188// CHECK: #pragma acc parallel189// CHECK-NEXT: #pragma acc loop worker190// CHECK-NEXT: for (int i = 0; i < 5; ++i)191// CHECK-NEXT: ;192#pragma acc parallel193#pragma acc loop worker194 for(int i = 0;i<5;++i);195 196// CHECK: #pragma acc serial197// CHECK-NEXT: #pragma acc loop worker198// CHECK-NEXT: for (int i = 0; i < 5; ++i)199// CHECK-NEXT: ;200#pragma acc serial201#pragma acc loop worker202 for(int i = 0;i<5;++i);203 204// CHECK: #pragma acc kernels205// CHECK-NEXT: #pragma acc loop worker(num: 5)206// CHECK-NEXT: for (int i = 0; i < 5; ++i)207// CHECK-NEXT: ;208#pragma acc kernels209#pragma acc loop worker(5)210 for(int i = 0;i<5;++i);211 212// CHECK: #pragma acc kernels213// CHECK-NEXT: #pragma acc loop worker(num: 5)214// CHECK-NEXT: for (int i = 0; i < 5; ++i)215// CHECK-NEXT: ;216#pragma acc kernels217#pragma acc loop worker(num:5)218 for(int i = 0;i<5;++i);219 220 // CHECK: #pragma acc loop vector221// CHECK-NEXT: for (int i = 0; i < 5; ++i)222// CHECK-NEXT: ;223#pragma acc loop vector224 for(int i = 0;i<5;++i);225 226// CHECK: #pragma acc loop vector(length: 5)227// CHECK-NEXT: for (int i = 0; i < 5; ++i)228// CHECK-NEXT: ;229#pragma acc loop vector(5)230 for(int i = 0;i<5;++i);231 232// CHECK: #pragma acc loop vector(length: 5)233// CHECK-NEXT: for (int i = 0; i < 5; ++i)234// CHECK-NEXT: ;235#pragma acc loop vector(length:5)236 for(int i = 0;i<5;++i);237 238// CHECK: #pragma acc parallel239// CHECK-NEXT: #pragma acc loop vector240// CHECK-NEXT: for (int i = 0; i < 5; ++i)241// CHECK-NEXT: ;242#pragma acc parallel243#pragma acc loop vector244 for(int i = 0;i<5;++i);245 246// CHECK: #pragma acc parallel247// CHECK-NEXT: #pragma acc loop vector(length: 5)248// CHECK-NEXT: for (int i = 0; i < 5; ++i)249// CHECK-NEXT: ;250#pragma acc parallel251#pragma acc loop vector(5)252 for(int i = 0;i<5;++i);253 254// CHECK: #pragma acc parallel255// CHECK-NEXT: #pragma acc loop vector(length: 5)256// CHECK-NEXT: for (int i = 0; i < 5; ++i)257// CHECK-NEXT: ;258#pragma acc parallel259#pragma acc loop vector(length:5)260 for(int i = 0;i<5;++i);261 262// CHECK: #pragma acc kernels263// CHECK-NEXT: #pragma acc loop vector264// CHECK-NEXT: for (int i = 0; i < 5; ++i)265// CHECK-NEXT: ;266#pragma acc kernels267#pragma acc loop vector268 for(int i = 0;i<5;++i);269 270// CHECK: #pragma acc kernels271// CHECK-NEXT: #pragma acc loop vector(length: 5)272// CHECK-NEXT: for (int i = 0; i < 5; ++i)273// CHECK-NEXT: ;274#pragma acc kernels275#pragma acc loop vector(5)276 for(int i = 0;i<5;++i);277 278// CHECK: #pragma acc kernels279// CHECK-NEXT: #pragma acc loop vector(length: 5)280// CHECK-NEXT: for (int i = 0; i < 5; ++i)281// CHECK-NEXT: ;282#pragma acc kernels283#pragma acc loop vector(length:5)284 for(int i = 0;i<5;++i);285 286// CHECK: #pragma acc serial287// CHECK-NEXT: #pragma acc loop vector288// CHECK-NEXT: for (int i = 0; i < 5; ++i)289// CHECK-NEXT: ;290#pragma acc serial291#pragma acc loop vector292 for(int i = 0;i<5;++i);293 294 bool SomeB;295 296//CHECK: #pragma acc loop reduction(*: i)297#pragma acc loop reduction(*: i)298 for(int i = 0;i<5;++i);299//CHECK: #pragma acc loop reduction(max: SomeB)300#pragma acc loop reduction(max: SomeB)301 for(int i = 0;i<5;++i);302//CHECK: #pragma acc loop reduction(&: i)303#pragma acc loop reduction(&: i)304 for(int i = 0;i<5;++i);305//CHECK: #pragma acc loop reduction(|: SomeB)306#pragma acc loop reduction(|: SomeB)307 for(int i = 0;i<5;++i);308//CHECK: #pragma acc loop reduction(&&: i)309#pragma acc loop reduction(&&: i)310 for(int i = 0;i<5;++i);311//CHECK: #pragma acc loop reduction(||: SomeB)312#pragma acc loop reduction(||: SomeB)313 for(int i = 0;i<5;++i);314}315