1 // RUN: %clang_cc1 -no-opaque-pointers -fopenmp -fopenmp-version=50 -x c++ -triple x86_64-unknown-unknown -emit-llvm -fexceptions -fcxx-exceptions -o - %s | FileCheck %s 2 3 // RUN: %clang_cc1 -no-opaque-pointers -fopenmp-simd -fopenmp-version=50 -x c++ -triple x86_64-unknown-unknown -emit-llvm -fexceptions -fcxx-exceptions -o - %s | FileCheck --check-prefix SIMD-ONLY0 %s 4 // SIMD-ONLY0-NOT: {{__kmpc|__tgt}} 5 6 int main() { 7 // CHECK: @__kmpc_for_static_init 8 // CHECK-NOT: !llvm.access.group 9 // CHECK: @__kmpc_for_static_fini 10 #pragma omp for 11 for(int i = 0; i < 10; ++i); 12 // CHECK: @__kmpc_for_static_init 13 // CHECK: !llvm.access.group 14 // CHECK: @__kmpc_for_static_fini 15 #pragma omp for simd 16 for(int i = 0; i < 10; ++i); 17 // CHECK: @__kmpc_for_static_init 18 // CHECK-NOT: !llvm.access.group 19 // CHECK: @__kmpc_for_static_fini 20 #pragma omp for schedule(static) 21 for(int i = 0; i < 10; ++i); 22 // CHECK: @__kmpc_for_static_init 23 // CHECK: !llvm.access.group 24 // CHECK: @__kmpc_for_static_fini 25 #pragma omp for simd schedule(static) 26 for(int i = 0; i < 10; ++i); 27 // CHECK: @__kmpc_for_static_init 28 // CHECK-NOT: !llvm.access.group 29 // CHECK: @__kmpc_for_static_fini 30 #pragma omp for schedule(static, 2) 31 for(int i = 0; i < 10; ++i); 32 // CHECK: @__kmpc_for_static_init 33 // CHECK: !llvm.access.group 34 // CHECK: @__kmpc_for_static_fini 35 #pragma omp for simd schedule(static, 2) 36 for(int i = 0; i < 10; ++i); 37 // CHECK: @__kmpc_dispatch_init 38 // CHECK: !llvm.access.group 39 #pragma omp for schedule(auto) 40 for(int i = 0; i < 10; ++i); 41 // CHECK: @__kmpc_dispatch_init 42 // CHECK: !llvm.access.group 43 #pragma omp for simd schedule(auto) 44 for(int i = 0; i < 10; ++i); 45 // CHECK: @__kmpc_dispatch_init 46 // CHECK: !llvm.access.group 47 #pragma omp for schedule(runtime) 48 for(int i = 0; i < 10; ++i); 49 // CHECK: @__kmpc_dispatch_init 50 // CHECK: !llvm.access.group 51 #pragma omp for simd schedule(runtime) 52 for(int i = 0; i < 10; ++i); 53 // CHECK: @__kmpc_dispatch_init 54 // CHECK: !llvm.access.group 55 #pragma omp for schedule(guided) 56 for(int i = 0; i < 10; ++i); 57 // CHECK: @__kmpc_dispatch_init 58 // CHECK: !llvm.access.group 59 #pragma omp for simd schedule(guided) 60 for(int i = 0; i < 10; ++i); 61 // CHECK: @__kmpc_dispatch_init 62 // CHECK: !llvm.access.group 63 #pragma omp for schedule(dynamic) 64 for(int i = 0; i < 10; ++i); 65 // CHECK: @__kmpc_dispatch_init 66 // CHECK: !llvm.access.group 67 #pragma omp for simd schedule(dynamic) 68 for(int i = 0; i < 10; ++i); 69 // CHECK: @__kmpc_for_static_init 70 // CHECK-NOT: !llvm.access.group 71 // CHECK: @__kmpc_for_static_fini 72 #pragma omp for schedule(monotonic: static) 73 for(int i = 0; i < 10; ++i); 74 // CHECK: @__kmpc_for_static_init 75 // CHECK: !llvm.access.group 76 // CHECK: @__kmpc_for_static_fini 77 #pragma omp for simd schedule(monotonic: static) 78 for(int i = 0; i < 10; ++i); 79 // CHECK: @__kmpc_for_static_init 80 // CHECK-NOT: !llvm.access.group 81 // CHECK: @__kmpc_for_static_fini 82 #pragma omp for schedule(monotonic: static, 2) 83 for(int i = 0; i < 10; ++i); 84 // CHECK: @__kmpc_for_static_init 85 // CHECK: !llvm.access.group 86 // CHECK: @__kmpc_for_static_fini 87 #pragma omp for simd schedule(monotonic: static, 2) 88 for(int i = 0; i < 10; ++i); 89 // CHECK: @__kmpc_dispatch_init 90 // CHECK-NOT: !llvm.access.group 91 #pragma omp for schedule(monotonic: auto) 92 for(int i = 0; i < 10; ++i); 93 // CHECK: @__kmpc_dispatch_init 94 // CHECK: !llvm.access.group 95 #pragma omp for simd schedule(monotonic: auto) 96 for(int i = 0; i < 10; ++i); 97 // CHECK: @__kmpc_dispatch_init 98 // CHECK-NOT: !llvm.access.group 99 #pragma omp for schedule(monotonic: runtime) 100 for(int i = 0; i < 10; ++i); 101 // CHECK: @__kmpc_dispatch_init 102 // CHECK: !llvm.access.group 103 #pragma omp for simd schedule(monotonic: runtime) 104 for(int i = 0; i < 10; ++i); 105 // CHECK: @__kmpc_dispatch_init 106 // CHECK-NOT: !llvm.access.group 107 #pragma omp for schedule(monotonic: guided) 108 for(int i = 0; i < 10; ++i); 109 // CHECK: @__kmpc_dispatch_init 110 // CHECK: !llvm.access.group 111 #pragma omp for simd schedule(monotonic: guided) 112 for(int i = 0; i < 10; ++i); 113 // CHECK: @__kmpc_dispatch_init 114 // CHECK-NOT: !llvm.access.group 115 #pragma omp for schedule(monotonic: dynamic) 116 for(int i = 0; i < 10; ++i); 117 // CHECK: @__kmpc_dispatch_init 118 // CHECK: !llvm.access.group 119 #pragma omp for simd schedule(monotonic: dynamic) 120 for(int i = 0; i < 10; ++i); 121 // CHECK: @__kmpc_dispatch_init 122 // CHECK: !llvm.access.group 123 #pragma omp for schedule(nonmonotonic: guided) 124 for(int i = 0; i < 10; ++i); 125 // CHECK: @__kmpc_dispatch_init 126 // CHECK: !llvm.access.group 127 #pragma omp for simd schedule(nonmonotonic: guided) 128 for(int i = 0; i < 10; ++i); 129 // CHECK: @__kmpc_dispatch_init 130 // CHECK: !llvm.access.group 131 #pragma omp for schedule(nonmonotonic: dynamic) 132 for(int i = 0; i < 10; ++i); 133 // CHECK: @__kmpc_dispatch_init 134 // CHECK: !llvm.access.group 135 #pragma omp for simd schedule(nonmonotonic: dynamic) 136 for(int i = 0; i < 10; ++i); 137 // CHECK: call void @__kmpc_for_static_init_4(%struct.ident_t* {{.+}}, i32 %{{.+}}, i32 1073741858, 138 // CHECK: !llvm.access.group 139 #pragma omp for simd schedule(nonmonotonic: static) 140 for(int i = 0; i < 10; ++i); 141 // CHECK: call void @__kmpc_dispatch_init_4(%struct.ident_t* {{.+}}, i32 %{{.+}}, i32 1073741862, 142 // CHECK: !llvm.access.group 143 #pragma omp for schedule(nonmonotonic: auto) 144 for(int i = 0; i < 10; ++i); 145 // CHECK: call void @__kmpc_dispatch_init_4(%struct.ident_t* {{.+}}, i32 %{{.+}}, i32 1073741861, 146 // CHECK: !llvm.access.group 147 #pragma omp for simd schedule(nonmonotonic: runtime) 148 for(int i = 0; i < 10; ++i); 149 // CHECK: @__kmpc_dispatch_init 150 // CHECK-NOT: !llvm.access.group 151 // CHECK: @__kmpc_dispatch_next 152 #pragma omp for schedule(static) ordered 153 for(int i = 0; i < 10; ++i); 154 // CHECK: @__kmpc_dispatch_init 155 // CHECK-NOT: !llvm.access.group 156 // CHECK: @__kmpc_dispatch_next 157 #pragma omp for simd schedule(static) ordered 158 for(int i = 0; i < 10; ++i); 159 // CHECK: @__kmpc_dispatch_init 160 // CHECK-NOT: !llvm.access.group 161 // CHECK: @__kmpc_dispatch_next 162 #pragma omp for schedule(static, 2) ordered(1) 163 for(int i = 0; i < 10; ++i); 164 // CHECK: @__kmpc_dispatch_init 165 // CHECK-NOT: !llvm.access.group 166 // CHECK: @__kmpc_dispatch_next 167 #pragma omp for simd schedule(static, 2) ordered 168 for(int i = 0; i < 10; ++i); 169 // CHECK: @__kmpc_dispatch_init 170 // CHECK-NOT: !llvm.access.group 171 // CHECK: @__kmpc_dispatch_next 172 #pragma omp for schedule(auto) ordered(1) 173 for(int i = 0; i < 10; ++i); 174 // CHECK: @__kmpc_dispatch_init 175 // CHECK-NOT: !llvm.access.group 176 #pragma omp for simd schedule(auto) ordered 177 for(int i = 0; i < 10; ++i); 178 // CHECK: @__kmpc_dispatch_init 179 // CHECK-NOT: !llvm.access.group 180 // CHECK: @__kmpc_dispatch_next 181 #pragma omp for schedule(runtime) ordered 182 for(int i = 0; i < 10; ++i); 183 // CHECK: @__kmpc_dispatch_init 184 // CHECK-NOT: !llvm.access.group 185 // CHECK: @__kmpc_dispatch_next 186 #pragma omp for simd schedule(runtime) ordered 187 for(int i = 0; i < 10; ++i); 188 // CHECK: @__kmpc_dispatch_init 189 // CHECK-NOT: !llvm.access.group 190 // CHECK: @__kmpc_dispatch_next 191 #pragma omp for schedule(guided) ordered(1) 192 for(int i = 0; i < 10; ++i); 193 // CHECK: @__kmpc_dispatch_init 194 // CHECK-NOT: !llvm.access.group 195 // CHECK: @__kmpc_dispatch_next 196 #pragma omp for simd schedule(guided) ordered 197 for(int i = 0; i < 10; ++i); 198 // CHECK: @__kmpc_dispatch_init 199 // CHECK-NOT: !llvm.access.group 200 // CHECK: @__kmpc_dispatch_next 201 #pragma omp for schedule(dynamic) ordered(1) 202 for(int i = 0; i < 10; ++i); 203 // CHECK: @__kmpc_dispatch_init 204 // CHECK-NOT: !llvm.access.group 205 // CHECK: @__kmpc_dispatch_next 206 #pragma omp for simd schedule(dynamic) 207 for(int i = 0; i < 10; ++i); 208 return 0; 209 } 210