1 // expected-no-diagnostics 2 #ifndef HEADER 3 #define HEADER 4 5 ///==========================================================================/// 6 // RUN: %clang_cc1 -DCK1 -verify -fopenmp -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | FileCheck %s --check-prefix CK1 --check-prefix CK1-64 7 // RUN: %clang_cc1 -DCK1 -fopenmp -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -emit-pch -o %t %s 8 // RUN: %clang_cc1 -fopenmp -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s --check-prefix CK1 --check-prefix CK1-64 9 // RUN: %clang_cc1 -DCK1 -verify -fopenmp -fopenmp-targets=i386-pc-linux-gnu -x c++ -triple i386-unknown-unknown -emit-llvm %s -o - | FileCheck %s --check-prefix CK1 --check-prefix CK1-32 10 // RUN: %clang_cc1 -DCK1 -fopenmp -fopenmp-targets=i386-pc-linux-gnu -x c++ -std=c++11 -triple i386-unknown-unknown -emit-pch -o %t %s 11 // RUN: %clang_cc1 -fopenmp -fopenmp-targets=i386-pc-linux-gnu -x c++ -triple i386-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s --check-prefix CK1 --check-prefix CK1-32 12 13 // RUN: %clang_cc1 -DCK1 -verify -fopenmp-simd -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | FileCheck --check-prefix SIMD-ONLY0 %s 14 // RUN: %clang_cc1 -DCK1 -fopenmp-simd -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -emit-pch -o %t %s 15 // RUN: %clang_cc1 -fopenmp-simd -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck --check-prefix SIMD-ONLY0 %s 16 // RUN: %clang_cc1 -DCK1 -verify -fopenmp-simd -fopenmp-targets=i386-pc-linux-gnu -x c++ -triple i386-unknown-unknown -emit-llvm %s -o - | FileCheck --check-prefix SIMD-ONLY0 %s 17 // RUN: %clang_cc1 -DCK1 -fopenmp-simd -fopenmp-targets=i386-pc-linux-gnu -x c++ -std=c++11 -triple i386-unknown-unknown -emit-pch -o %t %s 18 // RUN: %clang_cc1 -fopenmp-simd -fopenmp-targets=i386-pc-linux-gnu -x c++ -triple i386-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck --check-prefix SIMD-ONLY0 %s 19 // SIMD-ONLY0-NOT: {{__kmpc|__tgt}} 20 #ifdef CK1 21 22 // CK1: [[ST:%.+]] = type { i32, double* } 23 template <typename T> 24 struct ST { 25 T a; 26 double *b; 27 }; 28 29 ST<int> gb; 30 double gc[100]; 31 32 // CK1: [[SIZE00:@.+]] = {{.+}}constant [1 x i[[sz:64|32]]] [i{{64|32}} 800] 33 // CK1: [[MTYPE00:@.+]] = {{.+}}constant [1 x i64] [i64 34] 34 35 // CK1: [[SIZE02:@.+]] = {{.+}}constant [1 x i[[sz]]] [i[[sz]] 4] 36 // CK1: [[MTYPE02:@.+]] = {{.+}}constant [1 x i64] [i64 33] 37 38 // CK1: [[MTYPE03:@.+]] = {{.+}}constant [1 x i64] [i64 37] 39 40 // CK1: [[SIZE04:@.+]] = {{.+}}constant [2 x i64] [i64 sdiv exact (i64 sub (i64 ptrtoint (double** getelementptr (double*, double** getelementptr inbounds (%struct.ST, %struct.ST* @gb, i32 0, i32 1), i32 1) to i64), i64 ptrtoint (double** getelementptr inbounds (%struct.ST, %struct.ST* @gb, i32 0, i32 1) to i64)), i64 ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64)), i64 24] 41 // CK1: [[MTYPE04:@.+]] = {{.+}}constant [2 x i64] [i64 32, i64 281474976710673] 42 43 // CK1: [[MTYPE05:@.+]] = {{.+}}constant [1 x i64] [i64 1057] 44 45 // CK1: [[MTYPE06:@.+]] = {{.+}}constant [1 x i64] [i64 1061] 46 47 // CK1-LABEL: _Z3fooi 48 void foo(int arg) { 49 int la; 50 float lb[arg]; 51 52 // Region 00 53 // CK1-DAG: call void @__tgt_target_data_begin(i64 [[DEV:%[^,]+]], i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE00]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE00]]{{.+}}) 54 // CK1-DAG: [[DEV]] = sext i32 [[DEVi32:%[^,]+]] to i64 55 // CK1-DAG: [[DEVi32]] = load i32, i32* %{{[^,]+}}, 56 // CK1-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] 57 // CK1-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] 58 59 // CK1-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 60 // CK1-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 61 // CK1-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [100 x double]** 62 // CK1-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to [100 x double]** 63 // CK1-DAG: store [100 x double]* @gc, [100 x double]** [[CBP0]] 64 // CK1-DAG: store [100 x double]* @gc, [100 x double]** [[CP0]] 65 66 // CK1: %{{.+}} = add nsw i32 %{{[^,]+}}, 1 67 68 // CK1-DAG: call void @__tgt_target_data_end(i64 [[DEV:%[^,]+]], i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE00]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE00]]{{.+}}) 69 // CK1-DAG: [[DEV]] = sext i32 [[DEVi32:%[^,]+]] to i64 70 // CK1-DAG: [[DEVi32]] = load i32, i32* %{{[^,]+}}, 71 // CK1-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP]] 72 // CK1-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P]] 73 #pragma omp target data if(1+3-5) device(arg) map(from: gc) 74 {++arg;} 75 76 // Region 01 77 // CK1: %{{.+}} = add nsw i32 %{{[^,]+}}, 1 78 #pragma omp target data map(la) if(1+3-4) 79 {++arg;} 80 81 // Region 02 82 // CK1: br i1 %{{[^,]+}}, label %[[IFTHEN:[^,]+]], label %[[IFELSE:[^,]+]] 83 // CK1: [[IFTHEN]] 84 // CK1-DAG: call void @__tgt_target_data_begin(i64 4, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE02]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE02]]{{.+}}) 85 // CK1-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] 86 // CK1-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] 87 88 // CK1-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 89 // CK1-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 90 // CK1-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i32** 91 // CK1-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32** 92 // CK1-DAG: store i32* [[VAR0:%.+]], i32** [[CBP0]] 93 // CK1-DAG: store i32* [[VAR0]], i32** [[CP0]] 94 // CK1: br label %[[IFEND:[^,]+]] 95 96 // CK1: [[IFELSE]] 97 // CK1: br label %[[IFEND]] 98 // CK1: [[IFEND]] 99 // CK1: %{{.+}} = add nsw i32 %{{[^,]+}}, 1 100 // CK1: br i1 %{{[^,]+}}, label %[[IFTHEN:[^,]+]], label %[[IFELSE:[^,]+]] 101 102 // CK1: [[IFTHEN]] 103 // CK1-DAG: call void @__tgt_target_data_end(i64 4, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE02]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE02]]{{.+}}) 104 // CK1-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP]] 105 // CK1-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P]] 106 // CK1: br label %[[IFEND:[^,]+]] 107 // CK1: [[IFELSE]] 108 // CK1: br label %[[IFEND]] 109 // CK1: [[IFEND]] 110 #pragma omp target data map(to: arg) if(arg) device(4) 111 {++arg;} 112 113 // Region 03 114 // CK1-DAG: call void @__tgt_target_data_begin(i64 -1, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i64* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE03]]{{.+}}) 115 // CK1-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] 116 // CK1-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] 117 // CK1-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] 118 119 // CK1-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 120 // CK1-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 121 // CK1-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 122 // CK1-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to float** 123 // CK1-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to float** 124 // CK1-DAG: store float* [[VAR0:%.+]], float** [[CBP0]] 125 // CK1-DAG: store float* [[VAR0]], float** [[CP0]] 126 // CK1-DAG: store i[[sz]] [[CSVAL0:%[^,]+]], i[[sz]]* [[S0]] 127 // CK1-64-DAG: [[CSVAL0]] = mul nuw i64 %{{[^,]+}}, 4 128 // CK1-32-DAG: [[CSVAL0]] = sext i32 [[CSVAL032:%.+]] to i64 129 // CK1-32-DAG: [[CSVAL032]] = mul nuw i32 %{{[^,]+}}, 4 130 // CK1: %{{.+}} = add nsw i32 %{{[^,]+}}, 1 131 132 // CK1-DAG: call void @__tgt_target_data_end(i64 -1, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i[[sz]]* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE03]]{{.+}}) 133 // CK1-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP]] 134 // CK1-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P]] 135 // CK1-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S]] 136 #pragma omp target data map(always, to: lb) 137 {++arg;} 138 139 // CK1: %{{.+}} = add nsw i32 %{{[^,]+}}, 1 140 {++arg;} 141 142 // Region 04 143 // CK1-DAG: call void @__tgt_target_data_begin(i64 -1, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[SIZE04]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE04]]{{.+}}) 144 // CK1-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] 145 // CK1-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] 146 147 // CK1-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 148 // CK1-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 149 // CK1-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[ST]]** 150 // CK1-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to double*** 151 // CK1-DAG: store [[ST]]* @gb, [[ST]]** [[CBP0]] 152 // CK1-DAG: store double** getelementptr inbounds ([[ST]], [[ST]]* @gb, i32 0, i32 1), double*** [[CP0]] 153 154 // CK1-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 1 155 // CK1-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 1 156 // CK1-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to double*** 157 // CK1-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to double** 158 // CK1-DAG: store double** getelementptr inbounds ([[ST]], [[ST]]* @gb, i32 0, i32 1), double*** [[CBP1]] 159 // CK1-DAG: store double* [[SEC1:%.+]], double** [[CP1]] 160 // CK1-DAG: [[SEC1]] = getelementptr inbounds {{.+}}double* [[SEC11:%[^,]+]], i{{.+}} 0 161 // CK1-DAG: [[SEC11]] = load double*, double** getelementptr inbounds ([[ST]], [[ST]]* @gb, i32 0, i32 1), 162 163 // CK1: %{{.+}} = add nsw i32 %{{[^,]+}}, 1 164 165 // CK1-DAG: call void @__tgt_target_data_end(i64 -1, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[SIZE04]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE04]]{{.+}}) 166 // CK1-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP]] 167 // CK1-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P]] 168 #pragma omp target data map(to: gb.b[:3]) 169 {++arg;} 170 171 // CK1: %{{.+}} = add nsw i32 %{{[^,]+}}, 1 172 {++arg;} 173 174 // Region 05 175 // CK1-DAG: call void @__tgt_target_data_begin(i64 -1, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i[[sz]]* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE05]]{{.+}}) 176 // CK1-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] 177 // CK1-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] 178 // CK1-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] 179 180 // CK1-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 181 // CK1-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 182 // CK1-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 183 // CK1-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to float** 184 // CK1-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to float** 185 // CK1-DAG: store float* [[VAR0:%.+]], float** [[CBP0]] 186 // CK1-DAG: store float* [[VAR0]], float** [[CP0]] 187 // CK1-DAG: store i[[sz]] [[CSVAL0:%[^,]+]], i[[sz]]* [[S0]] 188 // CK1-64-DAG: [[CSVAL0]] = mul nuw i64 %{{[^,]+}}, 4 189 // CK1-32-DAG: [[CSVAL0]] = sext i32 [[CSVAL032:%.+]] to i64 190 // CK1-32-DAG: [[CSVAL032]] = mul nuw i32 %{{[^,]+}}, 4 191 // CK1: %{{.+}} = add nsw i32 %{{[^,]+}}, 1 192 193 // CK1-DAG: call void @__tgt_target_data_end(i64 -1, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i[[sz]]* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE05]]{{.+}}) 194 // CK1-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP]] 195 // CK1-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P]] 196 // CK1-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S]] 197 #pragma omp target data map(close, to: lb) 198 {++arg;} 199 200 // CK1: %{{.+}} = add nsw i32 %{{[^,]+}}, 1 201 {++arg;} 202 203 // Region 06 204 // CK1-DAG: call void @__tgt_target_data_begin(i64 -1, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i[[sz]]* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE06]]{{.+}}) 205 // CK1-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]] 206 // CK1-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]] 207 // CK1-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]] 208 209 // CK1-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 210 // CK1-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 211 // CK1-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 212 // CK1-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to float** 213 // CK1-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to float** 214 // CK1-DAG: store float* [[VAR0:%.+]], float** [[CBP0]] 215 // CK1-DAG: store float* [[VAR0]], float** [[CP0]] 216 // CK1-DAG: store i[[sz]] [[CSVAL0:%[^,]+]], i[[sz]]* [[S0]] 217 // CK1-64-DAG: [[CSVAL0]] = mul nuw i64 %{{[^,]+}}, 4 218 // CK1-32-DAG: [[CSVAL0]] = sext i32 [[CSVAL032:%.+]] to i64 219 // CK1-32-DAG: [[CSVAL032]] = mul nuw i32 %{{[^,]+}}, 4 220 // CK1: %{{.+}} = add nsw i32 %{{[^,]+}}, 1 221 222 // CK1-DAG: call void @__tgt_target_data_end(i64 -1, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i[[sz]]* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE06]]{{.+}}) 223 // CK1-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP]] 224 // CK1-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P]] 225 // CK1-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S]] 226 #pragma omp target data map(always close, to: lb) 227 {++arg;} 228 } 229 #endif 230 ///==========================================================================/// 231 // RUN: %clang_cc1 -DCK2 -verify -fopenmp -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | FileCheck %s --check-prefix CK2 --check-prefix CK2-64 232 // RUN: %clang_cc1 -DCK2 -fopenmp -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -emit-pch -o %t %s 233 // RUN: %clang_cc1 -fopenmp -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s --check-prefix CK2 --check-prefix CK2-64 234 // RUN: %clang_cc1 -DCK2 -verify -fopenmp -fopenmp-targets=i386-pc-linux-gnu -x c++ -triple i386-unknown-unknown -emit-llvm %s -o - | FileCheck %s --check-prefix CK2 --check-prefix CK2-32 235 // RUN: %clang_cc1 -DCK2 -fopenmp -fopenmp-targets=i386-pc-linux-gnu -x c++ -std=c++11 -triple i386-unknown-unknown -emit-pch -o %t %s 236 // RUN: %clang_cc1 -fopenmp -fopenmp-targets=i386-pc-linux-gnu -x c++ -triple i386-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s --check-prefix CK2 --check-prefix CK2-32 237 238 // RUN: %clang_cc1 -DCK2 -verify -fopenmp-simd -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | FileCheck --check-prefix SIMD-ONLY1 %s 239 // RUN: %clang_cc1 -DCK2 -fopenmp-simd -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -emit-pch -o %t %s 240 // RUN: %clang_cc1 -fopenmp-simd -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck --check-prefix SIMD-ONLY1 %s 241 // RUN: %clang_cc1 -DCK2 -verify -fopenmp-simd -fopenmp-targets=i386-pc-linux-gnu -x c++ -triple i386-unknown-unknown -emit-llvm %s -o - | FileCheck --check-prefix SIMD-ONLY1 %s 242 // RUN: %clang_cc1 -DCK2 -fopenmp-simd -fopenmp-targets=i386-pc-linux-gnu -x c++ -std=c++11 -triple i386-unknown-unknown -emit-pch -o %t %s 243 // RUN: %clang_cc1 -fopenmp-simd -fopenmp-targets=i386-pc-linux-gnu -x c++ -triple i386-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck --check-prefix SIMD-ONLY1 %s 244 // SIMD-ONLY1-NOT: {{__kmpc|__tgt}} 245 #ifdef CK2 246 247 // CK2: [[ST:%.+]] = type { i32, double* } 248 template <typename T> 249 struct ST { 250 T a; 251 double *b; 252 253 T foo(T arg) { 254 // Region 00 255 #pragma omp target data map(always, to: b[1:3]) if(a>123) device(arg) 256 {arg++;} 257 return arg; 258 } 259 }; 260 261 // CK2: [[MTYPE00:@.+]] = {{.+}}constant [2 x i64] [i64 32, i64 281474976710677] 262 263 // CK2-LABEL: _Z3bari 264 int bar(int arg){ 265 ST<int> A; 266 return A.foo(arg); 267 } 268 269 // Region 00 270 // CK2: br i1 %{{[^,]+}}, label %[[IFTHEN:[^,]+]], label %[[IFELSE:[^,]+]] 271 // CK2: [[IFTHEN]] 272 // CK2-DAG: call void @__tgt_target_data_begin(i64 [[DEV:%[^,]+]], i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i[[sz:64|32]]* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE00]]{{.+}}) 273 // CK2-DAG: [[DEV]] = sext i32 [[DEVi32:%[^,]+]] to i64 274 // CK2-DAG: [[DEVi32]] = load i32, i32* %{{[^,]+}}, 275 // CK2-DAG: [[GEPBP]] = getelementptr inbounds [2 x i8*], [2 x i8*]* [[BP:%[^,]+]] 276 // CK2-DAG: [[GEPP]] = getelementptr inbounds [2 x i8*], [2 x i8*]* [[P:%[^,]+]] 277 // CK2-DAG: [[GEPS]] = getelementptr inbounds [2 x i[[sz]]], [2 x i[[sz]]]* [[S:%[^,]+]] 278 279 // CK2-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 280 // CK2-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 281 // CK2-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 282 // CK2-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[ST]]** 283 // CK2-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to double*** 284 // CK2-DAG: store [[ST]]* [[VAR0:%.+]], [[ST]]** [[CBP0]] 285 // CK2-DAG: store double** [[SEC0:%.+]], double*** [[CP0]] 286 // CK2-DAG: store i[[sz]] {{%.+}}, i[[sz]]* [[S0]] 287 // CK2-DAG: [[SEC0]] = getelementptr inbounds {{.*}}[[ST]]* [[VAR0]], i32 0, i32 1 288 289 // CK2-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 1 290 // CK2-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 1 291 // CK2-DAG: [[S1:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 1 292 // CK2-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to double*** 293 // CK2-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to double** 294 // CK2-DAG: store double** [[SEC0]], double*** [[CBP1]] 295 // CK2-DAG: store double* [[SEC1:%.+]], double** [[CP1]] 296 // CK2-DAG: store i[[sz]] 24, i[[sz]]* [[S1]] 297 // CK2-DAG: [[SEC1]] = getelementptr inbounds {{.*}}double* [[SEC11:%[^,]+]], i{{.+}} 1 298 // CK2-DAG: [[SEC11]] = load double*, double** [[SEC111:%[^,]+]], 299 // CK2-DAG: [[SEC111]] = getelementptr inbounds {{.*}}[[ST]]* [[VAR0]], i32 0, i32 1 300 301 // CK2: br label %[[IFEND:[^,]+]] 302 303 // CK2: [[IFELSE]] 304 // CK2: br label %[[IFEND]] 305 // CK2: [[IFEND]] 306 // CK2: %{{.+}} = add nsw i32 %{{[^,]+}}, 1 307 // CK2: br i1 %{{[^,]+}}, label %[[IFTHEN:[^,]+]], label %[[IFELSE:[^,]+]] 308 309 // CK2: [[IFTHEN]] 310 // CK2-DAG: call void @__tgt_target_data_end(i64 [[DEV:%[^,]+]], i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i[[sz]]* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE00]]{{.+}}) 311 // CK2-DAG: [[DEV]] = sext i32 [[DEVi32:%[^,]+]] to i64 312 // CK2-DAG: [[DEVi32]] = load i32, i32* %{{[^,]+}}, 313 // CK2-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP]] 314 // CK2-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P]] 315 // CK2-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S]] 316 // CK2: br label %[[IFEND:[^,]+]] 317 // CK2: [[IFELSE]] 318 // CK2: br label %[[IFEND]] 319 // CK2: [[IFEND]] 320 #endif 321 ///==========================================================================/// 322 // RUN: %clang_cc1 -DCK3 -verify -fopenmp -x c++ -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | FileCheck %s --check-prefix CK3 --check-prefix CK3-64 323 // RUN: %clang_cc1 -DCK3 -fopenmp -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -emit-pch -o %t %s 324 // RUN: %clang_cc1 -fopenmp -x c++ -triple powerpc64le-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s --check-prefix CK3 --check-prefix CK3-64 325 // RUN: %clang_cc1 -DCK3 -verify -x c++ -triple i386-unknown-unknown -emit-llvm %s -o - | FileCheck %s --check-prefix CK3 --check-prefix CK3-32 326 // RUN: %clang_cc1 -DCK3 -fopenmp -x c++ -std=c++11 -triple i386-unknown-unknown -emit-pch -o %t %s 327 // RUN: %clang_cc1 -fopenmp -x c++ -triple i386-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s --check-prefix CK3 --check-prefix CK3-32 328 329 // RUN: %clang_cc1 -DCK3 -verify -fopenmp-simd -x c++ -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | FileCheck --check-prefix SIMD-ONLY2 %s 330 // RUN: %clang_cc1 -DCK3 -fopenmp-simd -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -emit-pch -o %t %s 331 // RUN: %clang_cc1 -fopenmp-simd -x c++ -triple powerpc64le-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck --check-prefix SIMD-ONLY2 %s 332 // RUN: %clang_cc1 -DCK3 -verify -x c++ -triple i386-unknown-unknown -emit-llvm %s -o - | FileCheck --check-prefix SIMD-ONLY2 %s 333 // RUN: %clang_cc1 -DCK3 -fopenmp-simd -x c++ -std=c++11 -triple i386-unknown-unknown -emit-pch -o %t %s 334 // RUN: %clang_cc1 -fopenmp-simd -x c++ -triple i386-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck --check-prefix SIMD-ONLY2 %s 335 // SIMD-ONLY2-NOT: {{__kmpc|__tgt}} 336 #ifdef CK3 337 338 // CK3-LABEL: no_target_devices 339 void no_target_devices(int arg) { 340 // CK3-NOT: tgt_target_data_begin 341 // CK3: %{{.+}} = add nsw i32 %{{[^,]+}}, 1 342 // CK3-NOT: tgt_target_data_end 343 // CK3: ret 344 #pragma omp target data map(to: arg) if(arg) device(4) 345 {++arg;} 346 } 347 #endif 348 ///==========================================================================/// 349 // RUN: %clang_cc1 -DCK4 -verify -fopenmp -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | FileCheck %s --check-prefix CK4 --check-prefix CK4-64 350 // RUN: %clang_cc1 -DCK4 -fopenmp -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -emit-pch -o %t %s 351 // RUN: %clang_cc1 -fopenmp -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s --check-prefix CK4 --check-prefix CK4-64 352 // RUN: %clang_cc1 -DCK4 -verify -fopenmp -fopenmp-targets=i386-pc-linux-gnu -x c++ -triple i386-unknown-unknown -emit-llvm %s -o - | FileCheck %s --check-prefix CK4 --check-prefix CK4-32 353 // RUN: %clang_cc1 -DCK4 -fopenmp -fopenmp-targets=i386-pc-linux-gnu -x c++ -std=c++11 -triple i386-unknown-unknown -emit-pch -o %t %s 354 // RUN: %clang_cc1 -fopenmp -fopenmp-targets=i386-pc-linux-gnu -x c++ -triple i386-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s --check-prefix CK4 --check-prefix CK4-32 355 356 // RUN: %clang_cc1 -DCK4 -verify -fopenmp-simd -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | FileCheck --check-prefix SIMD-ONLY1 %s 357 // RUN: %clang_cc1 -DCK4 -fopenmp-simd -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -emit-pch -o %t %s 358 // RUN: %clang_cc1 -fopenmp-simd -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck --check-prefix SIMD-ONLY1 %s 359 // RUN: %clang_cc1 -DCK4 -verify -fopenmp-simd -fopenmp-targets=i386-pc-linux-gnu -x c++ -triple i386-unknown-unknown -emit-llvm %s -o - | FileCheck --check-prefix SIMD-ONLY1 %s 360 // RUN: %clang_cc1 -DCK4 -fopenmp-simd -fopenmp-targets=i386-pc-linux-gnu -x c++ -std=c++11 -triple i386-unknown-unknown -emit-pch -o %t %s 361 // RUN: %clang_cc1 -fopenmp-simd -fopenmp-targets=i386-pc-linux-gnu -x c++ -triple i386-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck --check-prefix SIMD-ONLY1 %s 362 // SIMD-ONLY1-NOT: {{__kmpc|__tgt}} 363 #ifdef CK4 364 365 // CK4: [[STT:%.+]] = type { i32, double* } 366 template <typename T> 367 struct STT { 368 T a; 369 double *b; 370 371 T foo(T arg) { 372 // Region 00 373 #pragma omp target data map(always, close to: b[1:3]) if(a>123) device(arg) 374 {arg++;} 375 return arg; 376 } 377 }; 378 379 // CK4: [[MTYPE00:@.+]] = {{.+}}constant [2 x i64] [i64 32, i64 281474976711701] 380 381 // CK4-LABEL: _Z3bari 382 int bar(int arg){ 383 STT<int> A; 384 return A.foo(arg); 385 } 386 387 // Region 00 388 // CK4: br i1 %{{[^,]+}}, label %[[IFTHEN:[^,]+]], label %[[IFELSE:[^,]+]] 389 // CK4: [[IFTHEN]] 390 // CK4-DAG: call void @__tgt_target_data_begin(i64 [[DEV:%[^,]+]], i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i[[sz:64|32]]* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE00]]{{.+}}) 391 // CK4-DAG: [[DEV]] = sext i32 [[DEVi32:%[^,]+]] to i64 392 // CK4-DAG: [[DEVi32]] = load i32, i32* %{{[^,]+}}, 393 // CK4-DAG: [[GEPBP]] = getelementptr inbounds [2 x i8*], [2 x i8*]* [[BP:%[^,]+]] 394 // CK4-DAG: [[GEPP]] = getelementptr inbounds [2 x i8*], [2 x i8*]* [[P:%[^,]+]] 395 // CK4-DAG: [[GEPS]] = getelementptr inbounds [2 x i[[sz]]], [2 x i[[sz]]]* [[S:%[^,]+]] 396 397 // CK4-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0 398 // CK4-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0 399 // CK4-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0 400 // CK4-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[STT]]** 401 // CK4-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to double*** 402 // CK4-DAG: store [[STT]]* [[VAR0:%.+]], [[STT]]** [[CBP0]] 403 // CK4-DAG: store double** [[SEC0:%.+]], double*** [[CP0]] 404 // CK4-DAG: store i[[sz]] {{%.+}}, i[[sz]]* [[S0]] 405 // CK4-DAG: [[SEC0]] = getelementptr inbounds {{.*}}[[STT]]* [[VAR0]], i32 0, i32 1 406 407 // CK4-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 1 408 // CK4-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 1 409 // CK4-DAG: [[S1:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 1 410 // CK4-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to double*** 411 // CK4-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to double** 412 // CK4-DAG: store double** [[SEC0]], double*** [[CBP1]] 413 // CK4-DAG: store double* [[SEC1:%.+]], double** [[CP1]] 414 // CK4-DAG: store i[[sz]] 24, i[[sz]]* [[S1]] 415 // CK4-DAG: [[SEC1]] = getelementptr inbounds {{.*}}double* [[SEC11:%[^,]+]], i{{.+}} 1 416 // CK4-DAG: [[SEC11]] = load double*, double** [[SEC111:%[^,]+]], 417 // CK4-DAG: [[SEC111]] = getelementptr inbounds {{.*}}[[STT]]* [[VAR0]], i32 0, i32 1 418 419 // CK4: br label %[[IFEND:[^,]+]] 420 421 // CK4: [[IFELSE]] 422 // CK4: br label %[[IFEND]] 423 // CK4: [[IFEND]] 424 // CK4: %{{.+}} = add nsw i32 %{{[^,]+}}, 1 425 // CK4: br i1 %{{[^,]+}}, label %[[IFTHEN:[^,]+]], label %[[IFELSE:[^,]+]] 426 427 // CK4: [[IFTHEN]] 428 // CK4-DAG: call void @__tgt_target_data_end(i64 [[DEV:%[^,]+]], i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i[[sz]]* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE00]]{{.+}}) 429 // CK4-DAG: [[DEV]] = sext i32 [[DEVi32:%[^,]+]] to i64 430 // CK4-DAG: [[DEVi32]] = load i32, i32* %{{[^,]+}}, 431 // CK4-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP]] 432 // CK4-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P]] 433 // CK4-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S]] 434 // CK4: br label %[[IFEND:[^,]+]] 435 // CK4: [[IFELSE]] 436 // CK4: br label %[[IFEND]] 437 // CK4: [[IFEND]] 438 #endif 439 ///==========================================================================/// 440 // RUN: %clang_cc1 -DCK5 -verify -fopenmp -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | FileCheck %s --check-prefix CK5 --check-prefix CK5-64 441 // RUN: %clang_cc1 -DCK5 -fopenmp -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -emit-pch -o %t %s 442 // RUN: %clang_cc1 -fopenmp -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s --check-prefix CK5 --check-prefix CK5-64 443 // RUN: %clang_cc1 -DCK5 -verify -fopenmp -fopenmp-targets=i386-pc-linux-gnu -x c++ -triple i386-unknown-unknown -emit-llvm %s -o - | FileCheck %s --check-prefix CK5 --check-prefix CK5-32 444 // RUN: %clang_cc1 -DCK5 -fopenmp -fopenmp-targets=i386-pc-linux-gnu -x c++ -std=c++11 -triple i386-unknown-unknown -emit-pch -o %t %s 445 // RUN: %clang_cc1 -fopenmp -fopenmp-targets=i386-pc-linux-gnu -x c++ -triple i386-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s --check-prefix CK5 --check-prefix CK5-32 446 447 // RUN: %clang_cc1 -DCK5 -verify -fopenmp-simd -x c++ -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | FileCheck --check-prefix SIMD-ONLY2 %s 448 // RUN: %clang_cc1 -DCK5 -fopenmp-simd -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -emit-pch -o %t %s 449 // RUN: %clang_cc1 -fopenmp-simd -x c++ -triple powerpc64le-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck --check-prefix SIMD-ONLY2 %s 450 // RUN: %clang_cc1 -DCK5 -verify -x c++ -triple i386-unknown-unknown -emit-llvm %s -o - | FileCheck --check-prefix SIMD-ONLY2 %s 451 // RUN: %clang_cc1 -DCK5 -fopenmp-simd -x c++ -std=c++11 -triple i386-unknown-unknown -emit-pch -o %t %s 452 // RUN: %clang_cc1 -fopenmp-simd -x c++ -triple i386-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck --check-prefix SIMD-ONLY2 %s 453 // SIMD-ONLY2-NOT: {{__kmpc|__tgt}}#ifdef CK5 454 #ifdef CK5 455 struct S1 { 456 int i; 457 }; 458 struct S2 { 459 S1 s; 460 struct S2 *ps; 461 }; 462 463 void test_close_modifier(int arg) { 464 S2 *ps; 465 // CK5: private unnamed_addr constant [5 x i64] [i64 1059, i64 32, {{.*}}, i64 16, i64 1043] 466 #pragma omp target data map(close,tofrom: arg, ps->ps->ps->ps->s) 467 { 468 ++(arg); 469 } 470 } 471 #endif 472 ///==========================================================================/// 473 // RUN: %clang_cc1 -DCK6 -verify -fopenmp -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | FileCheck %s --check-prefix CK6 --check-prefix CK6-64 474 // RUN: %clang_cc1 -DCK6 -fopenmp -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -emit-pch -o %t %s 475 // RUN: %clang_cc1 -fopenmp -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s --check-prefix CK6 --check-prefix CK6-64 476 // RUN: %clang_cc1 -DCK6 -verify -fopenmp -fopenmp-targets=i386-pc-linux-gnu -x c++ -triple i386-unknown-unknown -emit-llvm %s -o - | FileCheck %s --check-prefix CK6 --check-prefix CK6-32 477 // RUN: %clang_cc1 -DCK6 -fopenmp -fopenmp-targets=i386-pc-linux-gnu -x c++ -std=c++11 -triple i386-unknown-unknown -emit-pch -o %t %s 478 // RUN: %clang_cc1 -fopenmp -fopenmp-targets=i386-pc-linux-gnu -x c++ -triple i386-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s --check-prefix CK6 --check-prefix CK6-32 479 480 // RUN: %clang_cc1 -DCK6 -verify -fopenmp-simd -x c++ -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | FileCheck --check-prefix SIMD-ONLY2 %s 481 // RUN: %clang_cc1 -DCK6 -fopenmp-simd -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -emit-pch -o %t %s 482 // RUN: %clang_cc1 -fopenmp-simd -x c++ -triple powerpc64le-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck --check-prefix SIMD-ONLY2 %s 483 // RUN: %clang_cc1 -DCK6 -verify -x c++ -triple i386-unknown-unknown -emit-llvm %s -o - | FileCheck --check-prefix SIMD-ONLY2 %s 484 // RUN: %clang_cc1 -DCK6 -fopenmp-simd -x c++ -std=c++11 -triple i386-unknown-unknown -emit-pch -o %t %s 485 // RUN: %clang_cc1 -fopenmp-simd -x c++ -triple i386-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck --check-prefix SIMD-ONLY2 %s 486 // SIMD-ONLY2-NOT: {{__kmpc|__tgt}} 487 #ifdef CK6 488 void test_close_modifier(int arg) { 489 // CK6: private unnamed_addr constant [1 x i64] [i64 1059] 490 #pragma omp target data map(close,tofrom: arg) 491 {++arg;} 492 } 493 #endif 494 #endif 495