1d04d9220SAlexey Bataev // NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --check-globals --replace-value-regex "__omp_offloading_[0-9a-z]+_[0-9a-z]+" --prefix-filecheck-ir-name _ --global-value-regex ".offload_maptypes.*" ".offload_sizes.*" --global-hex-value-regex ".offload_maptypes.*"
283ddfa0dSJoel E. Denny // expected-no-diagnostics
383ddfa0dSJoel E. Denny #ifndef HEADER
483ddfa0dSJoel E. Denny #define HEADER
583ddfa0dSJoel E. Denny
683ddfa0dSJoel E. Denny //--------------------------------------------------
783ddfa0dSJoel E. Denny // With -DUSE.
883ddfa0dSJoel E. Denny //--------------------------------------------------
983ddfa0dSJoel E. Denny
1083ddfa0dSJoel E. Denny // powerpc64le-ibm-linux-gnu
1183ddfa0dSJoel E. Denny
12532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -DUSE -verify -fopenmp -fopenmp-extensions \
1383ddfa0dSJoel E. Denny // RUN: -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ \
1483ddfa0dSJoel E. Denny // RUN: -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | \
1583ddfa0dSJoel E. Denny // RUN: FileCheck %s --check-prefixes=CHECK-USE-PPC64LE
16532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -DUSE -fopenmp -fopenmp-extensions \
1783ddfa0dSJoel E. Denny // RUN: -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -std=c++11 \
1883ddfa0dSJoel E. Denny // RUN: -triple powerpc64le-unknown-unknown -emit-pch -o %t %s
19532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -DUSE -fopenmp -fopenmp-extensions \
2083ddfa0dSJoel E. Denny // RUN: -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ \
2183ddfa0dSJoel E. Denny // RUN: -triple powerpc64le-unknown-unknown -std=c++11 -include-pch %t \
2283ddfa0dSJoel E. Denny // RUN: -verify %s -emit-llvm -o - | \
2383ddfa0dSJoel E. Denny // RUN: FileCheck %s --check-prefixes=CHECK-USE-PPC64LE
2483ddfa0dSJoel E. Denny
2583ddfa0dSJoel E. Denny // i386-pc-linux-gnu
2683ddfa0dSJoel E. Denny
27532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -DUSE -verify -fopenmp -fopenmp-extensions \
2883ddfa0dSJoel E. Denny // RUN: -fopenmp-targets=i386-pc-linux-gnu -x c++ \
2983ddfa0dSJoel E. Denny // RUN: -triple i386-unknown-unknown -emit-llvm %s -o - | \
3083ddfa0dSJoel E. Denny // RUN: FileCheck %s --check-prefixes=CHECK-USE-I386
31532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -DUSE -fopenmp -fopenmp-extensions \
3283ddfa0dSJoel E. Denny // RUN: -fopenmp-targets=i386-pc-linux-gnu -x c++ -std=c++11 \
3383ddfa0dSJoel E. Denny // RUN: -triple i386-unknown-unknown -emit-pch -o %t %s
34532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -DUSE -fopenmp -fopenmp-extensions \
3583ddfa0dSJoel E. Denny // RUN: -fopenmp-targets=i386-pc-linux-gnu -x c++ \
3683ddfa0dSJoel E. Denny // RUN: -triple i386-unknown-unknown -std=c++11 -include-pch %t -verify %s \
3783ddfa0dSJoel E. Denny // RUN: -emit-llvm -o - | \
3883ddfa0dSJoel E. Denny // RUN: FileCheck %s --check-prefixes=CHECK-USE-I386
3983ddfa0dSJoel E. Denny
4083ddfa0dSJoel E. Denny //--------------------------------------------------
4183ddfa0dSJoel E. Denny // Without -DUSE.
4283ddfa0dSJoel E. Denny //--------------------------------------------------
4383ddfa0dSJoel E. Denny
4483ddfa0dSJoel E. Denny // powerpc64le-ibm-linux-gnu
4583ddfa0dSJoel E. Denny
46532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -verify -fopenmp -fopenmp-extensions \
4783ddfa0dSJoel E. Denny // RUN: -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ \
4883ddfa0dSJoel E. Denny // RUN: -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | \
4983ddfa0dSJoel E. Denny // RUN: FileCheck %s --check-prefixes=CHECK-NOUSE-PPC64LE
50532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -fopenmp -fopenmp-extensions \
5183ddfa0dSJoel E. Denny // RUN: -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -std=c++11 \
5283ddfa0dSJoel E. Denny // RUN: -triple powerpc64le-unknown-unknown -emit-pch -o %t %s
53532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -fopenmp -fopenmp-extensions \
5483ddfa0dSJoel E. Denny // RUN: -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ \
5583ddfa0dSJoel E. Denny // RUN: -triple powerpc64le-unknown-unknown -std=c++11 -include-pch %t \
5683ddfa0dSJoel E. Denny // RUN: -verify %s -emit-llvm -o - | \
5783ddfa0dSJoel E. Denny // RUN: FileCheck %s --check-prefixes=CHECK-NOUSE-PPC64LE
5883ddfa0dSJoel E. Denny
5983ddfa0dSJoel E. Denny // i386-pc-linux-gnu
6083ddfa0dSJoel E. Denny
61532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -verify -fopenmp -fopenmp-extensions \
6283ddfa0dSJoel E. Denny // RUN: -fopenmp-targets=i386-pc-linux-gnu -x c++ \
6383ddfa0dSJoel E. Denny // RUN: -triple i386-unknown-unknown -emit-llvm %s -o - | \
6483ddfa0dSJoel E. Denny // RUN: FileCheck %s --check-prefixes=CHECK-NOUSE-I386
65532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -fopenmp -fopenmp-extensions \
6683ddfa0dSJoel E. Denny // RUN: -fopenmp-targets=i386-pc-linux-gnu -x c++ -std=c++11 \
6783ddfa0dSJoel E. Denny // RUN: -triple i386-unknown-unknown -emit-pch -o %t %s
68532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -fopenmp -fopenmp-extensions \
6983ddfa0dSJoel E. Denny // RUN: -fopenmp-targets=i386-pc-linux-gnu -x c++ \
7083ddfa0dSJoel E. Denny // RUN: -triple i386-unknown-unknown -std=c++11 -include-pch %t -verify %s \
7183ddfa0dSJoel E. Denny // RUN: -emit-llvm -o - | \
7283ddfa0dSJoel E. Denny // RUN: FileCheck %s --check-prefixes=CHECK-NOUSE-I386
7383ddfa0dSJoel E. Denny
7483ddfa0dSJoel E. Denny // Map flags used in @.offload_maptypes* below:
7583ddfa0dSJoel E. Denny //
7683ddfa0dSJoel E. Denny // TO = 0x1
7783ddfa0dSJoel E. Denny // FROM = 0x2
7883ddfa0dSJoel E. Denny // ALWAYS = 0x4
7983ddfa0dSJoel E. Denny // TARGET_PARAM = 0x20
8083ddfa0dSJoel E. Denny // CLOSE = 0x400
8183ddfa0dSJoel E. Denny // OMPX_HOLD = 0x2000
8283ddfa0dSJoel E. Denny // MEMBER_OF_1 = 0x1000000000000
8383ddfa0dSJoel E. Denny // MEMBER_OF_5 = 0x5000000000000
8483ddfa0dSJoel E. Denny
8583ddfa0dSJoel E. Denny //.
86d04d9220SAlexey Bataev // CHECK-USE-PPC64LE: @.offload_sizes = private unnamed_addr constant [7 x i64] [i64 0, i64 4, i64 4, i64 4, i64 0, i64 4, i64 4]
8783ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE: @.offload_maptypes = private unnamed_addr constant [7 x i64] [i64 [[#0x2020]], i64 [[#0x1000000002003]], i64 [[#0x1000000002003]], i64 [[#0x2023]], i64 [[#0x2020]], i64 [[#0x5000000002003]], i64 [[#0x5000000002003]]]
88d04d9220SAlexey Bataev // CHECK-USE-PPC64LE: @.offload_sizes.1 = private unnamed_addr constant [1 x i64] [i64 4]
89d04d9220SAlexey Bataev // CHECK-USE-PPC64LE: @.offload_maptypes.2 = private unnamed_addr constant [1 x i64] [i64 [[#0x2427]]]
90d04d9220SAlexey Bataev // CHECK-USE-PPC64LE: @.offload_sizes.3 = private unnamed_addr constant [3 x i64] [i64 0, i64 4, i64 4]
91d04d9220SAlexey Bataev // CHECK-USE-PPC64LE: @.offload_maptypes.4 = private unnamed_addr constant [3 x i64] [i64 [[#0x2020]], i64 [[#0x1000000002003]], i64 [[#0x1000000002003]]]
9283ddfa0dSJoel E. Denny //.
93d04d9220SAlexey Bataev // CHECK-USE-I386: @.offload_sizes = private unnamed_addr constant [7 x i64] [i64 0, i64 4, i64 4, i64 4, i64 0, i64 4, i64 4]
9483ddfa0dSJoel E. Denny // CHECK-USE-I386: @.offload_maptypes = private unnamed_addr constant [7 x i64] [i64 [[#0x2020]], i64 [[#0x1000000002003]], i64 [[#0x1000000002003]], i64 [[#0x2023]], i64 [[#0x2020]], i64 [[#0x5000000002003]], i64 [[#0x5000000002003]]]
95d04d9220SAlexey Bataev // CHECK-USE-I386: @.offload_sizes.1 = private unnamed_addr constant [1 x i64] [i64 4]
96d04d9220SAlexey Bataev // CHECK-USE-I386: @.offload_maptypes.2 = private unnamed_addr constant [1 x i64] [i64 [[#0x2427]]]
97d04d9220SAlexey Bataev // CHECK-USE-I386: @.offload_sizes.3 = private unnamed_addr constant [3 x i64] [i64 0, i64 4, i64 4]
98d04d9220SAlexey Bataev // CHECK-USE-I386: @.offload_maptypes.4 = private unnamed_addr constant [3 x i64] [i64 [[#0x2020]], i64 [[#0x1000000002003]], i64 [[#0x1000000002003]]]
9983ddfa0dSJoel E. Denny //.
100d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE: @.offload_sizes = private unnamed_addr constant [7 x i64] [i64 0, i64 4, i64 4, i64 4, i64 0, i64 4, i64 4]
10183ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE: @.offload_maptypes = private unnamed_addr constant [7 x i64] [i64 [[#0x2000]], i64 [[#0x1000000002003]], i64 [[#0x1000000002003]], i64 [[#0x2003]], i64 [[#0x2000]], i64 [[#0x5000000002003]], i64 [[#0x5000000002003]]]
102d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE: @.offload_sizes.1 = private unnamed_addr constant [1 x i64] [i64 4]
103d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE: @.offload_maptypes.2 = private unnamed_addr constant [1 x i64] [i64 [[#0x2407]]]
104d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE: @.offload_sizes.3 = private unnamed_addr constant [3 x i64] [i64 0, i64 4, i64 4]
105d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE: @.offload_maptypes.4 = private unnamed_addr constant [3 x i64] [i64 [[#0x2000]], i64 [[#0x1000000002003]], i64 [[#0x1000000002003]]]
10683ddfa0dSJoel E. Denny //.
107d04d9220SAlexey Bataev // CHECK-NOUSE-I386: @.offload_sizes = private unnamed_addr constant [7 x i64] [i64 0, i64 4, i64 4, i64 4, i64 0, i64 4, i64 4]
10883ddfa0dSJoel E. Denny // CHECK-NOUSE-I386: @.offload_maptypes = private unnamed_addr constant [7 x i64] [i64 [[#0x2000]], i64 [[#0x1000000002003]], i64 [[#0x1000000002003]], i64 [[#0x2003]], i64 [[#0x2000]], i64 [[#0x5000000002003]], i64 [[#0x5000000002003]]]
109d04d9220SAlexey Bataev // CHECK-NOUSE-I386: @.offload_sizes.1 = private unnamed_addr constant [1 x i64] [i64 4]
110d04d9220SAlexey Bataev // CHECK-NOUSE-I386: @.offload_maptypes.2 = private unnamed_addr constant [1 x i64] [i64 [[#0x2407]]]
111d04d9220SAlexey Bataev // CHECK-NOUSE-I386: @.offload_sizes.3 = private unnamed_addr constant [3 x i64] [i64 0, i64 4, i64 4]
112d04d9220SAlexey Bataev // CHECK-NOUSE-I386: @.offload_maptypes.4 = private unnamed_addr constant [3 x i64] [i64 [[#0x2000]], i64 [[#0x1000000002003]], i64 [[#0x1000000002003]]]
11383ddfa0dSJoel E. Denny //.
11483ddfa0dSJoel E. Denny struct ST {
11583ddfa0dSJoel E. Denny int i;
11683ddfa0dSJoel E. Denny int j;
11783ddfa0dSJoel E. Denny void test_present_members();
11883ddfa0dSJoel E. Denny };
11983ddfa0dSJoel E. Denny
12083ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-LABEL: @_Z20explicit_maps_singlei(
12183ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: entry:
12283ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[II_ADDR:%.*]] = alloca i32, align 4
12383ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[A:%.*]] = alloca i32, align 4
12483ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[ST1:%.*]] = alloca [[STRUCT_ST:%.*]], align 4
12583ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[ST2:%.*]] = alloca [[STRUCT_ST]], align 4
12683ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [7 x i8*], align 8
12783ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [7 x i8*], align 8
12883ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [7 x i8*], align 8
129ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [7 x i64], align 8
13083ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[DOTOFFLOAD_BASEPTRS3:%.*]] = alloca [1 x i8*], align 8
13183ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[DOTOFFLOAD_PTRS4:%.*]] = alloca [1 x i8*], align 8
13283ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[DOTOFFLOAD_MAPPERS5:%.*]] = alloca [1 x i8*], align 8
13383ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: store i32 [[II:%.*]], i32* [[II_ADDR]], align 4
13483ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP0:%.*]] = load i32, i32* [[II_ADDR]], align 4
13583ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: store i32 [[TMP0]], i32* [[A]], align 4
13683ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[I:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST1]], i32 0, i32 0
13783ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[J:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST1]], i32 0, i32 1
13883ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP1:%.*]] = getelementptr i32, i32* [[J]], i32 1
13983ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP2:%.*]] = bitcast i32* [[I]] to i8*
14083ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP3:%.*]] = bitcast i32* [[TMP1]] to i8*
14183ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP4:%.*]] = ptrtoint i8* [[TMP3]] to i64
14283ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP5:%.*]] = ptrtoint i8* [[TMP2]] to i64
14383ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP6:%.*]] = sub i64 [[TMP4]], [[TMP5]]
14483ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP7:%.*]] = sdiv exact i64 [[TMP6]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64)
14583ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[I1:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST2]], i32 0, i32 0
14683ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[J2:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST2]], i32 0, i32 1
14783ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP8:%.*]] = getelementptr i32, i32* [[J2]], i32 1
14883ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP9:%.*]] = bitcast i32* [[I1]] to i8*
14983ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP10:%.*]] = bitcast i32* [[TMP8]] to i8*
15083ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP11:%.*]] = ptrtoint i8* [[TMP10]] to i64
15183ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP12:%.*]] = ptrtoint i8* [[TMP9]] to i64
15283ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP13:%.*]] = sub i64 [[TMP11]], [[TMP12]]
15383ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP14:%.*]] = sdiv exact i64 [[TMP13]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64)
154d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP15:%.*]] = bitcast [7 x i64]* [[DOTOFFLOAD_SIZES]] to i8*
155d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 [[TMP15]], i8* align 8 bitcast ([7 x i64]* @.offload_sizes to i8*), i64 56, i1 false)
156d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP16:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
157d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP17:%.*]] = bitcast i8** [[TMP16]] to %struct.ST**
158d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store %struct.ST* [[ST1]], %struct.ST** [[TMP17]], align 8
159d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP18:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
160d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP19:%.*]] = bitcast i8** [[TMP18]] to i32**
161d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i32* [[I]], i32** [[TMP19]], align 8
162d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP20:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
163d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i64 [[TMP7]], i64* [[TMP20]], align 8
164d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP21:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
165d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i8* null, i8** [[TMP21]], align 8
166d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP22:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
167d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP23:%.*]] = bitcast i8** [[TMP22]] to %struct.ST**
168d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store %struct.ST* [[ST1]], %struct.ST** [[TMP23]], align 8
169d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP24:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
170d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP25:%.*]] = bitcast i8** [[TMP24]] to i32**
171d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i32* [[I]], i32** [[TMP25]], align 8
172ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP26:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1
173ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i8* null, i8** [[TMP26]], align 8
174ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP27:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
175ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP28:%.*]] = bitcast i8** [[TMP27]] to %struct.ST**
176ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store %struct.ST* [[ST1]], %struct.ST** [[TMP28]], align 8
177ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP29:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
178ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP30:%.*]] = bitcast i8** [[TMP29]] to i32**
179ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i32* [[J]], i32** [[TMP30]], align 8
180d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP31:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2
181d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i8* null, i8** [[TMP31]], align 8
182d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP32:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
183d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP33:%.*]] = bitcast i8** [[TMP32]] to i32**
184d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i32* [[A]], i32** [[TMP33]], align 8
185d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP34:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
186d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP35:%.*]] = bitcast i8** [[TMP34]] to i32**
187d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i32* [[A]], i32** [[TMP35]], align 8
188d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP36:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 3
189d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i8* null, i8** [[TMP36]], align 8
190d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP37:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
191d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP38:%.*]] = bitcast i8** [[TMP37]] to %struct.ST**
192d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store %struct.ST* [[ST2]], %struct.ST** [[TMP38]], align 8
193d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP39:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
194d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP40:%.*]] = bitcast i8** [[TMP39]] to i32**
195d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i32* [[I1]], i32** [[TMP40]], align 8
196d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP41:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 4
197d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i64 [[TMP14]], i64* [[TMP41]], align 8
198d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP42:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 4
199d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i8* null, i8** [[TMP42]], align 8
200d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP43:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 5
201d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP44:%.*]] = bitcast i8** [[TMP43]] to %struct.ST**
202d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store %struct.ST* [[ST2]], %struct.ST** [[TMP44]], align 8
203d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP45:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 5
204d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP46:%.*]] = bitcast i8** [[TMP45]] to i32**
205d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i32* [[I1]], i32** [[TMP46]], align 8
206d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP47:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 5
207d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i8* null, i8** [[TMP47]], align 8
208d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP48:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 6
209d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP49:%.*]] = bitcast i8** [[TMP48]] to %struct.ST**
210d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store %struct.ST* [[ST2]], %struct.ST** [[TMP49]], align 8
211d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP50:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 6
212d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP51:%.*]] = bitcast i8** [[TMP50]] to i32**
213d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i32* [[J2]], i32** [[TMP51]], align 8
214d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP52:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 6
215d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i8* null, i8** [[TMP52]], align 8
216d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP53:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
217d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP54:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
218d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP55:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
2191fff1166SJoseph Huber // CHECK-USE-PPC64LE-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8
2201fff1166SJoseph Huber // CHECK-USE-PPC64LE-NEXT: [[TMP56:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]], i32 0, i32 0
2211fff1166SJoseph Huber // CHECK-USE-PPC64LE-NEXT: store i32 1, i32* [[TMP56]], align 4
2221fff1166SJoseph Huber // CHECK-USE-PPC64LE-NEXT: [[TMP57:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]], i32 0, i32 1
2231fff1166SJoseph Huber // CHECK-USE-PPC64LE-NEXT: store i32 7, i32* [[TMP57]], align 4
2241fff1166SJoseph Huber // CHECK-USE-PPC64LE-NEXT: [[TMP58:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]], i32 0, i32 2
2251fff1166SJoseph Huber // CHECK-USE-PPC64LE-NEXT: store i8** [[TMP53]], i8*** [[TMP58]], align 8
2261fff1166SJoseph Huber // CHECK-USE-PPC64LE-NEXT: [[TMP59:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]], i32 0, i32 3
2271fff1166SJoseph Huber // CHECK-USE-PPC64LE-NEXT: store i8** [[TMP54]], i8*** [[TMP59]], align 8
2281fff1166SJoseph Huber // CHECK-USE-PPC64LE-NEXT: [[TMP60:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]], i32 0, i32 4
2291fff1166SJoseph Huber // CHECK-USE-PPC64LE-NEXT: store i64* [[TMP55]], i64** [[TMP60]], align 8
2301fff1166SJoseph Huber // CHECK-USE-PPC64LE-NEXT: [[TMP61:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]], i32 0, i32 5
2311fff1166SJoseph Huber // CHECK-USE-PPC64LE-NEXT: store i64* getelementptr inbounds ([7 x i64], [7 x i64]* @.offload_maptypes, i32 0, i32 0), i64** [[TMP61]], align 8
2321fff1166SJoseph Huber // CHECK-USE-PPC64LE-NEXT: [[TMP62:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]], i32 0, i32 6
2331fff1166SJoseph Huber // CHECK-USE-PPC64LE-NEXT: store i8** null, i8*** [[TMP62]], align 8
2341fff1166SJoseph Huber // CHECK-USE-PPC64LE-NEXT: [[TMP63:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]], i32 0, i32 7
2351fff1166SJoseph Huber // CHECK-USE-PPC64LE-NEXT: store i8** null, i8*** [[TMP63]], align 8
236*5300263cSJoseph Huber // CHECK-USE-PPC64LE-NEXT: [[TMP64:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]], i32 0, i32 8
237*5300263cSJoseph Huber // CHECK-USE-PPC64LE-NEXT: store i64 0, i64* [[TMP64]], align 8
238*5300263cSJoseph Huber // CHECK-USE-PPC64LE-NEXT: [[TMP65:%.*]] = call i32 @__tgt_target_kernel(%struct.ident_t* @[[GLOB1:[0-9]+]], i64 -1, i32 -1, i32 0, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z20explicit_maps_singlei_l782.region_id, %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]])
239*5300263cSJoseph Huber // CHECK-USE-PPC64LE-NEXT: [[TMP66:%.*]] = icmp ne i32 [[TMP65]], 0
240*5300263cSJoseph Huber // CHECK-USE-PPC64LE-NEXT: br i1 [[TMP66]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
24183ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE: omp_offload.failed:
242*5300263cSJoseph Huber // CHECK-USE-PPC64LE-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z20explicit_maps_singlei_l782(%struct.ST* [[ST1]], i32* [[A]], %struct.ST* [[ST2]]) #[[ATTR3:[0-9]+]]
24383ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: br label [[OMP_OFFLOAD_CONT]]
24483ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE: omp_offload.cont:
245*5300263cSJoseph Huber // CHECK-USE-PPC64LE-NEXT: [[TMP67:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS3]], i32 0, i32 0
246*5300263cSJoseph Huber // CHECK-USE-PPC64LE-NEXT: [[TMP68:%.*]] = bitcast i8** [[TMP67]] to i32**
247*5300263cSJoseph Huber // CHECK-USE-PPC64LE-NEXT: store i32* [[A]], i32** [[TMP68]], align 8
248*5300263cSJoseph Huber // CHECK-USE-PPC64LE-NEXT: [[TMP69:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS4]], i32 0, i32 0
249*5300263cSJoseph Huber // CHECK-USE-PPC64LE-NEXT: [[TMP70:%.*]] = bitcast i8** [[TMP69]] to i32**
250*5300263cSJoseph Huber // CHECK-USE-PPC64LE-NEXT: store i32* [[A]], i32** [[TMP70]], align 8
251*5300263cSJoseph Huber // CHECK-USE-PPC64LE-NEXT: [[TMP71:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_MAPPERS5]], i64 0, i64 0
252*5300263cSJoseph Huber // CHECK-USE-PPC64LE-NEXT: store i8* null, i8** [[TMP71]], align 8
253*5300263cSJoseph Huber // CHECK-USE-PPC64LE-NEXT: [[TMP72:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS3]], i32 0, i32 0
254*5300263cSJoseph Huber // CHECK-USE-PPC64LE-NEXT: [[TMP73:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS4]], i32 0, i32 0
2551fff1166SJoseph Huber // CHECK-USE-PPC64LE-NEXT: [[KERNEL_ARGS6:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
256*5300263cSJoseph Huber // CHECK-USE-PPC64LE-NEXT: [[TMP74:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS6]], i32 0, i32 0
2571fff1166SJoseph Huber // CHECK-USE-PPC64LE-NEXT: store i32 1, i32* [[TMP74]], align 4
258*5300263cSJoseph Huber // CHECK-USE-PPC64LE-NEXT: [[TMP75:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS6]], i32 0, i32 1
259*5300263cSJoseph Huber // CHECK-USE-PPC64LE-NEXT: store i32 1, i32* [[TMP75]], align 4
260*5300263cSJoseph Huber // CHECK-USE-PPC64LE-NEXT: [[TMP76:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS6]], i32 0, i32 2
2611fff1166SJoseph Huber // CHECK-USE-PPC64LE-NEXT: store i8** [[TMP72]], i8*** [[TMP76]], align 8
262*5300263cSJoseph Huber // CHECK-USE-PPC64LE-NEXT: [[TMP77:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS6]], i32 0, i32 3
263*5300263cSJoseph Huber // CHECK-USE-PPC64LE-NEXT: store i8** [[TMP73]], i8*** [[TMP77]], align 8
264*5300263cSJoseph Huber // CHECK-USE-PPC64LE-NEXT: [[TMP78:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS6]], i32 0, i32 4
265*5300263cSJoseph Huber // CHECK-USE-PPC64LE-NEXT: store i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes.1, i32 0, i32 0), i64** [[TMP78]], align 8
266*5300263cSJoseph Huber // CHECK-USE-PPC64LE-NEXT: [[TMP79:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS6]], i32 0, i32 5
267*5300263cSJoseph Huber // CHECK-USE-PPC64LE-NEXT: store i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.2, i32 0, i32 0), i64** [[TMP79]], align 8
268*5300263cSJoseph Huber // CHECK-USE-PPC64LE-NEXT: [[TMP80:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS6]], i32 0, i32 6
2691fff1166SJoseph Huber // CHECK-USE-PPC64LE-NEXT: store i8** null, i8*** [[TMP80]], align 8
270*5300263cSJoseph Huber // CHECK-USE-PPC64LE-NEXT: [[TMP81:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS6]], i32 0, i32 7
271*5300263cSJoseph Huber // CHECK-USE-PPC64LE-NEXT: store i8** null, i8*** [[TMP81]], align 8
272*5300263cSJoseph Huber // CHECK-USE-PPC64LE-NEXT: [[TMP82:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS6]], i32 0, i32 8
273*5300263cSJoseph Huber // CHECK-USE-PPC64LE-NEXT: store i64 0, i64* [[TMP82]], align 8
274*5300263cSJoseph Huber // CHECK-USE-PPC64LE-NEXT: [[TMP83:%.*]] = call i32 @__tgt_target_kernel(%struct.ident_t* @[[GLOB1]], i64 -1, i32 -1, i32 0, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z20explicit_maps_singlei_l796.region_id, %struct.__tgt_kernel_arguments* [[KERNEL_ARGS6]])
275*5300263cSJoseph Huber // CHECK-USE-PPC64LE-NEXT: [[TMP84:%.*]] = icmp ne i32 [[TMP83]], 0
276*5300263cSJoseph Huber // CHECK-USE-PPC64LE-NEXT: br i1 [[TMP84]], label [[OMP_OFFLOAD_FAILED7:%.*]], label [[OMP_OFFLOAD_CONT8:%.*]]
2771fff1166SJoseph Huber // CHECK-USE-PPC64LE: omp_offload.failed7:
278*5300263cSJoseph Huber // CHECK-USE-PPC64LE-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z20explicit_maps_singlei_l796(i32* [[A]]) #[[ATTR3]]
2791fff1166SJoseph Huber // CHECK-USE-PPC64LE-NEXT: br label [[OMP_OFFLOAD_CONT8]]
2801fff1166SJoseph Huber // CHECK-USE-PPC64LE: omp_offload.cont8:
28183ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: ret void
28283ddfa0dSJoel E. Denny //
28383ddfa0dSJoel E. Denny // CHECK-USE-I386-LABEL: @_Z20explicit_maps_singlei(
28483ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: entry:
28583ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[II_ADDR:%.*]] = alloca i32, align 4
28683ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[A:%.*]] = alloca i32, align 4
28783ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[ST1:%.*]] = alloca [[STRUCT_ST:%.*]], align 4
28883ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[ST2:%.*]] = alloca [[STRUCT_ST]], align 4
28983ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [7 x i8*], align 4
29083ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [7 x i8*], align 4
29183ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [7 x i8*], align 4
292ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [7 x i64], align 4
29383ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[DOTOFFLOAD_BASEPTRS3:%.*]] = alloca [1 x i8*], align 4
29483ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[DOTOFFLOAD_PTRS4:%.*]] = alloca [1 x i8*], align 4
29583ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[DOTOFFLOAD_MAPPERS5:%.*]] = alloca [1 x i8*], align 4
29683ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: store i32 [[II:%.*]], i32* [[II_ADDR]], align 4
29783ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP0:%.*]] = load i32, i32* [[II_ADDR]], align 4
29883ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: store i32 [[TMP0]], i32* [[A]], align 4
29983ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[I:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST1]], i32 0, i32 0
30083ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[J:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST1]], i32 0, i32 1
30183ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP1:%.*]] = getelementptr i32, i32* [[J]], i32 1
30283ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP2:%.*]] = bitcast i32* [[I]] to i8*
30383ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP3:%.*]] = bitcast i32* [[TMP1]] to i8*
30483ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP4:%.*]] = ptrtoint i8* [[TMP3]] to i64
30583ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP5:%.*]] = ptrtoint i8* [[TMP2]] to i64
30683ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP6:%.*]] = sub i64 [[TMP4]], [[TMP5]]
30783ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP7:%.*]] = sdiv exact i64 [[TMP6]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64)
30883ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[I1:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST2]], i32 0, i32 0
30983ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[J2:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST2]], i32 0, i32 1
31083ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP8:%.*]] = getelementptr i32, i32* [[J2]], i32 1
31183ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP9:%.*]] = bitcast i32* [[I1]] to i8*
31283ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP10:%.*]] = bitcast i32* [[TMP8]] to i8*
31383ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP11:%.*]] = ptrtoint i8* [[TMP10]] to i64
31483ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP12:%.*]] = ptrtoint i8* [[TMP9]] to i64
31583ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP13:%.*]] = sub i64 [[TMP11]], [[TMP12]]
31683ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP14:%.*]] = sdiv exact i64 [[TMP13]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64)
317d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP15:%.*]] = bitcast [7 x i64]* [[DOTOFFLOAD_SIZES]] to i8*
318d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 4 [[TMP15]], i8* align 4 bitcast ([7 x i64]* @.offload_sizes to i8*), i32 56, i1 false)
319d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP16:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
320d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP17:%.*]] = bitcast i8** [[TMP16]] to %struct.ST**
321d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store %struct.ST* [[ST1]], %struct.ST** [[TMP17]], align 4
322d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP18:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
323d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP19:%.*]] = bitcast i8** [[TMP18]] to i32**
324d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store i32* [[I]], i32** [[TMP19]], align 4
325d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP20:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
326d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store i64 [[TMP7]], i64* [[TMP20]], align 4
327d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP21:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
328d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store i8* null, i8** [[TMP21]], align 4
329d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP22:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
330d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP23:%.*]] = bitcast i8** [[TMP22]] to %struct.ST**
331d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store %struct.ST* [[ST1]], %struct.ST** [[TMP23]], align 4
332d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP24:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
333d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP25:%.*]] = bitcast i8** [[TMP24]] to i32**
334d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store i32* [[I]], i32** [[TMP25]], align 4
335ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP26:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1
336ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: store i8* null, i8** [[TMP26]], align 4
337ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP27:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
338ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP28:%.*]] = bitcast i8** [[TMP27]] to %struct.ST**
339ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: store %struct.ST* [[ST1]], %struct.ST** [[TMP28]], align 4
340ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP29:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
341ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP30:%.*]] = bitcast i8** [[TMP29]] to i32**
342ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: store i32* [[J]], i32** [[TMP30]], align 4
343d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP31:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2
344d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store i8* null, i8** [[TMP31]], align 4
345d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP32:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
346d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP33:%.*]] = bitcast i8** [[TMP32]] to i32**
347d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store i32* [[A]], i32** [[TMP33]], align 4
348d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP34:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
349d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP35:%.*]] = bitcast i8** [[TMP34]] to i32**
350d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store i32* [[A]], i32** [[TMP35]], align 4
351d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP36:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 3
352d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store i8* null, i8** [[TMP36]], align 4
353d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP37:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
354d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP38:%.*]] = bitcast i8** [[TMP37]] to %struct.ST**
355d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store %struct.ST* [[ST2]], %struct.ST** [[TMP38]], align 4
356d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP39:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
357d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP40:%.*]] = bitcast i8** [[TMP39]] to i32**
358d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store i32* [[I1]], i32** [[TMP40]], align 4
359d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP41:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 4
360d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store i64 [[TMP14]], i64* [[TMP41]], align 4
361d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP42:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 4
362d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store i8* null, i8** [[TMP42]], align 4
363d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP43:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 5
364d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP44:%.*]] = bitcast i8** [[TMP43]] to %struct.ST**
365d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store %struct.ST* [[ST2]], %struct.ST** [[TMP44]], align 4
366d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP45:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 5
367d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP46:%.*]] = bitcast i8** [[TMP45]] to i32**
368d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store i32* [[I1]], i32** [[TMP46]], align 4
369d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP47:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 5
370d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store i8* null, i8** [[TMP47]], align 4
371d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP48:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 6
372d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP49:%.*]] = bitcast i8** [[TMP48]] to %struct.ST**
373d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store %struct.ST* [[ST2]], %struct.ST** [[TMP49]], align 4
374d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP50:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 6
375d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP51:%.*]] = bitcast i8** [[TMP50]] to i32**
376d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store i32* [[J2]], i32** [[TMP51]], align 4
377d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP52:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 6
378d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store i8* null, i8** [[TMP52]], align 4
379d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP53:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
380d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP54:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
381d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP55:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
3821fff1166SJoseph Huber // CHECK-USE-I386-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8
3831fff1166SJoseph Huber // CHECK-USE-I386-NEXT: [[TMP56:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]], i32 0, i32 0
3841fff1166SJoseph Huber // CHECK-USE-I386-NEXT: store i32 1, i32* [[TMP56]], align 4
3851fff1166SJoseph Huber // CHECK-USE-I386-NEXT: [[TMP57:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]], i32 0, i32 1
3861fff1166SJoseph Huber // CHECK-USE-I386-NEXT: store i32 7, i32* [[TMP57]], align 4
3871fff1166SJoseph Huber // CHECK-USE-I386-NEXT: [[TMP58:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]], i32 0, i32 2
3881fff1166SJoseph Huber // CHECK-USE-I386-NEXT: store i8** [[TMP53]], i8*** [[TMP58]], align 4
3891fff1166SJoseph Huber // CHECK-USE-I386-NEXT: [[TMP59:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]], i32 0, i32 3
3901fff1166SJoseph Huber // CHECK-USE-I386-NEXT: store i8** [[TMP54]], i8*** [[TMP59]], align 4
3911fff1166SJoseph Huber // CHECK-USE-I386-NEXT: [[TMP60:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]], i32 0, i32 4
3921fff1166SJoseph Huber // CHECK-USE-I386-NEXT: store i64* [[TMP55]], i64** [[TMP60]], align 4
3931fff1166SJoseph Huber // CHECK-USE-I386-NEXT: [[TMP61:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]], i32 0, i32 5
3941fff1166SJoseph Huber // CHECK-USE-I386-NEXT: store i64* getelementptr inbounds ([7 x i64], [7 x i64]* @.offload_maptypes, i32 0, i32 0), i64** [[TMP61]], align 4
3951fff1166SJoseph Huber // CHECK-USE-I386-NEXT: [[TMP62:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]], i32 0, i32 6
3961fff1166SJoseph Huber // CHECK-USE-I386-NEXT: store i8** null, i8*** [[TMP62]], align 4
3971fff1166SJoseph Huber // CHECK-USE-I386-NEXT: [[TMP63:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]], i32 0, i32 7
3981fff1166SJoseph Huber // CHECK-USE-I386-NEXT: store i8** null, i8*** [[TMP63]], align 4
399*5300263cSJoseph Huber // CHECK-USE-I386-NEXT: [[TMP64:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]], i32 0, i32 8
400*5300263cSJoseph Huber // CHECK-USE-I386-NEXT: store i64 0, i64* [[TMP64]], align 8
401*5300263cSJoseph Huber // CHECK-USE-I386-NEXT: [[TMP65:%.*]] = call i32 @__tgt_target_kernel(%struct.ident_t* @[[GLOB1:[0-9]+]], i64 -1, i32 -1, i32 0, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z20explicit_maps_singlei_l782.region_id, %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]])
402*5300263cSJoseph Huber // CHECK-USE-I386-NEXT: [[TMP66:%.*]] = icmp ne i32 [[TMP65]], 0
403*5300263cSJoseph Huber // CHECK-USE-I386-NEXT: br i1 [[TMP66]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
40483ddfa0dSJoel E. Denny // CHECK-USE-I386: omp_offload.failed:
405*5300263cSJoseph Huber // CHECK-USE-I386-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z20explicit_maps_singlei_l782(%struct.ST* [[ST1]], i32* [[A]], %struct.ST* [[ST2]]) #[[ATTR3:[0-9]+]]
40683ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: br label [[OMP_OFFLOAD_CONT]]
40783ddfa0dSJoel E. Denny // CHECK-USE-I386: omp_offload.cont:
408*5300263cSJoseph Huber // CHECK-USE-I386-NEXT: [[TMP67:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS3]], i32 0, i32 0
409*5300263cSJoseph Huber // CHECK-USE-I386-NEXT: [[TMP68:%.*]] = bitcast i8** [[TMP67]] to i32**
410*5300263cSJoseph Huber // CHECK-USE-I386-NEXT: store i32* [[A]], i32** [[TMP68]], align 4
411*5300263cSJoseph Huber // CHECK-USE-I386-NEXT: [[TMP69:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS4]], i32 0, i32 0
412*5300263cSJoseph Huber // CHECK-USE-I386-NEXT: [[TMP70:%.*]] = bitcast i8** [[TMP69]] to i32**
413*5300263cSJoseph Huber // CHECK-USE-I386-NEXT: store i32* [[A]], i32** [[TMP70]], align 4
414*5300263cSJoseph Huber // CHECK-USE-I386-NEXT: [[TMP71:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_MAPPERS5]], i32 0, i32 0
415*5300263cSJoseph Huber // CHECK-USE-I386-NEXT: store i8* null, i8** [[TMP71]], align 4
416*5300263cSJoseph Huber // CHECK-USE-I386-NEXT: [[TMP72:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS3]], i32 0, i32 0
417*5300263cSJoseph Huber // CHECK-USE-I386-NEXT: [[TMP73:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS4]], i32 0, i32 0
4181fff1166SJoseph Huber // CHECK-USE-I386-NEXT: [[KERNEL_ARGS6:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
419*5300263cSJoseph Huber // CHECK-USE-I386-NEXT: [[TMP74:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS6]], i32 0, i32 0
4201fff1166SJoseph Huber // CHECK-USE-I386-NEXT: store i32 1, i32* [[TMP74]], align 4
421*5300263cSJoseph Huber // CHECK-USE-I386-NEXT: [[TMP75:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS6]], i32 0, i32 1
422*5300263cSJoseph Huber // CHECK-USE-I386-NEXT: store i32 1, i32* [[TMP75]], align 4
423*5300263cSJoseph Huber // CHECK-USE-I386-NEXT: [[TMP76:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS6]], i32 0, i32 2
4241fff1166SJoseph Huber // CHECK-USE-I386-NEXT: store i8** [[TMP72]], i8*** [[TMP76]], align 4
425*5300263cSJoseph Huber // CHECK-USE-I386-NEXT: [[TMP77:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS6]], i32 0, i32 3
426*5300263cSJoseph Huber // CHECK-USE-I386-NEXT: store i8** [[TMP73]], i8*** [[TMP77]], align 4
427*5300263cSJoseph Huber // CHECK-USE-I386-NEXT: [[TMP78:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS6]], i32 0, i32 4
428*5300263cSJoseph Huber // CHECK-USE-I386-NEXT: store i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes.1, i32 0, i32 0), i64** [[TMP78]], align 4
429*5300263cSJoseph Huber // CHECK-USE-I386-NEXT: [[TMP79:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS6]], i32 0, i32 5
430*5300263cSJoseph Huber // CHECK-USE-I386-NEXT: store i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.2, i32 0, i32 0), i64** [[TMP79]], align 4
431*5300263cSJoseph Huber // CHECK-USE-I386-NEXT: [[TMP80:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS6]], i32 0, i32 6
4321fff1166SJoseph Huber // CHECK-USE-I386-NEXT: store i8** null, i8*** [[TMP80]], align 4
433*5300263cSJoseph Huber // CHECK-USE-I386-NEXT: [[TMP81:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS6]], i32 0, i32 7
434*5300263cSJoseph Huber // CHECK-USE-I386-NEXT: store i8** null, i8*** [[TMP81]], align 4
435*5300263cSJoseph Huber // CHECK-USE-I386-NEXT: [[TMP82:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS6]], i32 0, i32 8
436*5300263cSJoseph Huber // CHECK-USE-I386-NEXT: store i64 0, i64* [[TMP82]], align 8
437*5300263cSJoseph Huber // CHECK-USE-I386-NEXT: [[TMP83:%.*]] = call i32 @__tgt_target_kernel(%struct.ident_t* @[[GLOB1]], i64 -1, i32 -1, i32 0, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z20explicit_maps_singlei_l796.region_id, %struct.__tgt_kernel_arguments* [[KERNEL_ARGS6]])
438*5300263cSJoseph Huber // CHECK-USE-I386-NEXT: [[TMP84:%.*]] = icmp ne i32 [[TMP83]], 0
439*5300263cSJoseph Huber // CHECK-USE-I386-NEXT: br i1 [[TMP84]], label [[OMP_OFFLOAD_FAILED7:%.*]], label [[OMP_OFFLOAD_CONT8:%.*]]
4401fff1166SJoseph Huber // CHECK-USE-I386: omp_offload.failed7:
441*5300263cSJoseph Huber // CHECK-USE-I386-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z20explicit_maps_singlei_l796(i32* [[A]]) #[[ATTR3]]
4421fff1166SJoseph Huber // CHECK-USE-I386-NEXT: br label [[OMP_OFFLOAD_CONT8]]
4431fff1166SJoseph Huber // CHECK-USE-I386: omp_offload.cont8:
44483ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: ret void
44583ddfa0dSJoel E. Denny //
44683ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-LABEL: @_Z20explicit_maps_singlei(
44783ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: entry:
44883ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[II_ADDR:%.*]] = alloca i32, align 4
44983ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[A:%.*]] = alloca i32, align 4
45083ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[ST1:%.*]] = alloca [[STRUCT_ST:%.*]], align 4
45183ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[ST2:%.*]] = alloca [[STRUCT_ST]], align 4
45283ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [7 x i8*], align 8
45383ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [7 x i8*], align 8
45483ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [7 x i8*], align 8
455ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [7 x i64], align 8
45683ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[DOTOFFLOAD_BASEPTRS3:%.*]] = alloca [1 x i8*], align 8
45783ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[DOTOFFLOAD_PTRS4:%.*]] = alloca [1 x i8*], align 8
45883ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[DOTOFFLOAD_MAPPERS5:%.*]] = alloca [1 x i8*], align 8
45983ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: store i32 [[II:%.*]], i32* [[II_ADDR]], align 4
46083ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP0:%.*]] = load i32, i32* [[II_ADDR]], align 4
46183ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: store i32 [[TMP0]], i32* [[A]], align 4
46283ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[I:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST1]], i32 0, i32 0
46383ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[J:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST1]], i32 0, i32 1
46483ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP1:%.*]] = getelementptr i32, i32* [[J]], i32 1
46583ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP2:%.*]] = bitcast i32* [[I]] to i8*
46683ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP3:%.*]] = bitcast i32* [[TMP1]] to i8*
46783ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP4:%.*]] = ptrtoint i8* [[TMP3]] to i64
46883ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP5:%.*]] = ptrtoint i8* [[TMP2]] to i64
46983ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP6:%.*]] = sub i64 [[TMP4]], [[TMP5]]
47083ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP7:%.*]] = sdiv exact i64 [[TMP6]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64)
47183ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[I1:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST2]], i32 0, i32 0
47283ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[J2:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST2]], i32 0, i32 1
47383ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP8:%.*]] = getelementptr i32, i32* [[J2]], i32 1
47483ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP9:%.*]] = bitcast i32* [[I1]] to i8*
47583ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP10:%.*]] = bitcast i32* [[TMP8]] to i8*
47683ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP11:%.*]] = ptrtoint i8* [[TMP10]] to i64
47783ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP12:%.*]] = ptrtoint i8* [[TMP9]] to i64
47883ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP13:%.*]] = sub i64 [[TMP11]], [[TMP12]]
47983ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP14:%.*]] = sdiv exact i64 [[TMP13]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64)
480d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP15:%.*]] = bitcast [7 x i64]* [[DOTOFFLOAD_SIZES]] to i8*
481d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 [[TMP15]], i8* align 8 bitcast ([7 x i64]* @.offload_sizes to i8*), i64 56, i1 false)
482d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP16:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
483d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP17:%.*]] = bitcast i8** [[TMP16]] to %struct.ST**
484d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store %struct.ST* [[ST1]], %struct.ST** [[TMP17]], align 8
485d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP18:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
486d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP19:%.*]] = bitcast i8** [[TMP18]] to i32**
487d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i32* [[I]], i32** [[TMP19]], align 8
488d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP20:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
489d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i64 [[TMP7]], i64* [[TMP20]], align 8
490d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP21:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
491d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i8* null, i8** [[TMP21]], align 8
492d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP22:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
493d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP23:%.*]] = bitcast i8** [[TMP22]] to %struct.ST**
494d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store %struct.ST* [[ST1]], %struct.ST** [[TMP23]], align 8
495d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP24:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
496d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP25:%.*]] = bitcast i8** [[TMP24]] to i32**
497d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i32* [[I]], i32** [[TMP25]], align 8
498ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP26:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1
499ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i8* null, i8** [[TMP26]], align 8
500ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP27:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
501ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP28:%.*]] = bitcast i8** [[TMP27]] to %struct.ST**
502ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store %struct.ST* [[ST1]], %struct.ST** [[TMP28]], align 8
503ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP29:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
504ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP30:%.*]] = bitcast i8** [[TMP29]] to i32**
505ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i32* [[J]], i32** [[TMP30]], align 8
506d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP31:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2
507d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i8* null, i8** [[TMP31]], align 8
508d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP32:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
509d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP33:%.*]] = bitcast i8** [[TMP32]] to i32**
510d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i32* [[A]], i32** [[TMP33]], align 8
511d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP34:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
512d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP35:%.*]] = bitcast i8** [[TMP34]] to i32**
513d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i32* [[A]], i32** [[TMP35]], align 8
514d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP36:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 3
515d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i8* null, i8** [[TMP36]], align 8
516d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP37:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
517d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP38:%.*]] = bitcast i8** [[TMP37]] to %struct.ST**
518d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store %struct.ST* [[ST2]], %struct.ST** [[TMP38]], align 8
519d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP39:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
520d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP40:%.*]] = bitcast i8** [[TMP39]] to i32**
521d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i32* [[I1]], i32** [[TMP40]], align 8
522d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP41:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 4
523d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i64 [[TMP14]], i64* [[TMP41]], align 8
524d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP42:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 4
525d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i8* null, i8** [[TMP42]], align 8
526d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP43:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 5
527d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP44:%.*]] = bitcast i8** [[TMP43]] to %struct.ST**
528d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store %struct.ST* [[ST2]], %struct.ST** [[TMP44]], align 8
529d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP45:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 5
530d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP46:%.*]] = bitcast i8** [[TMP45]] to i32**
531d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i32* [[I1]], i32** [[TMP46]], align 8
532d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP47:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 5
533d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i8* null, i8** [[TMP47]], align 8
534d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP48:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 6
535d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP49:%.*]] = bitcast i8** [[TMP48]] to %struct.ST**
536d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store %struct.ST* [[ST2]], %struct.ST** [[TMP49]], align 8
537d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP50:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 6
538d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP51:%.*]] = bitcast i8** [[TMP50]] to i32**
539d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i32* [[J2]], i32** [[TMP51]], align 8
540d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP52:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 6
541d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i8* null, i8** [[TMP52]], align 8
542d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP53:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
543d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP54:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
544d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP55:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
5451fff1166SJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8
5461fff1166SJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: [[TMP56:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]], i32 0, i32 0
5471fff1166SJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: store i32 1, i32* [[TMP56]], align 4
5481fff1166SJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: [[TMP57:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]], i32 0, i32 1
5491fff1166SJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: store i32 7, i32* [[TMP57]], align 4
5501fff1166SJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: [[TMP58:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]], i32 0, i32 2
5511fff1166SJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: store i8** [[TMP53]], i8*** [[TMP58]], align 8
5521fff1166SJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: [[TMP59:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]], i32 0, i32 3
5531fff1166SJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: store i8** [[TMP54]], i8*** [[TMP59]], align 8
5541fff1166SJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: [[TMP60:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]], i32 0, i32 4
5551fff1166SJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: store i64* [[TMP55]], i64** [[TMP60]], align 8
5561fff1166SJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: [[TMP61:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]], i32 0, i32 5
5571fff1166SJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: store i64* getelementptr inbounds ([7 x i64], [7 x i64]* @.offload_maptypes, i32 0, i32 0), i64** [[TMP61]], align 8
5581fff1166SJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: [[TMP62:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]], i32 0, i32 6
5591fff1166SJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: store i8** null, i8*** [[TMP62]], align 8
5601fff1166SJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: [[TMP63:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]], i32 0, i32 7
5611fff1166SJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: store i8** null, i8*** [[TMP63]], align 8
562*5300263cSJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: [[TMP64:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]], i32 0, i32 8
563*5300263cSJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: store i64 0, i64* [[TMP64]], align 8
564*5300263cSJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: [[TMP65:%.*]] = call i32 @__tgt_target_kernel(%struct.ident_t* @[[GLOB1:[0-9]+]], i64 -1, i32 -1, i32 0, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z20explicit_maps_singlei_l782.region_id, %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]])
565*5300263cSJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: [[TMP66:%.*]] = icmp ne i32 [[TMP65]], 0
566*5300263cSJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: br i1 [[TMP66]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
56783ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE: omp_offload.failed:
568*5300263cSJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z20explicit_maps_singlei_l782() #[[ATTR3:[0-9]+]]
56983ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: br label [[OMP_OFFLOAD_CONT]]
57083ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE: omp_offload.cont:
571*5300263cSJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: [[TMP67:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS3]], i32 0, i32 0
572*5300263cSJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: [[TMP68:%.*]] = bitcast i8** [[TMP67]] to i32**
573*5300263cSJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: store i32* [[A]], i32** [[TMP68]], align 8
574*5300263cSJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: [[TMP69:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS4]], i32 0, i32 0
575*5300263cSJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: [[TMP70:%.*]] = bitcast i8** [[TMP69]] to i32**
576*5300263cSJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: store i32* [[A]], i32** [[TMP70]], align 8
577*5300263cSJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: [[TMP71:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_MAPPERS5]], i64 0, i64 0
578*5300263cSJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: store i8* null, i8** [[TMP71]], align 8
579*5300263cSJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: [[TMP72:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS3]], i32 0, i32 0
580*5300263cSJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: [[TMP73:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS4]], i32 0, i32 0
5811fff1166SJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: [[KERNEL_ARGS6:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
582*5300263cSJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: [[TMP74:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS6]], i32 0, i32 0
5831fff1166SJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: store i32 1, i32* [[TMP74]], align 4
584*5300263cSJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: [[TMP75:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS6]], i32 0, i32 1
585*5300263cSJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: store i32 1, i32* [[TMP75]], align 4
586*5300263cSJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: [[TMP76:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS6]], i32 0, i32 2
5871fff1166SJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: store i8** [[TMP72]], i8*** [[TMP76]], align 8
588*5300263cSJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: [[TMP77:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS6]], i32 0, i32 3
589*5300263cSJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: store i8** [[TMP73]], i8*** [[TMP77]], align 8
590*5300263cSJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: [[TMP78:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS6]], i32 0, i32 4
591*5300263cSJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: store i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes.1, i32 0, i32 0), i64** [[TMP78]], align 8
592*5300263cSJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: [[TMP79:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS6]], i32 0, i32 5
593*5300263cSJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: store i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.2, i32 0, i32 0), i64** [[TMP79]], align 8
594*5300263cSJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: [[TMP80:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS6]], i32 0, i32 6
5951fff1166SJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: store i8** null, i8*** [[TMP80]], align 8
596*5300263cSJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: [[TMP81:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS6]], i32 0, i32 7
597*5300263cSJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: store i8** null, i8*** [[TMP81]], align 8
598*5300263cSJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: [[TMP82:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS6]], i32 0, i32 8
599*5300263cSJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: store i64 0, i64* [[TMP82]], align 8
600*5300263cSJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: [[TMP83:%.*]] = call i32 @__tgt_target_kernel(%struct.ident_t* @[[GLOB1]], i64 -1, i32 -1, i32 0, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z20explicit_maps_singlei_l796.region_id, %struct.__tgt_kernel_arguments* [[KERNEL_ARGS6]])
601*5300263cSJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: [[TMP84:%.*]] = icmp ne i32 [[TMP83]], 0
602*5300263cSJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: br i1 [[TMP84]], label [[OMP_OFFLOAD_FAILED7:%.*]], label [[OMP_OFFLOAD_CONT8:%.*]]
6031fff1166SJoseph Huber // CHECK-NOUSE-PPC64LE: omp_offload.failed7:
604*5300263cSJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z20explicit_maps_singlei_l796() #[[ATTR3]]
6051fff1166SJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: br label [[OMP_OFFLOAD_CONT8]]
6061fff1166SJoseph Huber // CHECK-NOUSE-PPC64LE: omp_offload.cont8:
60783ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: ret void
60883ddfa0dSJoel E. Denny //
60983ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-LABEL: @_Z20explicit_maps_singlei(
61083ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: entry:
61183ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[II_ADDR:%.*]] = alloca i32, align 4
61283ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[A:%.*]] = alloca i32, align 4
61383ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[ST1:%.*]] = alloca [[STRUCT_ST:%.*]], align 4
61483ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[ST2:%.*]] = alloca [[STRUCT_ST]], align 4
61583ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [7 x i8*], align 4
61683ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [7 x i8*], align 4
61783ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [7 x i8*], align 4
618ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [7 x i64], align 4
61983ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[DOTOFFLOAD_BASEPTRS3:%.*]] = alloca [1 x i8*], align 4
62083ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[DOTOFFLOAD_PTRS4:%.*]] = alloca [1 x i8*], align 4
62183ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[DOTOFFLOAD_MAPPERS5:%.*]] = alloca [1 x i8*], align 4
62283ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: store i32 [[II:%.*]], i32* [[II_ADDR]], align 4
62383ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP0:%.*]] = load i32, i32* [[II_ADDR]], align 4
62483ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: store i32 [[TMP0]], i32* [[A]], align 4
62583ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[I:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST1]], i32 0, i32 0
62683ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[J:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST1]], i32 0, i32 1
62783ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP1:%.*]] = getelementptr i32, i32* [[J]], i32 1
62883ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP2:%.*]] = bitcast i32* [[I]] to i8*
62983ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP3:%.*]] = bitcast i32* [[TMP1]] to i8*
63083ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP4:%.*]] = ptrtoint i8* [[TMP3]] to i64
63183ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP5:%.*]] = ptrtoint i8* [[TMP2]] to i64
63283ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP6:%.*]] = sub i64 [[TMP4]], [[TMP5]]
63383ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP7:%.*]] = sdiv exact i64 [[TMP6]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64)
63483ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[I1:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST2]], i32 0, i32 0
63583ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[J2:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST2]], i32 0, i32 1
63683ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP8:%.*]] = getelementptr i32, i32* [[J2]], i32 1
63783ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP9:%.*]] = bitcast i32* [[I1]] to i8*
63883ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP10:%.*]] = bitcast i32* [[TMP8]] to i8*
63983ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP11:%.*]] = ptrtoint i8* [[TMP10]] to i64
64083ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP12:%.*]] = ptrtoint i8* [[TMP9]] to i64
64183ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP13:%.*]] = sub i64 [[TMP11]], [[TMP12]]
64283ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP14:%.*]] = sdiv exact i64 [[TMP13]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64)
643d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP15:%.*]] = bitcast [7 x i64]* [[DOTOFFLOAD_SIZES]] to i8*
644d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 4 [[TMP15]], i8* align 4 bitcast ([7 x i64]* @.offload_sizes to i8*), i32 56, i1 false)
645d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP16:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
646d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP17:%.*]] = bitcast i8** [[TMP16]] to %struct.ST**
647d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store %struct.ST* [[ST1]], %struct.ST** [[TMP17]], align 4
648d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP18:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
649d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP19:%.*]] = bitcast i8** [[TMP18]] to i32**
650d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i32* [[I]], i32** [[TMP19]], align 4
651d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP20:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
652d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i64 [[TMP7]], i64* [[TMP20]], align 4
653d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP21:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
654d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i8* null, i8** [[TMP21]], align 4
655d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP22:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
656d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP23:%.*]] = bitcast i8** [[TMP22]] to %struct.ST**
657d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store %struct.ST* [[ST1]], %struct.ST** [[TMP23]], align 4
658d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP24:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
659d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP25:%.*]] = bitcast i8** [[TMP24]] to i32**
660d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i32* [[I]], i32** [[TMP25]], align 4
661ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP26:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1
662ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i8* null, i8** [[TMP26]], align 4
663ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP27:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
664ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP28:%.*]] = bitcast i8** [[TMP27]] to %struct.ST**
665ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: store %struct.ST* [[ST1]], %struct.ST** [[TMP28]], align 4
666ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP29:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
667ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP30:%.*]] = bitcast i8** [[TMP29]] to i32**
668ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i32* [[J]], i32** [[TMP30]], align 4
669d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP31:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2
670d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i8* null, i8** [[TMP31]], align 4
671d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP32:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
672d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP33:%.*]] = bitcast i8** [[TMP32]] to i32**
673d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i32* [[A]], i32** [[TMP33]], align 4
674d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP34:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
675d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP35:%.*]] = bitcast i8** [[TMP34]] to i32**
676d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i32* [[A]], i32** [[TMP35]], align 4
677d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP36:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 3
678d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i8* null, i8** [[TMP36]], align 4
679d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP37:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
680d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP38:%.*]] = bitcast i8** [[TMP37]] to %struct.ST**
681d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store %struct.ST* [[ST2]], %struct.ST** [[TMP38]], align 4
682d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP39:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
683d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP40:%.*]] = bitcast i8** [[TMP39]] to i32**
684d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i32* [[I1]], i32** [[TMP40]], align 4
685d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP41:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 4
686d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i64 [[TMP14]], i64* [[TMP41]], align 4
687d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP42:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 4
688d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i8* null, i8** [[TMP42]], align 4
689d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP43:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 5
690d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP44:%.*]] = bitcast i8** [[TMP43]] to %struct.ST**
691d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store %struct.ST* [[ST2]], %struct.ST** [[TMP44]], align 4
692d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP45:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 5
693d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP46:%.*]] = bitcast i8** [[TMP45]] to i32**
694d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i32* [[I1]], i32** [[TMP46]], align 4
695d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP47:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 5
696d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i8* null, i8** [[TMP47]], align 4
697d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP48:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 6
698d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP49:%.*]] = bitcast i8** [[TMP48]] to %struct.ST**
699d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store %struct.ST* [[ST2]], %struct.ST** [[TMP49]], align 4
700d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP50:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 6
701d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP51:%.*]] = bitcast i8** [[TMP50]] to i32**
702d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i32* [[J2]], i32** [[TMP51]], align 4
703d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP52:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 6
704d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i8* null, i8** [[TMP52]], align 4
705d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP53:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
706d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP54:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
707d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP55:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
7081fff1166SJoseph Huber // CHECK-NOUSE-I386-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8
7091fff1166SJoseph Huber // CHECK-NOUSE-I386-NEXT: [[TMP56:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]], i32 0, i32 0
7101fff1166SJoseph Huber // CHECK-NOUSE-I386-NEXT: store i32 1, i32* [[TMP56]], align 4
7111fff1166SJoseph Huber // CHECK-NOUSE-I386-NEXT: [[TMP57:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]], i32 0, i32 1
7121fff1166SJoseph Huber // CHECK-NOUSE-I386-NEXT: store i32 7, i32* [[TMP57]], align 4
7131fff1166SJoseph Huber // CHECK-NOUSE-I386-NEXT: [[TMP58:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]], i32 0, i32 2
7141fff1166SJoseph Huber // CHECK-NOUSE-I386-NEXT: store i8** [[TMP53]], i8*** [[TMP58]], align 4
7151fff1166SJoseph Huber // CHECK-NOUSE-I386-NEXT: [[TMP59:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]], i32 0, i32 3
7161fff1166SJoseph Huber // CHECK-NOUSE-I386-NEXT: store i8** [[TMP54]], i8*** [[TMP59]], align 4
7171fff1166SJoseph Huber // CHECK-NOUSE-I386-NEXT: [[TMP60:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]], i32 0, i32 4
7181fff1166SJoseph Huber // CHECK-NOUSE-I386-NEXT: store i64* [[TMP55]], i64** [[TMP60]], align 4
7191fff1166SJoseph Huber // CHECK-NOUSE-I386-NEXT: [[TMP61:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]], i32 0, i32 5
7201fff1166SJoseph Huber // CHECK-NOUSE-I386-NEXT: store i64* getelementptr inbounds ([7 x i64], [7 x i64]* @.offload_maptypes, i32 0, i32 0), i64** [[TMP61]], align 4
7211fff1166SJoseph Huber // CHECK-NOUSE-I386-NEXT: [[TMP62:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]], i32 0, i32 6
7221fff1166SJoseph Huber // CHECK-NOUSE-I386-NEXT: store i8** null, i8*** [[TMP62]], align 4
7231fff1166SJoseph Huber // CHECK-NOUSE-I386-NEXT: [[TMP63:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]], i32 0, i32 7
7241fff1166SJoseph Huber // CHECK-NOUSE-I386-NEXT: store i8** null, i8*** [[TMP63]], align 4
725*5300263cSJoseph Huber // CHECK-NOUSE-I386-NEXT: [[TMP64:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]], i32 0, i32 8
726*5300263cSJoseph Huber // CHECK-NOUSE-I386-NEXT: store i64 0, i64* [[TMP64]], align 8
727*5300263cSJoseph Huber // CHECK-NOUSE-I386-NEXT: [[TMP65:%.*]] = call i32 @__tgt_target_kernel(%struct.ident_t* @[[GLOB1:[0-9]+]], i64 -1, i32 -1, i32 0, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z20explicit_maps_singlei_l782.region_id, %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]])
728*5300263cSJoseph Huber // CHECK-NOUSE-I386-NEXT: [[TMP66:%.*]] = icmp ne i32 [[TMP65]], 0
729*5300263cSJoseph Huber // CHECK-NOUSE-I386-NEXT: br i1 [[TMP66]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
73083ddfa0dSJoel E. Denny // CHECK-NOUSE-I386: omp_offload.failed:
731*5300263cSJoseph Huber // CHECK-NOUSE-I386-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z20explicit_maps_singlei_l782() #[[ATTR3:[0-9]+]]
73283ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: br label [[OMP_OFFLOAD_CONT]]
73383ddfa0dSJoel E. Denny // CHECK-NOUSE-I386: omp_offload.cont:
734*5300263cSJoseph Huber // CHECK-NOUSE-I386-NEXT: [[TMP67:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS3]], i32 0, i32 0
735*5300263cSJoseph Huber // CHECK-NOUSE-I386-NEXT: [[TMP68:%.*]] = bitcast i8** [[TMP67]] to i32**
736*5300263cSJoseph Huber // CHECK-NOUSE-I386-NEXT: store i32* [[A]], i32** [[TMP68]], align 4
737*5300263cSJoseph Huber // CHECK-NOUSE-I386-NEXT: [[TMP69:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS4]], i32 0, i32 0
738*5300263cSJoseph Huber // CHECK-NOUSE-I386-NEXT: [[TMP70:%.*]] = bitcast i8** [[TMP69]] to i32**
739*5300263cSJoseph Huber // CHECK-NOUSE-I386-NEXT: store i32* [[A]], i32** [[TMP70]], align 4
740*5300263cSJoseph Huber // CHECK-NOUSE-I386-NEXT: [[TMP71:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_MAPPERS5]], i32 0, i32 0
741*5300263cSJoseph Huber // CHECK-NOUSE-I386-NEXT: store i8* null, i8** [[TMP71]], align 4
742*5300263cSJoseph Huber // CHECK-NOUSE-I386-NEXT: [[TMP72:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS3]], i32 0, i32 0
743*5300263cSJoseph Huber // CHECK-NOUSE-I386-NEXT: [[TMP73:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS4]], i32 0, i32 0
7441fff1166SJoseph Huber // CHECK-NOUSE-I386-NEXT: [[KERNEL_ARGS6:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
745*5300263cSJoseph Huber // CHECK-NOUSE-I386-NEXT: [[TMP74:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS6]], i32 0, i32 0
7461fff1166SJoseph Huber // CHECK-NOUSE-I386-NEXT: store i32 1, i32* [[TMP74]], align 4
747*5300263cSJoseph Huber // CHECK-NOUSE-I386-NEXT: [[TMP75:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS6]], i32 0, i32 1
748*5300263cSJoseph Huber // CHECK-NOUSE-I386-NEXT: store i32 1, i32* [[TMP75]], align 4
749*5300263cSJoseph Huber // CHECK-NOUSE-I386-NEXT: [[TMP76:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS6]], i32 0, i32 2
7501fff1166SJoseph Huber // CHECK-NOUSE-I386-NEXT: store i8** [[TMP72]], i8*** [[TMP76]], align 4
751*5300263cSJoseph Huber // CHECK-NOUSE-I386-NEXT: [[TMP77:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS6]], i32 0, i32 3
752*5300263cSJoseph Huber // CHECK-NOUSE-I386-NEXT: store i8** [[TMP73]], i8*** [[TMP77]], align 4
753*5300263cSJoseph Huber // CHECK-NOUSE-I386-NEXT: [[TMP78:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS6]], i32 0, i32 4
754*5300263cSJoseph Huber // CHECK-NOUSE-I386-NEXT: store i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes.1, i32 0, i32 0), i64** [[TMP78]], align 4
755*5300263cSJoseph Huber // CHECK-NOUSE-I386-NEXT: [[TMP79:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS6]], i32 0, i32 5
756*5300263cSJoseph Huber // CHECK-NOUSE-I386-NEXT: store i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.2, i32 0, i32 0), i64** [[TMP79]], align 4
757*5300263cSJoseph Huber // CHECK-NOUSE-I386-NEXT: [[TMP80:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS6]], i32 0, i32 6
7581fff1166SJoseph Huber // CHECK-NOUSE-I386-NEXT: store i8** null, i8*** [[TMP80]], align 4
759*5300263cSJoseph Huber // CHECK-NOUSE-I386-NEXT: [[TMP81:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS6]], i32 0, i32 7
760*5300263cSJoseph Huber // CHECK-NOUSE-I386-NEXT: store i8** null, i8*** [[TMP81]], align 4
761*5300263cSJoseph Huber // CHECK-NOUSE-I386-NEXT: [[TMP82:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS6]], i32 0, i32 8
762*5300263cSJoseph Huber // CHECK-NOUSE-I386-NEXT: store i64 0, i64* [[TMP82]], align 8
763*5300263cSJoseph Huber // CHECK-NOUSE-I386-NEXT: [[TMP83:%.*]] = call i32 @__tgt_target_kernel(%struct.ident_t* @[[GLOB1]], i64 -1, i32 -1, i32 0, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z20explicit_maps_singlei_l796.region_id, %struct.__tgt_kernel_arguments* [[KERNEL_ARGS6]])
764*5300263cSJoseph Huber // CHECK-NOUSE-I386-NEXT: [[TMP84:%.*]] = icmp ne i32 [[TMP83]], 0
765*5300263cSJoseph Huber // CHECK-NOUSE-I386-NEXT: br i1 [[TMP84]], label [[OMP_OFFLOAD_FAILED7:%.*]], label [[OMP_OFFLOAD_CONT8:%.*]]
7661fff1166SJoseph Huber // CHECK-NOUSE-I386: omp_offload.failed7:
767*5300263cSJoseph Huber // CHECK-NOUSE-I386-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z20explicit_maps_singlei_l796() #[[ATTR3]]
7681fff1166SJoseph Huber // CHECK-NOUSE-I386-NEXT: br label [[OMP_OFFLOAD_CONT8]]
7691fff1166SJoseph Huber // CHECK-NOUSE-I386: omp_offload.cont8:
77083ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: ret void
77183ddfa0dSJoel E. Denny //
explicit_maps_single(int ii)77283ddfa0dSJoel E. Denny void explicit_maps_single(int ii) {
77383ddfa0dSJoel E. Denny
77483ddfa0dSJoel E. Denny // Map of a scalar.
77583ddfa0dSJoel E. Denny int a = ii;
77683ddfa0dSJoel E. Denny
77783ddfa0dSJoel E. Denny struct ST st1;
77883ddfa0dSJoel E. Denny struct ST st2;
77983ddfa0dSJoel E. Denny
78083ddfa0dSJoel E. Denny // Make sure the struct picks up ompx_hold even if another element of the
78183ddfa0dSJoel E. Denny // struct doesn't have ompx_hold.
78283ddfa0dSJoel E. Denny #pragma omp target map(tofrom : st1.i) \
78383ddfa0dSJoel E. Denny map(ompx_hold, tofrom : a, st1.j, st2.i) \
78483ddfa0dSJoel E. Denny map(tofrom : st2.j)
78583ddfa0dSJoel E. Denny {
78683ddfa0dSJoel E. Denny #ifdef USE
78783ddfa0dSJoel E. Denny st1.i++;
78883ddfa0dSJoel E. Denny a++;
78983ddfa0dSJoel E. Denny st1.j++;
79083ddfa0dSJoel E. Denny st2.i++;
79183ddfa0dSJoel E. Denny st2.j++;
79283ddfa0dSJoel E. Denny #endif
79383ddfa0dSJoel E. Denny }
79483ddfa0dSJoel E. Denny
79583ddfa0dSJoel E. Denny // Always Close Hold.
79683ddfa0dSJoel E. Denny #pragma omp target map(always close ompx_hold tofrom: a)
79783ddfa0dSJoel E. Denny {
79883ddfa0dSJoel E. Denny #ifdef USE
79983ddfa0dSJoel E. Denny a++;
80083ddfa0dSJoel E. Denny #endif
80183ddfa0dSJoel E. Denny }
80283ddfa0dSJoel E. Denny }
80383ddfa0dSJoel E. Denny
80483ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-LABEL: @_ZN2ST20test_present_membersEv(
80583ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: entry:
80683ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[THIS_ADDR:%.*]] = alloca %struct.ST*, align 8
80783ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [3 x i8*], align 8
80883ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [3 x i8*], align 8
80983ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [3 x i8*], align 8
810ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [3 x i64], align 8
81183ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: store %struct.ST* [[THIS:%.*]], %struct.ST** [[THIS_ADDR]], align 8
81283ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[THIS1:%.*]] = load %struct.ST*, %struct.ST** [[THIS_ADDR]], align 8
81383ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[I:%.*]] = getelementptr inbounds [[STRUCT_ST:%.*]], %struct.ST* [[THIS1]], i32 0, i32 0
81483ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[J:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[THIS1]], i32 0, i32 1
81583ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP0:%.*]] = getelementptr i32, i32* [[J]], i32 1
81683ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP1:%.*]] = bitcast i32* [[I]] to i8*
81783ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP2:%.*]] = bitcast i32* [[TMP0]] to i8*
81883ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP3:%.*]] = ptrtoint i8* [[TMP2]] to i64
81983ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP4:%.*]] = ptrtoint i8* [[TMP1]] to i64
82083ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP5:%.*]] = sub i64 [[TMP3]], [[TMP4]]
82183ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: [[TMP6:%.*]] = sdiv exact i64 [[TMP5]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64)
822d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP7:%.*]] = bitcast [3 x i64]* [[DOTOFFLOAD_SIZES]] to i8*
823d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 [[TMP7]], i8* align 8 bitcast ([3 x i64]* @.offload_sizes.3 to i8*), i64 24, i1 false)
824d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP8:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
825d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP9:%.*]] = bitcast i8** [[TMP8]] to %struct.ST**
826d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store %struct.ST* [[THIS1]], %struct.ST** [[TMP9]], align 8
827d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP10:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
828d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP11:%.*]] = bitcast i8** [[TMP10]] to i32**
829d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i32* [[I]], i32** [[TMP11]], align 8
830d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP12:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
831d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i64 [[TMP6]], i64* [[TMP12]], align 8
832d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP13:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
833d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i8* null, i8** [[TMP13]], align 8
834d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP14:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
835d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP15:%.*]] = bitcast i8** [[TMP14]] to %struct.ST**
836d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store %struct.ST* [[THIS1]], %struct.ST** [[TMP15]], align 8
837d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP16:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
838d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP17:%.*]] = bitcast i8** [[TMP16]] to i32**
839d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i32* [[I]], i32** [[TMP17]], align 8
840ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP18:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1
841ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i8* null, i8** [[TMP18]], align 8
842ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP19:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
843ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP20:%.*]] = bitcast i8** [[TMP19]] to %struct.ST**
844ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store %struct.ST* [[THIS1]], %struct.ST** [[TMP20]], align 8
845ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP21:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
846ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP22:%.*]] = bitcast i8** [[TMP21]] to i32**
847ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i32* [[J]], i32** [[TMP22]], align 8
848d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP23:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2
849d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: store i8* null, i8** [[TMP23]], align 8
850d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP24:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
851d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP25:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
852d04d9220SAlexey Bataev // CHECK-USE-PPC64LE-NEXT: [[TMP26:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
8531fff1166SJoseph Huber // CHECK-USE-PPC64LE-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8
8541fff1166SJoseph Huber // CHECK-USE-PPC64LE-NEXT: [[TMP27:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]], i32 0, i32 0
8551fff1166SJoseph Huber // CHECK-USE-PPC64LE-NEXT: store i32 1, i32* [[TMP27]], align 4
8561fff1166SJoseph Huber // CHECK-USE-PPC64LE-NEXT: [[TMP28:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]], i32 0, i32 1
8571fff1166SJoseph Huber // CHECK-USE-PPC64LE-NEXT: store i32 3, i32* [[TMP28]], align 4
8581fff1166SJoseph Huber // CHECK-USE-PPC64LE-NEXT: [[TMP29:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]], i32 0, i32 2
8591fff1166SJoseph Huber // CHECK-USE-PPC64LE-NEXT: store i8** [[TMP24]], i8*** [[TMP29]], align 8
8601fff1166SJoseph Huber // CHECK-USE-PPC64LE-NEXT: [[TMP30:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]], i32 0, i32 3
8611fff1166SJoseph Huber // CHECK-USE-PPC64LE-NEXT: store i8** [[TMP25]], i8*** [[TMP30]], align 8
8621fff1166SJoseph Huber // CHECK-USE-PPC64LE-NEXT: [[TMP31:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]], i32 0, i32 4
8631fff1166SJoseph Huber // CHECK-USE-PPC64LE-NEXT: store i64* [[TMP26]], i64** [[TMP31]], align 8
8641fff1166SJoseph Huber // CHECK-USE-PPC64LE-NEXT: [[TMP32:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]], i32 0, i32 5
8651fff1166SJoseph Huber // CHECK-USE-PPC64LE-NEXT: store i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes.4, i32 0, i32 0), i64** [[TMP32]], align 8
8661fff1166SJoseph Huber // CHECK-USE-PPC64LE-NEXT: [[TMP33:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]], i32 0, i32 6
8671fff1166SJoseph Huber // CHECK-USE-PPC64LE-NEXT: store i8** null, i8*** [[TMP33]], align 8
8681fff1166SJoseph Huber // CHECK-USE-PPC64LE-NEXT: [[TMP34:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]], i32 0, i32 7
8691fff1166SJoseph Huber // CHECK-USE-PPC64LE-NEXT: store i8** null, i8*** [[TMP34]], align 8
870*5300263cSJoseph Huber // CHECK-USE-PPC64LE-NEXT: [[TMP35:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]], i32 0, i32 8
871*5300263cSJoseph Huber // CHECK-USE-PPC64LE-NEXT: store i64 0, i64* [[TMP35]], align 8
872*5300263cSJoseph Huber // CHECK-USE-PPC64LE-NEXT: [[TMP36:%.*]] = call i32 @__tgt_target_kernel(%struct.ident_t* @[[GLOB1]], i64 -1, i32 -1, i32 0, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2ST20test_present_membersEv_l1115.region_id, %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]])
873*5300263cSJoseph Huber // CHECK-USE-PPC64LE-NEXT: [[TMP37:%.*]] = icmp ne i32 [[TMP36]], 0
874*5300263cSJoseph Huber // CHECK-USE-PPC64LE-NEXT: br i1 [[TMP37]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
87583ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE: omp_offload.failed:
876*5300263cSJoseph Huber // CHECK-USE-PPC64LE-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2ST20test_present_membersEv_l1115(%struct.ST* [[THIS1]]) #[[ATTR3]]
87783ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: br label [[OMP_OFFLOAD_CONT]]
87883ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE: omp_offload.cont:
87983ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT: ret void
88083ddfa0dSJoel E. Denny //
88183ddfa0dSJoel E. Denny // CHECK-USE-I386-LABEL: @_ZN2ST20test_present_membersEv(
88283ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: entry:
88383ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[THIS_ADDR:%.*]] = alloca %struct.ST*, align 4
88483ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [3 x i8*], align 4
88583ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [3 x i8*], align 4
88683ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [3 x i8*], align 4
887ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [3 x i64], align 4
88883ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: store %struct.ST* [[THIS:%.*]], %struct.ST** [[THIS_ADDR]], align 4
88983ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[THIS1:%.*]] = load %struct.ST*, %struct.ST** [[THIS_ADDR]], align 4
89083ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[I:%.*]] = getelementptr inbounds [[STRUCT_ST:%.*]], %struct.ST* [[THIS1]], i32 0, i32 0
89183ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[J:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[THIS1]], i32 0, i32 1
89283ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP0:%.*]] = getelementptr i32, i32* [[J]], i32 1
89383ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP1:%.*]] = bitcast i32* [[I]] to i8*
89483ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP2:%.*]] = bitcast i32* [[TMP0]] to i8*
89583ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP3:%.*]] = ptrtoint i8* [[TMP2]] to i64
89683ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP4:%.*]] = ptrtoint i8* [[TMP1]] to i64
89783ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP5:%.*]] = sub i64 [[TMP3]], [[TMP4]]
89883ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: [[TMP6:%.*]] = sdiv exact i64 [[TMP5]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64)
899d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP7:%.*]] = bitcast [3 x i64]* [[DOTOFFLOAD_SIZES]] to i8*
900d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 4 [[TMP7]], i8* align 4 bitcast ([3 x i64]* @.offload_sizes.3 to i8*), i32 24, i1 false)
901d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP8:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
902d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP9:%.*]] = bitcast i8** [[TMP8]] to %struct.ST**
903d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store %struct.ST* [[THIS1]], %struct.ST** [[TMP9]], align 4
904d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP10:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
905d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP11:%.*]] = bitcast i8** [[TMP10]] to i32**
906d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store i32* [[I]], i32** [[TMP11]], align 4
907d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP12:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
908d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store i64 [[TMP6]], i64* [[TMP12]], align 4
909d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP13:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
910d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store i8* null, i8** [[TMP13]], align 4
911d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP14:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
912d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP15:%.*]] = bitcast i8** [[TMP14]] to %struct.ST**
913d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store %struct.ST* [[THIS1]], %struct.ST** [[TMP15]], align 4
914d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP16:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
915d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP17:%.*]] = bitcast i8** [[TMP16]] to i32**
916d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store i32* [[I]], i32** [[TMP17]], align 4
917ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP18:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1
918ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: store i8* null, i8** [[TMP18]], align 4
919ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP19:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
920ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP20:%.*]] = bitcast i8** [[TMP19]] to %struct.ST**
921ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: store %struct.ST* [[THIS1]], %struct.ST** [[TMP20]], align 4
922ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP21:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
923ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP22:%.*]] = bitcast i8** [[TMP21]] to i32**
924ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT: store i32* [[J]], i32** [[TMP22]], align 4
925d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP23:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2
926d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: store i8* null, i8** [[TMP23]], align 4
927d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP24:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
928d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP25:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
929d04d9220SAlexey Bataev // CHECK-USE-I386-NEXT: [[TMP26:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
9301fff1166SJoseph Huber // CHECK-USE-I386-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8
9311fff1166SJoseph Huber // CHECK-USE-I386-NEXT: [[TMP27:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]], i32 0, i32 0
9321fff1166SJoseph Huber // CHECK-USE-I386-NEXT: store i32 1, i32* [[TMP27]], align 4
9331fff1166SJoseph Huber // CHECK-USE-I386-NEXT: [[TMP28:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]], i32 0, i32 1
9341fff1166SJoseph Huber // CHECK-USE-I386-NEXT: store i32 3, i32* [[TMP28]], align 4
9351fff1166SJoseph Huber // CHECK-USE-I386-NEXT: [[TMP29:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]], i32 0, i32 2
9361fff1166SJoseph Huber // CHECK-USE-I386-NEXT: store i8** [[TMP24]], i8*** [[TMP29]], align 4
9371fff1166SJoseph Huber // CHECK-USE-I386-NEXT: [[TMP30:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]], i32 0, i32 3
9381fff1166SJoseph Huber // CHECK-USE-I386-NEXT: store i8** [[TMP25]], i8*** [[TMP30]], align 4
9391fff1166SJoseph Huber // CHECK-USE-I386-NEXT: [[TMP31:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]], i32 0, i32 4
9401fff1166SJoseph Huber // CHECK-USE-I386-NEXT: store i64* [[TMP26]], i64** [[TMP31]], align 4
9411fff1166SJoseph Huber // CHECK-USE-I386-NEXT: [[TMP32:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]], i32 0, i32 5
9421fff1166SJoseph Huber // CHECK-USE-I386-NEXT: store i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes.4, i32 0, i32 0), i64** [[TMP32]], align 4
9431fff1166SJoseph Huber // CHECK-USE-I386-NEXT: [[TMP33:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]], i32 0, i32 6
9441fff1166SJoseph Huber // CHECK-USE-I386-NEXT: store i8** null, i8*** [[TMP33]], align 4
9451fff1166SJoseph Huber // CHECK-USE-I386-NEXT: [[TMP34:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]], i32 0, i32 7
9461fff1166SJoseph Huber // CHECK-USE-I386-NEXT: store i8** null, i8*** [[TMP34]], align 4
947*5300263cSJoseph Huber // CHECK-USE-I386-NEXT: [[TMP35:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]], i32 0, i32 8
948*5300263cSJoseph Huber // CHECK-USE-I386-NEXT: store i64 0, i64* [[TMP35]], align 8
949*5300263cSJoseph Huber // CHECK-USE-I386-NEXT: [[TMP36:%.*]] = call i32 @__tgt_target_kernel(%struct.ident_t* @[[GLOB1]], i64 -1, i32 -1, i32 0, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2ST20test_present_membersEv_l1115.region_id, %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]])
950*5300263cSJoseph Huber // CHECK-USE-I386-NEXT: [[TMP37:%.*]] = icmp ne i32 [[TMP36]], 0
951*5300263cSJoseph Huber // CHECK-USE-I386-NEXT: br i1 [[TMP37]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
95283ddfa0dSJoel E. Denny // CHECK-USE-I386: omp_offload.failed:
953*5300263cSJoseph Huber // CHECK-USE-I386-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2ST20test_present_membersEv_l1115(%struct.ST* [[THIS1]]) #[[ATTR3]]
95483ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: br label [[OMP_OFFLOAD_CONT]]
95583ddfa0dSJoel E. Denny // CHECK-USE-I386: omp_offload.cont:
95683ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT: ret void
95783ddfa0dSJoel E. Denny //
95883ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-LABEL: @_ZN2ST20test_present_membersEv(
95983ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: entry:
96083ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[THIS_ADDR:%.*]] = alloca %struct.ST*, align 8
96183ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [3 x i8*], align 8
96283ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [3 x i8*], align 8
96383ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [3 x i8*], align 8
964ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [3 x i64], align 8
96583ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: store %struct.ST* [[THIS:%.*]], %struct.ST** [[THIS_ADDR]], align 8
96683ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[THIS1:%.*]] = load %struct.ST*, %struct.ST** [[THIS_ADDR]], align 8
96783ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[I:%.*]] = getelementptr inbounds [[STRUCT_ST:%.*]], %struct.ST* [[THIS1]], i32 0, i32 0
96883ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[J:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[THIS1]], i32 0, i32 1
96983ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP0:%.*]] = getelementptr i32, i32* [[J]], i32 1
97083ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP1:%.*]] = bitcast i32* [[I]] to i8*
97183ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP2:%.*]] = bitcast i32* [[TMP0]] to i8*
97283ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP3:%.*]] = ptrtoint i8* [[TMP2]] to i64
97383ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP4:%.*]] = ptrtoint i8* [[TMP1]] to i64
97483ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP5:%.*]] = sub i64 [[TMP3]], [[TMP4]]
97583ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: [[TMP6:%.*]] = sdiv exact i64 [[TMP5]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64)
976d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP7:%.*]] = bitcast [3 x i64]* [[DOTOFFLOAD_SIZES]] to i8*
977d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 [[TMP7]], i8* align 8 bitcast ([3 x i64]* @.offload_sizes.3 to i8*), i64 24, i1 false)
978d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP8:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
979d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP9:%.*]] = bitcast i8** [[TMP8]] to %struct.ST**
980d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store %struct.ST* [[THIS1]], %struct.ST** [[TMP9]], align 8
981d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP10:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
982d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP11:%.*]] = bitcast i8** [[TMP10]] to i32**
983d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i32* [[I]], i32** [[TMP11]], align 8
984d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP12:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
985d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i64 [[TMP6]], i64* [[TMP12]], align 8
986d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP13:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
987d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i8* null, i8** [[TMP13]], align 8
988d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP14:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
989d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP15:%.*]] = bitcast i8** [[TMP14]] to %struct.ST**
990d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store %struct.ST* [[THIS1]], %struct.ST** [[TMP15]], align 8
991d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP16:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
992d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP17:%.*]] = bitcast i8** [[TMP16]] to i32**
993d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i32* [[I]], i32** [[TMP17]], align 8
994ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP18:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1
995ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i8* null, i8** [[TMP18]], align 8
996ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP19:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
997ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP20:%.*]] = bitcast i8** [[TMP19]] to %struct.ST**
998ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store %struct.ST* [[THIS1]], %struct.ST** [[TMP20]], align 8
999ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP21:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
1000ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP22:%.*]] = bitcast i8** [[TMP21]] to i32**
1001ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i32* [[J]], i32** [[TMP22]], align 8
1002d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP23:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2
1003d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: store i8* null, i8** [[TMP23]], align 8
1004d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP24:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
1005d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP25:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
1006d04d9220SAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT: [[TMP26:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
10071fff1166SJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8
10081fff1166SJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: [[TMP27:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]], i32 0, i32 0
10091fff1166SJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: store i32 1, i32* [[TMP27]], align 4
10101fff1166SJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: [[TMP28:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]], i32 0, i32 1
10111fff1166SJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: store i32 3, i32* [[TMP28]], align 4
10121fff1166SJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: [[TMP29:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]], i32 0, i32 2
10131fff1166SJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: store i8** [[TMP24]], i8*** [[TMP29]], align 8
10141fff1166SJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: [[TMP30:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]], i32 0, i32 3
10151fff1166SJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: store i8** [[TMP25]], i8*** [[TMP30]], align 8
10161fff1166SJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: [[TMP31:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]], i32 0, i32 4
10171fff1166SJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: store i64* [[TMP26]], i64** [[TMP31]], align 8
10181fff1166SJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: [[TMP32:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]], i32 0, i32 5
10191fff1166SJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: store i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes.4, i32 0, i32 0), i64** [[TMP32]], align 8
10201fff1166SJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: [[TMP33:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]], i32 0, i32 6
10211fff1166SJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: store i8** null, i8*** [[TMP33]], align 8
10221fff1166SJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: [[TMP34:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]], i32 0, i32 7
10231fff1166SJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: store i8** null, i8*** [[TMP34]], align 8
1024*5300263cSJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: [[TMP35:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]], i32 0, i32 8
1025*5300263cSJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: store i64 0, i64* [[TMP35]], align 8
1026*5300263cSJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: [[TMP36:%.*]] = call i32 @__tgt_target_kernel(%struct.ident_t* @[[GLOB1]], i64 -1, i32 -1, i32 0, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2ST20test_present_membersEv_l1115.region_id, %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]])
1027*5300263cSJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: [[TMP37:%.*]] = icmp ne i32 [[TMP36]], 0
1028*5300263cSJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: br i1 [[TMP37]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
102983ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE: omp_offload.failed:
1030*5300263cSJoseph Huber // CHECK-NOUSE-PPC64LE-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2ST20test_present_membersEv_l1115() #[[ATTR3]]
103183ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: br label [[OMP_OFFLOAD_CONT]]
103283ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE: omp_offload.cont:
103383ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT: ret void
103483ddfa0dSJoel E. Denny //
103583ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-LABEL: @_ZN2ST20test_present_membersEv(
103683ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: entry:
103783ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[THIS_ADDR:%.*]] = alloca %struct.ST*, align 4
103883ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [3 x i8*], align 4
103983ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [3 x i8*], align 4
104083ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [3 x i8*], align 4
1041ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [3 x i64], align 4
104283ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: store %struct.ST* [[THIS:%.*]], %struct.ST** [[THIS_ADDR]], align 4
104383ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[THIS1:%.*]] = load %struct.ST*, %struct.ST** [[THIS_ADDR]], align 4
104483ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[I:%.*]] = getelementptr inbounds [[STRUCT_ST:%.*]], %struct.ST* [[THIS1]], i32 0, i32 0
104583ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[J:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[THIS1]], i32 0, i32 1
104683ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP0:%.*]] = getelementptr i32, i32* [[J]], i32 1
104783ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP1:%.*]] = bitcast i32* [[I]] to i8*
104883ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP2:%.*]] = bitcast i32* [[TMP0]] to i8*
104983ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP3:%.*]] = ptrtoint i8* [[TMP2]] to i64
105083ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP4:%.*]] = ptrtoint i8* [[TMP1]] to i64
105183ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP5:%.*]] = sub i64 [[TMP3]], [[TMP4]]
105283ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: [[TMP6:%.*]] = sdiv exact i64 [[TMP5]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64)
1053d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP7:%.*]] = bitcast [3 x i64]* [[DOTOFFLOAD_SIZES]] to i8*
1054d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 4 [[TMP7]], i8* align 4 bitcast ([3 x i64]* @.offload_sizes.3 to i8*), i32 24, i1 false)
1055d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP8:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
1056d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP9:%.*]] = bitcast i8** [[TMP8]] to %struct.ST**
1057d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store %struct.ST* [[THIS1]], %struct.ST** [[TMP9]], align 4
1058d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP10:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
1059d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP11:%.*]] = bitcast i8** [[TMP10]] to i32**
1060d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i32* [[I]], i32** [[TMP11]], align 4
1061d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP12:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
1062d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i64 [[TMP6]], i64* [[TMP12]], align 4
1063d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP13:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
1064d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i8* null, i8** [[TMP13]], align 4
1065d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP14:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
1066d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP15:%.*]] = bitcast i8** [[TMP14]] to %struct.ST**
1067d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store %struct.ST* [[THIS1]], %struct.ST** [[TMP15]], align 4
1068d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP16:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
1069d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP17:%.*]] = bitcast i8** [[TMP16]] to i32**
1070d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i32* [[I]], i32** [[TMP17]], align 4
1071ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP18:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1
1072ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i8* null, i8** [[TMP18]], align 4
1073ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP19:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
1074ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP20:%.*]] = bitcast i8** [[TMP19]] to %struct.ST**
1075ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: store %struct.ST* [[THIS1]], %struct.ST** [[TMP20]], align 4
1076ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP21:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
1077ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP22:%.*]] = bitcast i8** [[TMP21]] to i32**
1078ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i32* [[J]], i32** [[TMP22]], align 4
1079d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP23:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2
1080d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: store i8* null, i8** [[TMP23]], align 4
1081d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP24:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
1082d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP25:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
1083d04d9220SAlexey Bataev // CHECK-NOUSE-I386-NEXT: [[TMP26:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
10841fff1166SJoseph Huber // CHECK-NOUSE-I386-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8
10851fff1166SJoseph Huber // CHECK-NOUSE-I386-NEXT: [[TMP27:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]], i32 0, i32 0
10861fff1166SJoseph Huber // CHECK-NOUSE-I386-NEXT: store i32 1, i32* [[TMP27]], align 4
10871fff1166SJoseph Huber // CHECK-NOUSE-I386-NEXT: [[TMP28:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]], i32 0, i32 1
10881fff1166SJoseph Huber // CHECK-NOUSE-I386-NEXT: store i32 3, i32* [[TMP28]], align 4
10891fff1166SJoseph Huber // CHECK-NOUSE-I386-NEXT: [[TMP29:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]], i32 0, i32 2
10901fff1166SJoseph Huber // CHECK-NOUSE-I386-NEXT: store i8** [[TMP24]], i8*** [[TMP29]], align 4
10911fff1166SJoseph Huber // CHECK-NOUSE-I386-NEXT: [[TMP30:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]], i32 0, i32 3
10921fff1166SJoseph Huber // CHECK-NOUSE-I386-NEXT: store i8** [[TMP25]], i8*** [[TMP30]], align 4
10931fff1166SJoseph Huber // CHECK-NOUSE-I386-NEXT: [[TMP31:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]], i32 0, i32 4
10941fff1166SJoseph Huber // CHECK-NOUSE-I386-NEXT: store i64* [[TMP26]], i64** [[TMP31]], align 4
10951fff1166SJoseph Huber // CHECK-NOUSE-I386-NEXT: [[TMP32:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]], i32 0, i32 5
10961fff1166SJoseph Huber // CHECK-NOUSE-I386-NEXT: store i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes.4, i32 0, i32 0), i64** [[TMP32]], align 4
10971fff1166SJoseph Huber // CHECK-NOUSE-I386-NEXT: [[TMP33:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]], i32 0, i32 6
10981fff1166SJoseph Huber // CHECK-NOUSE-I386-NEXT: store i8** null, i8*** [[TMP33]], align 4
10991fff1166SJoseph Huber // CHECK-NOUSE-I386-NEXT: [[TMP34:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]], i32 0, i32 7
11001fff1166SJoseph Huber // CHECK-NOUSE-I386-NEXT: store i8** null, i8*** [[TMP34]], align 4
1101*5300263cSJoseph Huber // CHECK-NOUSE-I386-NEXT: [[TMP35:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]], i32 0, i32 8
1102*5300263cSJoseph Huber // CHECK-NOUSE-I386-NEXT: store i64 0, i64* [[TMP35]], align 8
1103*5300263cSJoseph Huber // CHECK-NOUSE-I386-NEXT: [[TMP36:%.*]] = call i32 @__tgt_target_kernel(%struct.ident_t* @[[GLOB1]], i64 -1, i32 -1, i32 0, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2ST20test_present_membersEv_l1115.region_id, %struct.__tgt_kernel_arguments* [[KERNEL_ARGS]])
1104*5300263cSJoseph Huber // CHECK-NOUSE-I386-NEXT: [[TMP37:%.*]] = icmp ne i32 [[TMP36]], 0
1105*5300263cSJoseph Huber // CHECK-NOUSE-I386-NEXT: br i1 [[TMP37]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
110683ddfa0dSJoel E. Denny // CHECK-NOUSE-I386: omp_offload.failed:
1107*5300263cSJoseph Huber // CHECK-NOUSE-I386-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2ST20test_present_membersEv_l1115() #[[ATTR3]]
110883ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: br label [[OMP_OFFLOAD_CONT]]
110983ddfa0dSJoel E. Denny // CHECK-NOUSE-I386: omp_offload.cont:
111083ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT: ret void
111183ddfa0dSJoel E. Denny //
test_present_members()111283ddfa0dSJoel E. Denny void ST::test_present_members() {
111383ddfa0dSJoel E. Denny // Make sure the struct picks up ompx_hold even if another element of the
111483ddfa0dSJoel E. Denny // struct doesn't have ompx_hold.
111583ddfa0dSJoel E. Denny #pragma omp target map(tofrom : i) map(ompx_hold, tofrom : j)
111683ddfa0dSJoel E. Denny {
111783ddfa0dSJoel E. Denny #ifdef USE
111883ddfa0dSJoel E. Denny i++;
111983ddfa0dSJoel E. Denny j++;
112083ddfa0dSJoel E. Denny #endif
112183ddfa0dSJoel E. Denny }
112283ddfa0dSJoel E. Denny }
112383ddfa0dSJoel E. Denny
112483ddfa0dSJoel E. Denny #endif
1125