254 lines · cpp
1// RUN: %clang_cc1 -verify -fopenmp -fopenmp-version=51 -ast-print %s | FileCheck %s2// RUN: %clang_cc1 -fopenmp -fopenmp-version=51 -x c++ -std=c++11 -emit-pch -o %t %s3// RUN: %clang_cc1 -fopenmp -fopenmp-version=51 -std=c++11 -include-pch %t -verify %s -ast-print | FileCheck %s4 5// RUN: %clang_cc1 -verify -fopenmp-simd -fopenmp-version=51 -ast-print %s | FileCheck %s6// RUN: %clang_cc1 -fopenmp-simd -fopenmp-version=51 -x c++ -std=c++11 -emit-pch -o %t %s7// RUN: %clang_cc1 -fopenmp-simd -fopenmp-version=51 -std=c++11 -include-pch %t -verify %s -ast-print | FileCheck %s8// expected-no-diagnostics9 10#ifndef HEADER11#define HEADER12 13void foo() {}14 15template <class T, int N>16T tmain(T argc) {17 T b = argc, c, d, e, f, g;18 static T a;19// CHECK: static T a;20#pragma omp taskgroup21#pragma omp taskloop grainsize(strict: N)22 // CHECK-NEXT: #pragma omp taskgroup23 // CHECK-NEXT: #pragma omp taskloop grainsize(strict: N)24 for (int i = 0; i < 2; ++i)25 a = 2;26// CHECK-NEXT: for (int i = 0; i < 2; ++i)27// CHECK-NEXT: a = 2;28#pragma omp parallel29#pragma omp taskloop grainsize(strict: N)30 for (int i = 0; i < 2; ++i)31 for (int j = 0; j < 2; ++j)32 for (int j = 0; j < 2; ++j)33 for (int j = 0; j < 2; ++j)34 for (int j = 0; j < 2; ++j)35 for (int i = 0; i < 2; ++i)36 for (int j = 0; j < 2; ++j)37 for (int j = 0; j < 2; ++j)38 for (int j = 0; j < 2; ++j)39 for (int j = 0; j < 2; ++j) {40#pragma omp cancel taskgroup41#pragma omp cancellation point taskgroup42 foo();43 }44 // CHECK-NEXT: #pragma omp parallel45 // CHECK-NEXT: #pragma omp taskloop grainsize(strict: N)46 // CHECK-NEXT: for (int i = 0; i < 2; ++i)47 // CHECK-NEXT: for (int j = 0; j < 2; ++j)48 // CHECK-NEXT: for (int j = 0; j < 2; ++j)49 // CHECK-NEXT: for (int j = 0; j < 2; ++j)50 // CHECK-NEXT: for (int j = 0; j < 2; ++j)51 // CHECK-NEXT: for (int i = 0; i < 2; ++i)52 // CHECK-NEXT: for (int j = 0; j < 2; ++j)53 // CHECK-NEXT: for (int j = 0; j < 2; ++j)54 // CHECK-NEXT: for (int j = 0; j < 2; ++j)55 // CHECK-NEXT: for (int j = 0; j < 2; ++j) {56 // CHECK-NEXT: #pragma omp cancel taskgroup57 // CHECK-NEXT: #pragma omp cancellation point taskgroup58 // CHECK-NEXT: foo();59 60#pragma omp taskgroup61#pragma omp taskloop num_tasks(strict: N)62 // CHECK: #pragma omp taskgroup63 // CHECK-NEXT: #pragma omp taskloop num_tasks(strict: N)64 for (int i = 0; i < 2; ++i)65 a = 2;66// CHECK-NEXT: for (int i = 0; i < 2; ++i)67// CHECK-NEXT: a = 2;68#pragma omp parallel69#pragma omp taskloop num_tasks(strict: N)70 for (int i = 0; i < 2; ++i)71 for (int j = 0; j < 2; ++j)72 for (int j = 0; j < 2; ++j)73 for (int j = 0; j < 2; ++j)74 for (int j = 0; j < 2; ++j)75 for (int i = 0; i < 2; ++i)76 for (int j = 0; j < 2; ++j)77 for (int j = 0; j < 2; ++j)78 for (int j = 0; j < 2; ++j)79 for (int j = 0; j < 2; ++j) {80#pragma omp cancel taskgroup81#pragma omp cancellation point taskgroup82 foo();83 }84 // CHECK-NEXT: #pragma omp parallel85 // CHECK-NEXT: #pragma omp taskloop num_tasks(strict: N)86 // CHECK-NEXT: for (int i = 0; i < 2; ++i)87 // CHECK-NEXT: for (int j = 0; j < 2; ++j)88 // CHECK-NEXT: for (int j = 0; j < 2; ++j)89 // CHECK-NEXT: for (int j = 0; j < 2; ++j)90 // CHECK-NEXT: for (int j = 0; j < 2; ++j)91 // CHECK-NEXT: for (int i = 0; i < 2; ++i)92 // CHECK-NEXT: for (int j = 0; j < 2; ++j)93 // CHECK-NEXT: for (int j = 0; j < 2; ++j)94 // CHECK-NEXT: for (int j = 0; j < 2; ++j)95 // CHECK-NEXT: for (int j = 0; j < 2; ++j) {96 // CHECK-NEXT: #pragma omp cancel taskgroup97 // CHECK-NEXT: #pragma omp cancellation point taskgroup98 // CHECK-NEXT: foo();99 return T();100}101 102// CHECK-LABEL: int main(int argc, char **argv) {103int main(int argc, char **argv) {104 int b = argc, c, d, e, f, g;105 int tid = 0;106 static int a;107// CHECK: static int a;108#pragma omp taskloop grainsize(strict: argc)109 for (int i = 0; i < 10; ++i)110 foo();111 // CHECK-NEXT: #pragma omp taskloop grainsize(strict: argc)112 // CHECK-NEXT: for (int i = 0; i < 10; ++i)113 // CHECK-NEXT: foo();114 115#pragma omp parallel116#pragma omp masked taskloop grainsize(strict: argc)117 for (int i = 0; i < 10; ++i)118 foo();119 // CHECK: #pragma omp parallel120 // CHECK-NEXT: #pragma omp masked taskloop grainsize(strict: argc)121 // CHECK-NEXT: for (int i = 0; i < 10; ++i)122 // CHECK-NEXT: foo();123 124#pragma omp parallel125#pragma omp masked taskloop simd grainsize(strict: argc)126 for (int i = 0; i < 10; ++i)127 foo();128 // CHECK: #pragma omp parallel129 // CHECK-NEXT: #pragma omp masked taskloop simd grainsize(strict: argc)130 // CHECK-NEXT: for (int i = 0; i < 10; ++i)131 // CHECK-NEXT: foo();132 133#pragma omp parallel masked taskloop grainsize(strict: argc)134 for (int i = 0; i < 10; ++i)135 foo();136 // CHECK-NEXT: #pragma omp parallel masked taskloop grainsize(strict: argc)137 // CHECK-NEXT: for (int i = 0; i < 10; ++i)138 // CHECK-NEXT: foo();139 140#pragma omp parallel masked taskloop simd grainsize(strict: argc)141 for (int i = 0; i < 10; ++i)142 foo();143 // CHECK-NEXT: #pragma omp parallel masked taskloop simd grainsize(strict: argc)144 // CHECK-NEXT: for (int i = 0; i < 10; ++i)145 // CHECK-NEXT: foo();146 147#pragma omp parallel148#pragma omp master taskloop grainsize(strict: argc)149 for (int i = 0; i < 10; ++i)150 foo();151 // CHECK: #pragma omp parallel152 // CHECK-NEXT: #pragma omp master taskloop grainsize(strict: argc)153 // CHECK-NEXT: for (int i = 0; i < 10; ++i)154 // CHECK-NEXT: foo();155 156#pragma omp parallel157#pragma omp master taskloop simd grainsize(strict: argc)158 for (int i = 0; i < 10; ++i)159 foo();160 // CHECK: #pragma omp parallel161 // CHECK-NEXT: #pragma omp master taskloop simd grainsize(strict: argc)162 // CHECK-NEXT: for (int i = 0; i < 10; ++i)163 // CHECK-NEXT: foo();164 165#pragma omp parallel master taskloop grainsize(strict: argc)166 for (int i = 0; i < 10; ++i)167 foo();168 // CHECK-NEXT: #pragma omp parallel master taskloop grainsize(strict: argc)169 // CHECK-NEXT: for (int i = 0; i < 10; ++i)170 // CHECK-NEXT: foo();171 172#pragma omp parallel master taskloop simd grainsize(strict: argc)173 for (int i = 0; i < 10; ++i)174 foo();175 // CHECK-NEXT: #pragma omp parallel master taskloop simd grainsize(strict: argc)176 // CHECK-NEXT: for (int i = 0; i < 10; ++i)177 // CHECK-NEXT: foo();178 179#pragma omp taskloop num_tasks(strict: argc)180 for (int i = 0; i < 10; ++i)181 foo();182 // CHECK: #pragma omp taskloop num_tasks(strict: argc)183 // CHECK-NEXT: for (int i = 0; i < 10; ++i)184 // CHECK-NEXT: foo();185 186#pragma omp parallel187#pragma omp masked taskloop num_tasks(strict: argc)188 for (int i = 0; i < 10; ++i)189 foo();190 // CHECK: #pragma omp parallel191 // CHECK-NEXT: #pragma omp masked taskloop num_tasks(strict: argc)192 // CHECK-NEXT: for (int i = 0; i < 10; ++i)193 // CHECK-NEXT: foo();194 195#pragma omp parallel196#pragma omp masked taskloop simd num_tasks(strict: argc)197 for (int i = 0; i < 10; ++i)198 foo();199 // CHECK: #pragma omp parallel200 // CHECK-NEXT: #pragma omp masked taskloop simd num_tasks(strict: argc)201 // CHECK-NEXT: for (int i = 0; i < 10; ++i)202 // CHECK-NEXT: foo();203 204#pragma omp parallel masked taskloop num_tasks(strict: argc)205 for (int i = 0; i < 10; ++i)206 foo();207 // CHECK-NEXT: #pragma omp parallel masked taskloop num_tasks(strict: argc)208 // CHECK-NEXT: for (int i = 0; i < 10; ++i)209 // CHECK-NEXT: foo();210 211#pragma omp parallel masked taskloop simd num_tasks(strict: argc)212 for (int i = 0; i < 10; ++i)213 foo();214 // CHECK-NEXT: #pragma omp parallel masked taskloop simd num_tasks(strict: argc)215 // CHECK-NEXT: for (int i = 0; i < 10; ++i)216 // CHECK-NEXT: foo();217 218#pragma omp parallel219#pragma omp master taskloop num_tasks(strict: argc)220 for (int i = 0; i < 10; ++i)221 foo();222 // CHECK: #pragma omp parallel223 // CHECK-NEXT: #pragma omp master taskloop num_tasks(strict: argc)224 // CHECK-NEXT: for (int i = 0; i < 10; ++i)225 // CHECK-NEXT: foo();226 227#pragma omp parallel228#pragma omp master taskloop simd num_tasks(strict: argc)229 for (int i = 0; i < 10; ++i)230 foo();231 // CHECK: #pragma omp parallel232 // CHECK-NEXT: #pragma omp master taskloop simd num_tasks(strict: argc)233 // CHECK-NEXT: for (int i = 0; i < 10; ++i)234 // CHECK-NEXT: foo();235 236#pragma omp parallel master taskloop num_tasks(strict: argc)237 for (int i = 0; i < 10; ++i)238 foo();239 // CHECK-NEXT: #pragma omp parallel master taskloop num_tasks(strict: argc)240 // CHECK-NEXT: for (int i = 0; i < 10; ++i)241 // CHECK-NEXT: foo();242 243#pragma omp parallel master taskloop simd num_tasks(strict: argc)244 for (int i = 0; i < 10; ++i)245 foo();246 // CHECK-NEXT: #pragma omp parallel master taskloop simd num_tasks(strict: argc)247 // CHECK-NEXT: for (int i = 0; i < 10; ++i)248 // CHECK-NEXT: foo();249 250 return (tmain<int, 5>(argc) + tmain<char, 1>(argv[0][0]));251}252 253#endif254