14967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// expected-no-diagnostics
24967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#ifndef HEADER
34967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#define HEADER
44967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
54967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar///==========================================================================///
64967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// 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
74967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// 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
84967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// 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
94967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// 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
104967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// 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
114967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// 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
124967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#ifdef CK1
134967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
144967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CK1: [[ST:%.+]] = type { i32, double* }
154967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainartemplate <typename T>
164967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarstruct ST {
174967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  T a;
184967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  double *b;
194967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar};
204967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
214967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarST<int> gb;
224967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainardouble gc[100];
234967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
244967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CK1: [[SIZE00:@.+]] = {{.+}}constant [1 x i[[sz:64|32]]] [i{{64|32}} 800]
254967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CK1: [[MTYPE00:@.+]] = {{.+}}constant [1 x i32] [i32 32]
264967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
274967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CK1: [[SIZE02:@.+]] = {{.+}}constant [1 x i[[sz]]] [i[[sz]] 4]
284967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CK1: [[MTYPE02:@.+]] = {{.+}}constant [1 x i32] [i32 33]
294967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
304967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CK1: [[MTYPE03:@.+]] = {{.+}}constant [1 x i32] [i32 37]
314967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
324967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CK1: [[SIZE04:@.+]] = {{.+}}constant [2 x i[[sz]]] [i[[sz]] {{8|4}}, i[[sz]] 24]
334967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CK1: [[MTYPE04:@.+]] = {{.+}}constant [2 x i32] [i32 33, i32 17]
344967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
354967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CK1-LABEL: _Z3fooi
364967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarvoid foo(int arg) {
374967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  int la;
384967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  float lb[arg];
394967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
404967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // Region 00
414967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // CK1-DAG: call void @__tgt_target_data_begin(i32 [[DEV:%[^,]+]], i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE00]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE00]]{{.+}})
424967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // CK1-DAG: [[DEV]] = load i32, i32* %{{[^,]+}},
434967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // CK1-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]]
444967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // CK1-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]]
454967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
464967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // CK1-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0
474967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // CK1-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0
484967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // CK1-DAG: store i8* bitcast ([100 x double]* @gc to i8*), i8** [[BP0]]
494967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // CK1-DAG: store i8* bitcast ([100 x double]* @gc to i8*), i8** [[P0]]
504967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
514967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // CK1: %{{.+}} = add nsw i32 %{{[^,]+}}, 1
524967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // CK1-NOT: __tgt_target_data_end
534967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  #pragma omp target enter data if(1+3-5) device(arg) map(alloc: gc)
544967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  {++arg;}
554967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
564967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // Region 01
574967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // CK1: %{{.+}} = add nsw i32 %{{[^,]+}}, 1
584967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  #pragma omp target enter data map(to: la) if(1+3-4)
594967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  {++arg;}
604967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
614967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // Region 02
624967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // CK1: br i1 %{{[^,]+}}, label %[[IFTHEN:[^,]+]], label %[[IFELSE:[^,]+]]
634967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // CK1: [[IFTHEN]]
644967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // CK1-DAG: call void @__tgt_target_data_begin(i32 4, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[SIZE02]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE02]]{{.+}})
654967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // CK1-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]]
664967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // CK1-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]]
674967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
684967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // CK1-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0
694967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // CK1-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0
704967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // CK1-DAG: store i8* [[CBPVAL0:%[^,]+]], i8** [[BP0]]
714967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // CK1-DAG: store i8* [[CPVAL0:%[^,]+]], i8** [[P0]]
724967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // CK1-DAG: [[CBPVAL0]] = bitcast i32* [[VAR0:%.+]] to i8*
734967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // CK1-DAG: [[CPVAL0]] = bitcast i32* [[VAR0]] to i8*
744967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // CK1: br label %[[IFEND:[^,]+]]
754967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
764967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // CK1: [[IFELSE]]
774967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // CK1: br label %[[IFEND]]
784967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // CK1: [[IFEND]]
794967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // CK1: %{{.+}} = add nsw i32 %{{[^,]+}}, 1
804967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // CK1-NOT: __tgt_target_data_end
814967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  #pragma omp target enter data map(to: arg) if(arg) device(4)
824967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  {++arg;}
834967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
844967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // CK1: %{{.+}} = add nsw i32 %{{[^,]+}}, 1
854967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  {++arg;}
864967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
874967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // Region 03
884967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // CK1-DAG: call void @__tgt_target_data_begin(i32 -1, i32 1, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], i[[sz]]* [[GEPS:%.+]], {{.+}}getelementptr {{.+}}[1 x i{{.+}}]* [[MTYPE03]]{{.+}})
894967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // CK1-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]]
904967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // CK1-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]]
914967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // CK1-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[S:%[^,]+]]
924967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
934967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // CK1-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0
944967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // CK1-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0
954967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // CK1-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0
964967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // CK1-DAG: store i8* [[CBPVAL0:%[^,]+]], i8** [[BP0]]
974967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // CK1-DAG: store i8* [[CPVAL0:%[^,]+]], i8** [[P0]]
984967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // CK1-DAG: store i[[sz]] [[CSVAL0:%[^,]+]], i[[sz]]* [[S0]]
994967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // CK1-DAG: [[CBPVAL0]] = bitcast float* [[VAR0:%.+]] to i8*
1004967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // CK1-DAG: [[CPVAL0]] = bitcast float* [[VAR0]] to i8*
1014967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // CK1-DAG: [[CSVAL0]] = mul nuw i[[sz]] %{{[^,]+}}, 4
1024967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // CK1: %{{.+}} = add nsw i32 %{{[^,]+}}, 1
1034967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // CK1-NOT: __tgt_target_data_end
1044967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  #pragma omp target enter data map(always, to: lb)
1054967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  {++arg;}
1064967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
1074967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // CK1: %{{.+}} = add nsw i32 %{{[^,]+}}, 1
1084967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  {++arg;}
1094967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
1104967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // Region 04
1114967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // CK1-DAG: call void @__tgt_target_data_begin(i32 -1, i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[SIZE04]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE04]]{{.+}})
1124967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // CK1-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]]
1134967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // CK1-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]]
1144967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
1154967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // CK1-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0
1164967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // CK1-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0
1174967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // CK1-DAG: store i8* bitcast ([[ST]]* @gb to i8*), i8** [[BP0]]
1184967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // CK1-DAG: store i8* bitcast (double** getelementptr inbounds ([[ST]], [[ST]]* @gb, i32 0, i32 1) to i8*), i8** [[P0]]
1194967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
1204967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
1214967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // CK1-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 1
1224967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // CK1-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 1
1234967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // CK1-DAG: store i8* bitcast (double** getelementptr inbounds ([[ST]], [[ST]]* @gb, i32 0, i32 1) to i8*), i8** [[BP1]]
1244967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // CK1-DAG: store i8* [[CPVAL1:%[^,]+]], i8** [[P1]]
1254967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // CK1-DAG: [[CPVAL1]] = bitcast double* [[SEC1:%.+]] to i8*
1264967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // CK1-DAG: [[SEC1]] = getelementptr inbounds {{.+}}double* [[SEC11:%[^,]+]], i{{.+}} 0
1274967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // CK1-DAG: [[SEC11]] = load double*, double** getelementptr inbounds ([[ST]], [[ST]]* @gb, i32 0, i32 1),
1284967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
1294967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // CK1: %{{.+}} = add nsw i32 %{{[^,]+}}, 1
1304967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // CK1-NOT: __tgt_target_data_end
1314967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  #pragma omp target enter data map(to: gb.b[:3])
1324967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  {++arg;}
1334967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar}
1344967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#endif
1354967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar///==========================================================================///
1364967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// 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
1374967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// 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
1384967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// 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
1394967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// 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
1404967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// 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
1414967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// 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
1424967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#ifdef CK2
1434967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
1444967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CK2: [[ST:%.+]] = type { i32, double* }
1454967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainartemplate <typename T>
1464967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarstruct ST {
1474967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  T a;
1484967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  double *b;
1494967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
1504967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  T foo(T arg) {
1514967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    // Region 00
1524967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    #pragma omp target enter data map(always, to: b[1:3]) if(a>123) device(arg)
1534967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    {arg++;}
1544967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    return arg;
1554967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  }
1564967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar};
1574967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
1584967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CK2: [[SIZE00:@.+]] = {{.+}}constant [2 x i[[sz:64|32]]] [i{{64|32}} {{8|4}}, i{{64|32}} 24]
1594967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CK2: [[MTYPE00:@.+]] = {{.+}}constant [2 x i32] [i32 37, i32 21]
1604967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
1614967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CK2-LABEL: _Z3bari
1624967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarint bar(int arg){
1634967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  ST<int> A;
1644967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  return A.foo(arg);
1654967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar}
1664967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
1674967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// Region 00
1684967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CK2: br i1 %{{[^,]+}}, label %[[IFTHEN:[^,]+]], label %[[IFELSE:[^,]+]]
1694967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CK2: [[IFTHEN]]
1704967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CK2-DAG: call void @__tgt_target_data_begin(i32 [[DEV:%[^,]+]], i32 2, i8** [[GEPBP:%.+]], i8** [[GEPP:%.+]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[SIZE00]], {{.+}}getelementptr {{.+}}[2 x i{{.+}}]* [[MTYPE00]]{{.+}})
1714967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CK2-DAG: [[DEV]] = load i32, i32* %{{[^,]+}},
1724967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CK2-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]]
1734967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CK2-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]]
1744967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
1754967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CK2-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0
1764967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CK2-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0
1774967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CK2-DAG: store i8* [[CBPVAL0:%[^,]+]], i8** [[BP0]]
1784967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CK2-DAG: store i8* [[CPVAL0:%[^,]+]], i8** [[P0]]
1794967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CK2-DAG: [[CBPVAL0]] = bitcast [[ST]]* [[VAR0:%.+]] to i8*
1804967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CK2-DAG: [[CPVAL0]] = bitcast double** [[SEC0:%[^,]+]] to i8*
1814967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CK2-DAG: [[SEC0]] = getelementptr inbounds {{.*}}[[ST]]* [[VAR0]], i32 0, i32 1
1824967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
1834967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
1844967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CK2-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 1
1854967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CK2-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 1
1864967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CK2-DAG: store i8* [[CBPVAL1:%[^,]+]], i8** [[BP1]]
1874967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CK2-DAG: store i8* [[CPVAL1:%[^,]+]], i8** [[P1]]
1884967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CK2-DAG: [[CBPVAL1]] = bitcast double** [[SEC0]] to i8*
1894967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CK2-DAG: [[CPVAL1]] = bitcast double* [[SEC1:%[^,]+]] to i8*
1904967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CK2-DAG: [[SEC1]] = getelementptr inbounds {{.*}}double* [[SEC11:%[^,]+]], i{{.+}} 1
1914967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CK2-DAG: [[SEC11]] = load double*, double** [[SEC111:%[^,]+]],
1924967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CK2-DAG: [[SEC111]] = getelementptr inbounds {{.*}}[[ST]]* [[VAR0]], i32 0, i32 1
1934967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
1944967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CK2: br label %[[IFEND:[^,]+]]
1954967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
1964967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CK2: [[IFELSE]]
1974967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CK2: br label %[[IFEND]]
1984967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CK2: [[IFEND]]
1994967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CK2: %{{.+}} = add nsw i32 %{{[^,]+}}, 1
2004967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CK2-NOT: __tgt_target_data_end
2014967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#endif
2024967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar///==========================================================================///
2034967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// 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
2044967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// RUN: %clang_cc1 -DCK3 -fopenmp -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -emit-pch -o %t %s
2054967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// 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
2064967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// RUN: %clang_cc1 -DCK3 -verify -x c++ -triple i386-unknown-unknown -emit-llvm %s -o - | FileCheck %s  --check-prefix CK3 --check-prefix CK3-32
2074967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// RUN: %clang_cc1 -DCK3 -fopenmp -x c++ -std=c++11 -triple i386-unknown-unknown -emit-pch -o %t %s
2084967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// 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
2094967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#ifdef CK3
2104967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
2114967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CK3-LABEL: no_target_devices
2124967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarvoid no_target_devices(int arg) {
2134967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // CK3-NOT: tgt_target_data_begin
2144967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // CK3: %{{.+}} = add nsw i32 %{{[^,]+}}, 1
2154967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // CK3-NOT: tgt_target_data_end
2164967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // CK3: ret
2174967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  #pragma omp target enter data map(to: arg) if(arg) device(4)
2184967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  {++arg;}
2194967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar}
2204967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#endif
2214967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar///==========================================================================///
2224967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// 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
2234967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// 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
2244967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// 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
2254967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// 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
2264967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// 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
2274967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// 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
2284967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
2294967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// RUN: %clang_cc1 -DCK4 -verify -fopenmp -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-llvm-bc %s -o %t-ppc-host.bc
2304967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// RUN: %clang_cc1 -DCK4 -verify -fopenmp -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-llvm %s -fopenmp-is-device -fopenmp-host-ir-file-path %t-ppc-host.bc -o - | FileCheck %s --check-prefix TCK4 --check-prefix TCK4-64
2314967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// RUN: %clang_cc1 -DCK4 -fopenmp -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-pch -fopenmp-is-device -fopenmp-host-ir-file-path %t-ppc-host.bc -o %t %s
2324967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// RUN: %clang_cc1 -fopenmp -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -std=c++11 -fopenmp-is-device -fopenmp-host-ir-file-path %t-ppc-host.bc -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s --check-prefix TCK4 --check-prefix TCK4-64
2334967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// RUN: %clang_cc1 -DCK4 -verify -fopenmp -x c++ -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-llvm-bc %s -o %t-x86-host.bc
2344967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// RUN: %clang_cc1 -DCK4 -verify -fopenmp -x c++ -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-llvm %s -fopenmp-is-device -fopenmp-host-ir-file-path %t-x86-host.bc -o - | FileCheck %s --check-prefix TCK4 --check-prefix TCK4-32
2354967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// RUN: %clang_cc1 -DCK4 -fopenmp -x c++ -std=c++11 -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-pch -fopenmp-is-device -fopenmp-host-ir-file-path %t-x86-host.bc -o %t %s
2364967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// RUN: %clang_cc1 -fopenmp -x c++ -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -std=c++11 -fopenmp-is-device -fopenmp-host-ir-file-path %t-x86-host.bc -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s --check-prefix TCK4 --check-prefix TCK4-32
2374967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#ifdef CK4
2384967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
2394967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CK4-LABEL: device_side_scan
2404967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarvoid device_side_scan(int arg) {
2414967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // CK4: tgt_target_data_begin
2424967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // CK4: %{{.+}} = add nsw i32 %{{[^,]+}}, 1
2434967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // CK4: ret
2444967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  // TCK4-NOT: tgt_target_data_begin
2454967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  #pragma omp target enter data map(to: arg) if(arg) device(4)
2464967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar  {++arg;}
2474967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar}
2484967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#endif
2494967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#endif
250