182f2c61cScchen // expected-no-diagnostics
282f2c61cScchen #ifndef HEADER
382f2c61cScchen #define HEADER
482f2c61cScchen
582f2c61cScchen ///==========================================================================///
6532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -DCK1 -verify -fopenmp -fopenmp-version=51 -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | FileCheck -allow-deprecated-dag-overlap %s --check-prefix CK1 --check-prefix CK1-64
7532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -DCK1 -fopenmp -fopenmp-version=51 -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -emit-pch -o %t %s
8532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -fopenmp -fopenmp-version=51 -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck -allow-deprecated-dag-overlap %s --check-prefix CK1 --check-prefix CK1-64
9532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -DCK1 -verify -fopenmp -fopenmp-version=51 -fopenmp-targets=i386-pc-linux-gnu -x c++ -triple i386-unknown-unknown -emit-llvm %s -o - | FileCheck -allow-deprecated-dag-overlap %s --check-prefix CK1 --check-prefix CK1-32
10532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -DCK1 -fopenmp -fopenmp-version=51 -fopenmp-targets=i386-pc-linux-gnu -x c++ -std=c++11 -triple i386-unknown-unknown -emit-pch -o %t %s
11532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -fopenmp -fopenmp-version=51 -fopenmp-targets=i386-pc-linux-gnu -x c++ -triple i386-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck -allow-deprecated-dag-overlap %s --check-prefix CK1 --check-prefix CK1-32
1282f2c61cScchen
13532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -DCK1 -verify -fopenmp-simd -fopenmp-version=51 -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | FileCheck -allow-deprecated-dag-overlap --check-prefix SIMD-ONLY6 %s
14532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -DCK1 -fopenmp-simd -fopenmp-version=51 -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -emit-pch -o %t %s
15532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -fopenmp-simd -fopenmp-version=51 -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck -allow-deprecated-dag-overlap --check-prefix SIMD-ONLY6 %s
16532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -DCK1 -verify -fopenmp-simd -fopenmp-version=51 -fopenmp-targets=i386-pc-linux-gnu -x c++ -triple i386-unknown-unknown -emit-llvm %s -o - | FileCheck -allow-deprecated-dag-overlap --check-prefix SIMD-ONLY6 %s
17532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -DCK1 -fopenmp-simd -fopenmp-version=51 -fopenmp-targets=i386-pc-linux-gnu -x c++ -std=c++11 -triple i386-unknown-unknown -emit-pch -o %t %s
18532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -fopenmp-simd -fopenmp-version=51 -fopenmp-targets=i386-pc-linux-gnu -x c++ -triple i386-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck -allow-deprecated-dag-overlap --check-prefix SIMD-ONLY6 %s
1982f2c61cScchen // SIMD-ONLY6-NOT: {{__kmpc|__tgt}}
2082f2c61cScchen #ifdef CK1
2182f2c61cScchen
2282f2c61cScchen // CK1-LABEL: @.__omp_offloading_{{.*}}implicit_present_scalar{{.*}}_l{{[0-9]+}}.region_id = weak constant i8 0
2382f2c61cScchen
2482f2c61cScchen // CK1-DAG: [[SIZES:@.+]] = {{.+}}constant [1 x i64] [i64 4]
2582f2c61cScchen // Map types: OMP_MAP_TARGET_PARAM | OMP_MAP_IMPLICIT | OMP_MAP_PRESENT = 4640
2682f2c61cScchen // CK1-DAG: [[TYPES:@.+]] = {{.+}}constant [1 x i64] [i64 4640]
2782f2c61cScchen
2882f2c61cScchen // CK1-LABEL: implicit_present_scalar{{.*}}(
implicit_present_scalar(int a)2982f2c61cScchen void implicit_present_scalar(int a) {
30*1fff1166SJoseph Huber // CK1-DAG: call i32 @__tgt_target_kernel(%struct.ident_t* @{{.+}}, i64 -1, i32 -1, i32 0, i8* @.{{.+}}.region_id, %struct.__tgt_kernel_arguments* [[ARGS:%.+]])
31*1fff1166SJoseph Huber // CK1-DAG: [[BPARG:%.+]] = getelementptr inbounds {{.+}}[[ARGS]], i32 0, i32 2
32*1fff1166SJoseph Huber // CK1-DAG: store i8** [[BPGEP:%.+]], i8*** [[BPARG]]
33*1fff1166SJoseph Huber // CK1-DAG: [[PARG:%.+]] = getelementptr inbounds {{.+}}[[ARGS]], i32 0, i32 3
34*1fff1166SJoseph Huber // CK1-DAG: store i8** [[PGEP:%.+]], i8*** [[PARG]]
3582f2c61cScchen // CK1-DAG: [[BPGEP]] = getelementptr inbounds {{.+}}[[BPS:%[^,]+]], i32 0, i32 0
3682f2c61cScchen // CK1-DAG: [[PGEP]] = getelementptr inbounds {{.+}}[[PS:%[^,]+]], i32 0, i32 0
3782f2c61cScchen // CK1-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BPS]], i32 0, i32 0
3882f2c61cScchen // CK1-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[PS]], i32 0, i32 0
3982f2c61cScchen // CK1-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to i32**
4082f2c61cScchen // CK1-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to i32**
4182f2c61cScchen // CK1-DAG: store i32* [[DECL:%[^,]+]], i32** [[CBP1]]
4282f2c61cScchen // CK1-DAG: store i32* [[DECL]], i32** [[CP1]]
43*1fff1166SJoseph Huber #pragma omp target defaultmap(present \
44*1fff1166SJoseph Huber : scalar)
4582f2c61cScchen {
4682f2c61cScchen a += 1.0;
4782f2c61cScchen }
4882f2c61cScchen }
4982f2c61cScchen
5082f2c61cScchen
5182f2c61cScchen #endif
5282f2c61cScchen ///==========================================================================///
53532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -DCK2 -verify -fopenmp -fopenmp-version=51 -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | FileCheck -allow-deprecated-dag-overlap %s --check-prefix CK2 --check-prefix CK2-64
54532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -DCK2 -fopenmp -fopenmp-version=51 -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -emit-pch -o %t %s
55532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -fopenmp -fopenmp-version=51 -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck -allow-deprecated-dag-overlap %s --check-prefix CK2 --check-prefix CK2-64
56532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -DCK2 -verify -fopenmp -fopenmp-version=51 -fopenmp-targets=i386-pc-linux-gnu -x c++ -triple i386-unknown-unknown -emit-llvm %s -o - | FileCheck -allow-deprecated-dag-overlap %s --check-prefix CK2 --check-prefix CK2-32
57532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -DCK2 -fopenmp -fopenmp-version=51 -fopenmp-targets=i386-pc-linux-gnu -x c++ -std=c++11 -triple i386-unknown-unknown -emit-pch -o %t %s
58532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -fopenmp -fopenmp-version=51 -fopenmp-targets=i386-pc-linux-gnu -x c++ -triple i386-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck -allow-deprecated-dag-overlap %s --check-prefix CK2 --check-prefix CK2-32
5982f2c61cScchen
60532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -DCK2 -verify -fopenmp-simd -fopenmp-version=51 -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | FileCheck -allow-deprecated-dag-overlap --check-prefix SIMD-ONLY6 %s
61532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -DCK2 -fopenmp-simd -fopenmp-version=51 -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -emit-pch -o %t %s
62532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -fopenmp-simd -fopenmp-version=51 -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck -allow-deprecated-dag-overlap --check-prefix SIMD-ONLY6 %s
63532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -DCK2 -verify -fopenmp-simd -fopenmp-version=51 -fopenmp-targets=i386-pc-linux-gnu -x c++ -triple i386-unknown-unknown -emit-llvm %s -o - | FileCheck -allow-deprecated-dag-overlap --check-prefix SIMD-ONLY6 %s
64532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -DCK2 -fopenmp-simd -fopenmp-version=51 -fopenmp-targets=i386-pc-linux-gnu -x c++ -std=c++11 -triple i386-unknown-unknown -emit-pch -o %t %s
65532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -fopenmp-simd -fopenmp-version=51 -fopenmp-targets=i386-pc-linux-gnu -x c++ -triple i386-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck -allow-deprecated-dag-overlap --check-prefix SIMD-ONLY6 %s
6682f2c61cScchen // SIMD-ONLY6-NOT: {{__kmpc|__tgt}}
6782f2c61cScchen #ifdef CK2
6882f2c61cScchen
6982f2c61cScchen // CK2-LABEL: @.__omp_offloading_{{.*}}implicit_present_aggregate{{.*}}_l{{[0-9]+}}.region_id = weak constant i8 0
7082f2c61cScchen
7182f2c61cScchen // CK2-DAG: [[SIZES:@.+]] = {{.+}}constant [1 x i64] [i64 16]
7282f2c61cScchen // Map types: OMP_MAP_TARGET_PARAM | OMP_MAP_IMPLICIT | OMP_MAP_PRESENT = 4640
7382f2c61cScchen // CK2-DAG: [[TYPES:@.+]] = {{.+}}constant [1 x i64] [i64 4640]
7482f2c61cScchen
7582f2c61cScchen // CK2-LABEL: implicit_present_aggregate{{.*}}(
implicit_present_aggregate(int a)7682f2c61cScchen void implicit_present_aggregate(int a) {
7782f2c61cScchen double darr[2] = {(double)a, (double)a};
7882f2c61cScchen
79*1fff1166SJoseph Huber // CK2-DAG: call i32 @__tgt_target_kernel(%struct.ident_t* @{{.+}}, i64 -1, i32 -1, i32 0, i8* @.{{.+}}.region_id, %struct.__tgt_kernel_arguments* [[ARGS:%.+]])
80*1fff1166SJoseph Huber // CK2-DAG: [[BPARG:%.+]] = getelementptr inbounds {{.+}}[[ARGS]], i32 0, i32 2
81*1fff1166SJoseph Huber // CK2-DAG: store i8** [[BPGEP:%.+]], i8*** [[BPARG]]
82*1fff1166SJoseph Huber // CK2-DAG: [[PARG:%.+]] = getelementptr inbounds {{.+}}[[ARGS]], i32 0, i32 3
83*1fff1166SJoseph Huber // CK2-DAG: store i8** [[PGEP:%.+]], i8*** [[PARG]]
8482f2c61cScchen // CK2-DAG: [[BPGEP]] = getelementptr inbounds {{.+}}[[BPS:%[^,]+]], i32 0, i32 0
8582f2c61cScchen // CK2-DAG: [[PGEP]] = getelementptr inbounds {{.+}}[[PS:%[^,]+]], i32 0, i32 0
8682f2c61cScchen // CK2-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BPS]], i32 0, i32 0
8782f2c61cScchen // CK2-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[PS]], i32 0, i32 0
8882f2c61cScchen // CK2-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to [2 x double]**
8982f2c61cScchen // CK2-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to [2 x double]**
9082f2c61cScchen // CK2-DAG: store [2 x double]* [[DECL:%[^,]+]], [2 x double]** [[CBP1]]
9182f2c61cScchen // CK2-DAG: store [2 x double]* [[DECL]], [2 x double]** [[CP1]]
9282f2c61cScchen
9382f2c61cScchen // CK2: call void [[KERNEL:@.+]]([2 x double]* [[DECL]])
94*1fff1166SJoseph Huber #pragma omp target defaultmap(present \
95*1fff1166SJoseph Huber : aggregate)
9682f2c61cScchen {
9782f2c61cScchen darr[0] += 1.0;
9882f2c61cScchen darr[1] += 1.0;
9982f2c61cScchen }
10082f2c61cScchen }
10182f2c61cScchen
10282f2c61cScchen
10382f2c61cScchen #endif
10482f2c61cScchen ///==========================================================================///
105532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -DCK3 -verify -fopenmp -fopenmp-version=51 -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | FileCheck -allow-deprecated-dag-overlap %s --check-prefix CK3
106532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -DCK3 -fopenmp -fopenmp-version=51 -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -emit-pch -o %t %s
107532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -fopenmp -fopenmp-version=51 -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck -allow-deprecated-dag-overlap %s --check-prefix CK3
108532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -DCK3 -verify -fopenmp -fopenmp-version=51 -fopenmp-targets=i386-pc-linux-gnu -x c++ -triple i386-unknown-unknown -emit-llvm %s -o - | FileCheck -allow-deprecated-dag-overlap %s --check-prefix CK3
109532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -DCK3 -fopenmp -fopenmp-version=51 -fopenmp-targets=i386-pc-linux-gnu -x c++ -std=c++11 -triple i386-unknown-unknown -emit-pch -o %t %s
110532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -fopenmp -fopenmp-version=51 -fopenmp-targets=i386-pc-linux-gnu -x c++ -triple i386-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck -allow-deprecated-dag-overlap %s --check-prefix CK3
11182f2c61cScchen
112532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -DCK3 -verify -fopenmp-simd -fopenmp-version=51 -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | FileCheck -allow-deprecated-dag-overlap --check-prefix SIMD-ONLY8 %s
113532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -DCK3 -fopenmp-simd -fopenmp-version=51 -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -emit-pch -o %t %s
114532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -fopenmp-simd -fopenmp-version=51 -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck -allow-deprecated-dag-overlap --check-prefix SIMD-ONLY8 %s
115532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -DCK3 -verify -fopenmp-simd -fopenmp-version=51 -fopenmp-targets=i386-pc-linux-gnu -x c++ -triple i386-unknown-unknown -emit-llvm %s -o - | FileCheck -allow-deprecated-dag-overlap --check-prefix SIMD-ONLY8 %s
116532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -DCK3 -fopenmp-simd -fopenmp-version=51 -fopenmp-targets=i386-pc-linux-gnu -x c++ -std=c++11 -triple i386-unknown-unknown -emit-pch -o %t %s
117532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -fopenmp-simd -fopenmp-version=51 -fopenmp-targets=i386-pc-linux-gnu -x c++ -triple i386-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck -allow-deprecated-dag-overlap --check-prefix SIMD-ONLY8 %s
11882f2c61cScchen // SIMD-ONLY8-NOT: {{__kmpc|__tgt}}
11982f2c61cScchen #ifdef CK3
12082f2c61cScchen
12182f2c61cScchen
12282f2c61cScchen // CK3-LABEL: @.__omp_offloading_{{.*}}explicit_present_pointer{{.*}}_l{{[0-9]+}}.region_id = weak constant i8 0
12382f2c61cScchen
12482f2c61cScchen // CK3: [[SIZE:@.+]] = private {{.*}}constant [1 x i64] [i64 {{8|4}}]
12582f2c61cScchen // Map types: OMP_MAP_TARGET_PARAM | OMP_MAP_IMPLICIT | OMP_MAP_PRESENT = 4640
12682f2c61cScchen // CK3: [[MTYPE:@.+]] = private {{.*}}constant [1 x i64] [i64 4640]
12782f2c61cScchen
12882f2c61cScchen // CK3-LABEL: explicit_present_pointer{{.*}}(
explicit_present_pointer()12982f2c61cScchen void explicit_present_pointer() {
13082f2c61cScchen int *pa;
13182f2c61cScchen
132*1fff1166SJoseph Huber // CK3-DAG: call i32 @__tgt_target_kernel(%struct.ident_t* @{{.+}}, i64 -1, i32 -1, i32 0, i8* @.{{.+}}.region_id, %struct.__tgt_kernel_arguments* [[ARGS:%.+]])
133*1fff1166SJoseph Huber // CK3-DAG: [[BPARG:%.+]] = getelementptr inbounds {{.+}}[[ARGS]], i32 0, i32 2
134*1fff1166SJoseph Huber // CK3-DAG: store i8** [[BPGEP:%.+]], i8*** [[BPARG]]
135*1fff1166SJoseph Huber // CK3-DAG: [[PARG:%.+]] = getelementptr inbounds {{.+}}[[ARGS]], i32 0, i32 3
136*1fff1166SJoseph Huber // CK3-DAG: store i8** [[PGEP:%.+]], i8*** [[PARG]]
137*1fff1166SJoseph Huber // CK3-DAG: [[BPGEP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]]
138*1fff1166SJoseph Huber // CK3-DAG: [[PGEP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]]
13982f2c61cScchen
14082f2c61cScchen // CK3-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0
14182f2c61cScchen // CK3-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0
14282f2c61cScchen // CK3-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to i32***
14382f2c61cScchen // CK3-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32***
14482f2c61cScchen // CK3-DAG: store i32** [[VAR0:%.+]], i32*** [[CBP0]]
14582f2c61cScchen // CK3-DAG: store i32** [[VAR0]], i32*** [[CP0]]
14682f2c61cScchen
14782f2c61cScchen #pragma omp target defaultmap(present: pointer)
14882f2c61cScchen {
14982f2c61cScchen pa[50]++;
15082f2c61cScchen }
15182f2c61cScchen }
15282f2c61cScchen
15382f2c61cScchen #endif
15482f2c61cScchen #ifdef CK4
15582f2c61cScchen
15682f2c61cScchen ///==========================================================================///
157532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -DCK4 -verify -fopenmp -fopenmp-version=51 -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | FileCheck -allow-deprecated-dag-overlap %s --check-prefix CK4
158532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -DCK4 -fopenmp -fopenmp-version=51 -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -emit-pch -o %t %s
159532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -fopenmp -fopenmp-version=51 -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck -allow-deprecated-dag-overlap %s --check-prefix CK4
160532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -DCK4 -verify -fopenmp -fopenmp-version=51 -fopenmp-targets=i386-pc-linux-gnu -x c++ -triple i386-unknown-unknown -emit-llvm %s -o - | FileCheck -allow-deprecated-dag-overlap %s --check-prefix CK4
161532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -DCK4 -fopenmp -fopenmp-version=51 -fopenmp-targets=i386-pc-linux-gnu -x c++ -std=c++11 -triple i386-unknown-unknown -emit-pch -o %t %s
162532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -fopenmp -fopenmp-version=51 -fopenmp-targets=i386-pc-linux-gnu -x c++ -triple i386-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck -allow-deprecated-dag-overlap %s --check-prefix CK4
16382f2c61cScchen
164532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -DCK4 -verify -fopenmp-simd -fopenmp-version=51 -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | FileCheck -allow-deprecated-dag-overlap --check-prefix SIMD-ONLY10 %s
165532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -DCK4 -fopenmp-simd -fopenmp-version=51 -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -emit-pch -o %t %s
166532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -fopenmp-simd -fopenmp-version=51 -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck -allow-deprecated-dag-overlap --check-prefix SIMD-ONLY10 %s
167532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -DCK4 -verify -fopenmp-simd -fopenmp-version=51 -fopenmp-targets=i386-pc-linux-gnu -x c++ -triple i386-unknown-unknown -emit-llvm %s -o - | FileCheck -allow-deprecated-dag-overlap --check-prefix SIMD-ONLY10 %s
168532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -DCK4 -fopenmp-simd -fopenmp-version=51 -fopenmp-targets=i386-pc-linux-gnu -x c++ -std=c++11 -triple i386-unknown-unknown -emit-pch -o %t %s
169532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -fopenmp-simd -fopenmp-version=51 -fopenmp-targets=i386-pc-linux-gnu -x c++ -triple i386-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck -allow-deprecated-dag-overlap --check-prefix SIMD-ONLY10 %s
17082f2c61cScchen // SIMD-ONLY10-NOT: {{__kmpc|__tgt}}
17182f2c61cScchen
17282f2c61cScchen // CK4-LABEL: @.__omp_offloading_{{.*}}implicit_present_double_complex{{.*}}.region_id = weak constant i8 0
17382f2c61cScchen
17482f2c61cScchen // CK4-DAG: [[SIZES:@.+]] = {{.+}}constant [1 x i64] [i64 16]
17582f2c61cScchen // Map types: OMP_MAP_TARGET_PARAM | OMP_MAP_IMPLICIT | OMP_MAP_PRESENT = 4640
17682f2c61cScchen // CK4-DAG: [[TYPES:@.+]] = {{.+}}constant [1 x i64] [i64 4640]
17782f2c61cScchen
17882f2c61cScchen // CK4-LABEL: implicit_present_double_complex{{.*}}(
implicit_present_double_complex(int a)17982f2c61cScchen void implicit_present_double_complex (int a){
18082f2c61cScchen double _Complex dc = (double)a;
18182f2c61cScchen
182*1fff1166SJoseph Huber // CK4-DAG: call i32 @__tgt_target_kernel(%struct.ident_t* @{{.+}}, i64 -1, i32 -1, i32 0, i8* @.{{.+}}.region_id, %struct.__tgt_kernel_arguments* [[ARGS:%.+]])
183*1fff1166SJoseph Huber // CK4-DAG: [[BPARG:%.+]] = getelementptr inbounds {{.+}}[[ARGS]], i32 0, i32 2
184*1fff1166SJoseph Huber // CK4-DAG: store i8** [[BPGEP:%.+]], i8*** [[BPARG]]
185*1fff1166SJoseph Huber // CK4-DAG: [[PARG:%.+]] = getelementptr inbounds {{.+}}[[ARGS]], i32 0, i32 3
186*1fff1166SJoseph Huber // CK4-DAG: store i8** [[PGEP:%.+]], i8*** [[PARG]]
18782f2c61cScchen // CK4-DAG: [[BPGEP]] = getelementptr inbounds {{.+}}[[BPS:%[^,]+]], i32 0, i32 0
18882f2c61cScchen // CK4-DAG: [[PGEP]] = getelementptr inbounds {{.+}}[[PS:%[^,]+]], i32 0, i32 0
18982f2c61cScchen // CK4-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BPS]], i32 0, i32 0
19082f2c61cScchen // CK4-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[PS]], i32 0, i32 0
19182f2c61cScchen // CK4-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to { double, double }**
19282f2c61cScchen // CK4-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to { double, double }**
19382f2c61cScchen // CK4-DAG: store { double, double }* [[PTR:%[^,]+]], { double, double }** [[CBP1]]
19482f2c61cScchen // CK4-DAG: store { double, double }* [[PTR]], { double, double }** [[CP1]]
19582f2c61cScchen
19682f2c61cScchen // CK4: call void [[KERNEL:@.+]]({ double, double }* [[PTR]])
197*1fff1166SJoseph Huber #pragma omp target defaultmap(present \
198*1fff1166SJoseph Huber : scalar)
19982f2c61cScchen {
20082f2c61cScchen dc *= dc;
20182f2c61cScchen }
20282f2c61cScchen }
20382f2c61cScchen
20482f2c61cScchen // CK4: define internal void [[KERNEL]]({ double, double }* {{.*}}[[ARG:%.+]])
20582f2c61cScchen // CK4: [[ADDR:%.+]] = alloca { double, double }*,
20682f2c61cScchen // CK4: store { double, double }* [[ARG]], { double, double }** [[ADDR]],
20782f2c61cScchen // CK4: [[REF:%.+]] = load { double, double }*, { double, double }** [[ADDR]],
20882f2c61cScchen // CK4: {{.+}} = getelementptr inbounds { double, double }, { double, double }* [[REF]], i32 0, i32 0
20982f2c61cScchen #endif
21082f2c61cScchen #endif
211