1*ca6fa71bSAlexey 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]+" --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 
1283ddfa0dSJoel E. Denny // RUN: %clang_cc1 -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
1683ddfa0dSJoel E. Denny // RUN: %clang_cc1 -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
1983ddfa0dSJoel E. Denny // RUN: %clang_cc1 -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 
2783ddfa0dSJoel E. Denny // RUN: %clang_cc1 -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
3183ddfa0dSJoel E. Denny // RUN: %clang_cc1 -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
3483ddfa0dSJoel E. Denny // RUN: %clang_cc1 -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 
4683ddfa0dSJoel E. Denny // RUN: %clang_cc1 -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
5083ddfa0dSJoel E. Denny // RUN: %clang_cc1 -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
5383ddfa0dSJoel E. Denny // RUN: %clang_cc1 -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 
6183ddfa0dSJoel E. Denny // RUN: %clang_cc1 -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
6583ddfa0dSJoel E. Denny // RUN: %clang_cc1 -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
6883ddfa0dSJoel E. Denny // RUN: %clang_cc1 -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 //.
8683ddfa0dSJoel 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]]]
87*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE: @.offload_sizes = private unnamed_addr constant [1 x i64] [i64 4]
88*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE: @.offload_maptypes.1 = private unnamed_addr constant [1 x i64] [i64 [[#0x2427]]]
89*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE: @.offload_maptypes.2 = private unnamed_addr constant [3 x i64] [i64 [[#0x2020]], i64 [[#0x1000000002003]], i64 [[#0x1000000002003]]]
9083ddfa0dSJoel E. Denny //.
9183ddfa0dSJoel 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]]]
92*ca6fa71bSAlexey Bataev // CHECK-USE-I386: @.offload_sizes = private unnamed_addr constant [1 x i64] [i64 4]
93*ca6fa71bSAlexey Bataev // CHECK-USE-I386: @.offload_maptypes.1 = private unnamed_addr constant [1 x i64] [i64 [[#0x2427]]]
94*ca6fa71bSAlexey Bataev // CHECK-USE-I386: @.offload_maptypes.2 = private unnamed_addr constant [3 x i64] [i64 [[#0x2020]], i64 [[#0x1000000002003]], i64 [[#0x1000000002003]]]
9583ddfa0dSJoel E. Denny //.
9683ddfa0dSJoel 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]]]
97*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE: @.offload_sizes = private unnamed_addr constant [1 x i64] [i64 4]
98*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE: @.offload_maptypes.1 = private unnamed_addr constant [1 x i64] [i64 [[#0x2407]]]
99*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE: @.offload_maptypes.2 = private unnamed_addr constant [3 x i64] [i64 [[#0x2000]], i64 [[#0x1000000002003]], i64 [[#0x1000000002003]]]
10083ddfa0dSJoel E. Denny //.
10183ddfa0dSJoel 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]]]
102*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386: @.offload_sizes = private unnamed_addr constant [1 x i64] [i64 4]
103*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386: @.offload_maptypes.1 = private unnamed_addr constant [1 x i64] [i64 [[#0x2407]]]
104*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386: @.offload_maptypes.2 = private unnamed_addr constant [3 x i64] [i64 [[#0x2000]], i64 [[#0x1000000002003]], i64 [[#0x1000000002003]]]
10583ddfa0dSJoel E. Denny //.
10683ddfa0dSJoel E. Denny struct ST {
10783ddfa0dSJoel E. Denny   int i;
10883ddfa0dSJoel E. Denny   int j;
10983ddfa0dSJoel E. Denny   void test_present_members();
11083ddfa0dSJoel E. Denny };
11183ddfa0dSJoel E. Denny 
11283ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-LABEL: @_Z20explicit_maps_singlei(
11383ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:  entry:
11483ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[II_ADDR:%.*]] = alloca i32, align 4
11583ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[A:%.*]] = alloca i32, align 4
11683ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[ST1:%.*]] = alloca [[STRUCT_ST:%.*]], align 4
11783ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[ST2:%.*]] = alloca [[STRUCT_ST]], align 4
11883ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [7 x i8*], align 8
11983ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[DOTOFFLOAD_PTRS:%.*]] = alloca [7 x i8*], align 8
12083ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [7 x i8*], align 8
121*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    [[DOTOFFLOAD_SIZES:%.*]] = alloca [7 x i64], align 8
12283ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[DOTOFFLOAD_BASEPTRS3:%.*]] = alloca [1 x i8*], align 8
12383ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[DOTOFFLOAD_PTRS4:%.*]] = alloca [1 x i8*], align 8
12483ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[DOTOFFLOAD_MAPPERS5:%.*]] = alloca [1 x i8*], align 8
12583ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    store i32 [[II:%.*]], i32* [[II_ADDR]], align 4
12683ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP0:%.*]] = load i32, i32* [[II_ADDR]], align 4
12783ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    store i32 [[TMP0]], i32* [[A]], align 4
12883ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[I:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST1]], i32 0, i32 0
12983ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[J:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST1]], i32 0, i32 1
13083ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP1:%.*]] = getelementptr i32, i32* [[J]], i32 1
13183ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP2:%.*]] = bitcast i32* [[I]] to i8*
13283ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP3:%.*]] = bitcast i32* [[TMP1]] to i8*
13383ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP4:%.*]] = ptrtoint i8* [[TMP3]] to i64
13483ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP5:%.*]] = ptrtoint i8* [[TMP2]] to i64
13583ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP6:%.*]] = sub i64 [[TMP4]], [[TMP5]]
13683ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP7:%.*]] = sdiv exact i64 [[TMP6]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64)
13783ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[I1:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST2]], i32 0, i32 0
13883ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[J2:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST2]], i32 0, i32 1
13983ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP8:%.*]] = getelementptr i32, i32* [[J2]], i32 1
14083ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP9:%.*]] = bitcast i32* [[I1]] to i8*
14183ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP10:%.*]] = bitcast i32* [[TMP8]] to i8*
14283ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP11:%.*]] = ptrtoint i8* [[TMP10]] to i64
14383ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP12:%.*]] = ptrtoint i8* [[TMP9]] to i64
14483ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP13:%.*]] = sub i64 [[TMP11]], [[TMP12]]
14583ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP14:%.*]] = sdiv exact i64 [[TMP13]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64)
14683ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP15:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
14783ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP16:%.*]] = bitcast i8** [[TMP15]] to %struct.ST**
14883ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    store %struct.ST* [[ST1]], %struct.ST** [[TMP16]], align 8
14983ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP17:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
15083ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP18:%.*]] = bitcast i8** [[TMP17]] to i32**
15183ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    store i32* [[I]], i32** [[TMP18]], align 8
152*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    [[TMP19:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
153*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    store i64 [[TMP7]], i64* [[TMP19]], align 8
154*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    [[TMP20:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
155*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    store i8* null, i8** [[TMP20]], align 8
156*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    [[TMP21:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
157*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    [[TMP22:%.*]] = bitcast i8** [[TMP21]] to %struct.ST**
158*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    store %struct.ST* [[ST1]], %struct.ST** [[TMP22]], align 8
159*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    [[TMP23:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
160*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    [[TMP24:%.*]] = bitcast i8** [[TMP23]] to i32**
161*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    store i32* [[I]], i32** [[TMP24]], align 8
162*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    [[TMP25:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
163*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    store i64 4, i64* [[TMP25]], align 8
164*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    [[TMP26:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1
165*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    store i8* null, i8** [[TMP26]], align 8
166*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    [[TMP27:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
167*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    [[TMP28:%.*]] = bitcast i8** [[TMP27]] to %struct.ST**
168*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    store %struct.ST* [[ST1]], %struct.ST** [[TMP28]], align 8
169*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    [[TMP29:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
170*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    [[TMP30:%.*]] = bitcast i8** [[TMP29]] to i32**
171*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    store i32* [[J]], i32** [[TMP30]], align 8
172*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    [[TMP31:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
173*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    store i64 4, i64* [[TMP31]], align 8
174*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    [[TMP32:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2
175*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    store i8* null, i8** [[TMP32]], align 8
176*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    [[TMP33:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
177*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    [[TMP34:%.*]] = bitcast i8** [[TMP33]] to i32**
178*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    store i32* [[A]], i32** [[TMP34]], align 8
179*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    [[TMP35:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
180*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    [[TMP36:%.*]] = bitcast i8** [[TMP35]] to i32**
181*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    store i32* [[A]], i32** [[TMP36]], align 8
182*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    [[TMP37:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 3
183*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    store i64 4, i64* [[TMP37]], align 8
184*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    [[TMP38:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 3
185*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    store i8* null, i8** [[TMP38]], align 8
186*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    [[TMP39:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
187*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    [[TMP40:%.*]] = bitcast i8** [[TMP39]] to %struct.ST**
188*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    store %struct.ST* [[ST2]], %struct.ST** [[TMP40]], align 8
189*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    [[TMP41:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
190*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    [[TMP42:%.*]] = bitcast i8** [[TMP41]] to i32**
191*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    store i32* [[I1]], i32** [[TMP42]], align 8
192*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    [[TMP43:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 4
193*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    store i64 [[TMP14]], i64* [[TMP43]], align 8
194*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    [[TMP44:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 4
19583ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    store i8* null, i8** [[TMP44]], align 8
196*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    [[TMP45:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 5
19783ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP46:%.*]] = bitcast i8** [[TMP45]] to %struct.ST**
19883ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    store %struct.ST* [[ST2]], %struct.ST** [[TMP46]], align 8
199*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    [[TMP47:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 5
20083ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP48:%.*]] = bitcast i8** [[TMP47]] to i32**
201*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    store i32* [[I1]], i32** [[TMP48]], align 8
202*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    [[TMP49:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 5
203*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    store i64 4, i64* [[TMP49]], align 8
204*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    [[TMP50:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 5
205*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    store i8* null, i8** [[TMP50]], align 8
206*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    [[TMP51:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 6
207*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    [[TMP52:%.*]] = bitcast i8** [[TMP51]] to %struct.ST**
208*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    store %struct.ST* [[ST2]], %struct.ST** [[TMP52]], align 8
209*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    [[TMP53:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 6
210*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    [[TMP54:%.*]] = bitcast i8** [[TMP53]] to i32**
211*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    store i32* [[J2]], i32** [[TMP54]], align 8
212*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    [[TMP55:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 6
213*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    store i64 4, i64* [[TMP55]], align 8
214*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    [[TMP56:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 6
215*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    store i8* null, i8** [[TMP56]], align 8
216*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    [[TMP57:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
217*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    [[TMP58:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
218*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    [[TMP59:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
219*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    [[TMP60:%.*]] = call i32 @__tgt_target_mapper(%struct.ident_t* @[[GLOB1:[0-9]+]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z20explicit_maps_singlei_l654.region_id, i32 7, i8** [[TMP57]], i8** [[TMP58]], i64* [[TMP59]], i64* getelementptr inbounds ([7 x i64], [7 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null)
220*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    [[TMP61:%.*]] = icmp ne i32 [[TMP60]], 0
221*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    br i1 [[TMP61]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
22283ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE:       omp_offload.failed:
223*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z20explicit_maps_singlei_l654(%struct.ST* [[ST1]], i32* [[A]], %struct.ST* [[ST2]]) #[[ATTR2:[0-9]+]]
22483ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    br label [[OMP_OFFLOAD_CONT]]
22583ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE:       omp_offload.cont:
226*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    [[TMP62:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS3]], i32 0, i32 0
227*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    [[TMP63:%.*]] = bitcast i8** [[TMP62]] to i32**
228*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    store i32* [[A]], i32** [[TMP63]], align 8
229*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    [[TMP64:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS4]], i32 0, i32 0
230*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    [[TMP65:%.*]] = bitcast i8** [[TMP64]] to i32**
231*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    store i32* [[A]], i32** [[TMP65]], align 8
232*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    [[TMP66:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_MAPPERS5]], i64 0, i64 0
233*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    store i8* null, i8** [[TMP66]], align 8
234*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    [[TMP67:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS3]], i32 0, i32 0
235*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    [[TMP68:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS4]], i32 0, i32 0
236*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    [[TMP69:%.*]] = call i32 @__tgt_target_mapper(%struct.ident_t* @[[GLOB1]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z20explicit_maps_singlei_l668.region_id, i32 1, i8** [[TMP67]], i8** [[TMP68]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.1, i32 0, i32 0), i8** null, i8** null)
237*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    [[TMP70:%.*]] = icmp ne i32 [[TMP69]], 0
238*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    br i1 [[TMP70]], label [[OMP_OFFLOAD_FAILED6:%.*]], label [[OMP_OFFLOAD_CONT7:%.*]]
23983ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE:       omp_offload.failed6:
240*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z20explicit_maps_singlei_l668(i32* [[A]]) #[[ATTR2]]
24183ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    br label [[OMP_OFFLOAD_CONT7]]
24283ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE:       omp_offload.cont7:
24383ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    ret void
24483ddfa0dSJoel E. Denny //
24583ddfa0dSJoel E. Denny // CHECK-USE-I386-LABEL: @_Z20explicit_maps_singlei(
24683ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:  entry:
24783ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[II_ADDR:%.*]] = alloca i32, align 4
24883ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[A:%.*]] = alloca i32, align 4
24983ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[ST1:%.*]] = alloca [[STRUCT_ST:%.*]], align 4
25083ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[ST2:%.*]] = alloca [[STRUCT_ST]], align 4
25183ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [7 x i8*], align 4
25283ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[DOTOFFLOAD_PTRS:%.*]] = alloca [7 x i8*], align 4
25383ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [7 x i8*], align 4
254*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    [[DOTOFFLOAD_SIZES:%.*]] = alloca [7 x i64], align 4
25583ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[DOTOFFLOAD_BASEPTRS3:%.*]] = alloca [1 x i8*], align 4
25683ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[DOTOFFLOAD_PTRS4:%.*]] = alloca [1 x i8*], align 4
25783ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[DOTOFFLOAD_MAPPERS5:%.*]] = alloca [1 x i8*], align 4
25883ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    store i32 [[II:%.*]], i32* [[II_ADDR]], align 4
25983ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP0:%.*]] = load i32, i32* [[II_ADDR]], align 4
26083ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    store i32 [[TMP0]], i32* [[A]], align 4
26183ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[I:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST1]], i32 0, i32 0
26283ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[J:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST1]], i32 0, i32 1
26383ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP1:%.*]] = getelementptr i32, i32* [[J]], i32 1
26483ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP2:%.*]] = bitcast i32* [[I]] to i8*
26583ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP3:%.*]] = bitcast i32* [[TMP1]] to i8*
26683ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP4:%.*]] = ptrtoint i8* [[TMP3]] to i64
26783ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP5:%.*]] = ptrtoint i8* [[TMP2]] to i64
26883ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP6:%.*]] = sub i64 [[TMP4]], [[TMP5]]
26983ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP7:%.*]] = sdiv exact i64 [[TMP6]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64)
27083ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[I1:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST2]], i32 0, i32 0
27183ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[J2:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST2]], i32 0, i32 1
27283ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP8:%.*]] = getelementptr i32, i32* [[J2]], i32 1
27383ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP9:%.*]] = bitcast i32* [[I1]] to i8*
27483ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP10:%.*]] = bitcast i32* [[TMP8]] to i8*
27583ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP11:%.*]] = ptrtoint i8* [[TMP10]] to i64
27683ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP12:%.*]] = ptrtoint i8* [[TMP9]] to i64
27783ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP13:%.*]] = sub i64 [[TMP11]], [[TMP12]]
27883ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP14:%.*]] = sdiv exact i64 [[TMP13]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64)
27983ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP15:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
28083ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP16:%.*]] = bitcast i8** [[TMP15]] to %struct.ST**
28183ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    store %struct.ST* [[ST1]], %struct.ST** [[TMP16]], align 4
28283ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP17:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
28383ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP18:%.*]] = bitcast i8** [[TMP17]] to i32**
28483ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    store i32* [[I]], i32** [[TMP18]], align 4
285*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    [[TMP19:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
286*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    store i64 [[TMP7]], i64* [[TMP19]], align 4
287*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    [[TMP20:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
288*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    store i8* null, i8** [[TMP20]], align 4
289*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    [[TMP21:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
290*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    [[TMP22:%.*]] = bitcast i8** [[TMP21]] to %struct.ST**
291*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    store %struct.ST* [[ST1]], %struct.ST** [[TMP22]], align 4
292*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    [[TMP23:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
293*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    [[TMP24:%.*]] = bitcast i8** [[TMP23]] to i32**
294*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    store i32* [[I]], i32** [[TMP24]], align 4
295*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    [[TMP25:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
296*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    store i64 4, i64* [[TMP25]], align 4
297*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    [[TMP26:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1
298*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    store i8* null, i8** [[TMP26]], align 4
299*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    [[TMP27:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
300*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    [[TMP28:%.*]] = bitcast i8** [[TMP27]] to %struct.ST**
301*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    store %struct.ST* [[ST1]], %struct.ST** [[TMP28]], align 4
302*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    [[TMP29:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
303*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    [[TMP30:%.*]] = bitcast i8** [[TMP29]] to i32**
304*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    store i32* [[J]], i32** [[TMP30]], align 4
305*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    [[TMP31:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
306*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    store i64 4, i64* [[TMP31]], align 4
307*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    [[TMP32:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2
308*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    store i8* null, i8** [[TMP32]], align 4
309*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    [[TMP33:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
310*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    [[TMP34:%.*]] = bitcast i8** [[TMP33]] to i32**
311*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    store i32* [[A]], i32** [[TMP34]], align 4
312*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    [[TMP35:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
313*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    [[TMP36:%.*]] = bitcast i8** [[TMP35]] to i32**
314*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    store i32* [[A]], i32** [[TMP36]], align 4
315*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    [[TMP37:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 3
316*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    store i64 4, i64* [[TMP37]], align 4
317*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    [[TMP38:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 3
318*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    store i8* null, i8** [[TMP38]], align 4
319*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    [[TMP39:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
320*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    [[TMP40:%.*]] = bitcast i8** [[TMP39]] to %struct.ST**
321*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    store %struct.ST* [[ST2]], %struct.ST** [[TMP40]], align 4
322*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    [[TMP41:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
323*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    [[TMP42:%.*]] = bitcast i8** [[TMP41]] to i32**
324*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    store i32* [[I1]], i32** [[TMP42]], align 4
325*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    [[TMP43:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 4
326*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    store i64 [[TMP14]], i64* [[TMP43]], align 4
327*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    [[TMP44:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 4
32883ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    store i8* null, i8** [[TMP44]], align 4
329*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    [[TMP45:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 5
33083ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP46:%.*]] = bitcast i8** [[TMP45]] to %struct.ST**
33183ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    store %struct.ST* [[ST2]], %struct.ST** [[TMP46]], align 4
332*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    [[TMP47:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 5
33383ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP48:%.*]] = bitcast i8** [[TMP47]] to i32**
334*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    store i32* [[I1]], i32** [[TMP48]], align 4
335*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    [[TMP49:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 5
336*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    store i64 4, i64* [[TMP49]], align 4
337*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    [[TMP50:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 5
338*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    store i8* null, i8** [[TMP50]], align 4
339*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    [[TMP51:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 6
340*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    [[TMP52:%.*]] = bitcast i8** [[TMP51]] to %struct.ST**
341*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    store %struct.ST* [[ST2]], %struct.ST** [[TMP52]], align 4
342*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    [[TMP53:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 6
343*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    [[TMP54:%.*]] = bitcast i8** [[TMP53]] to i32**
344*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    store i32* [[J2]], i32** [[TMP54]], align 4
345*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    [[TMP55:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 6
346*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    store i64 4, i64* [[TMP55]], align 4
347*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    [[TMP56:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 6
348*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    store i8* null, i8** [[TMP56]], align 4
349*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    [[TMP57:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
350*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    [[TMP58:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
351*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    [[TMP59:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
352*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    [[TMP60:%.*]] = call i32 @__tgt_target_mapper(%struct.ident_t* @[[GLOB1:[0-9]+]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z20explicit_maps_singlei_l654.region_id, i32 7, i8** [[TMP57]], i8** [[TMP58]], i64* [[TMP59]], i64* getelementptr inbounds ([7 x i64], [7 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null)
353*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    [[TMP61:%.*]] = icmp ne i32 [[TMP60]], 0
354*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    br i1 [[TMP61]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
35583ddfa0dSJoel E. Denny // CHECK-USE-I386:       omp_offload.failed:
356*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z20explicit_maps_singlei_l654(%struct.ST* [[ST1]], i32* [[A]], %struct.ST* [[ST2]]) #[[ATTR2:[0-9]+]]
35783ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    br label [[OMP_OFFLOAD_CONT]]
35883ddfa0dSJoel E. Denny // CHECK-USE-I386:       omp_offload.cont:
359*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    [[TMP62:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS3]], i32 0, i32 0
360*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    [[TMP63:%.*]] = bitcast i8** [[TMP62]] to i32**
361*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    store i32* [[A]], i32** [[TMP63]], align 4
362*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    [[TMP64:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS4]], i32 0, i32 0
363*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    [[TMP65:%.*]] = bitcast i8** [[TMP64]] to i32**
364*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    store i32* [[A]], i32** [[TMP65]], align 4
365*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    [[TMP66:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_MAPPERS5]], i32 0, i32 0
366*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    store i8* null, i8** [[TMP66]], align 4
367*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    [[TMP67:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS3]], i32 0, i32 0
368*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    [[TMP68:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS4]], i32 0, i32 0
369*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    [[TMP69:%.*]] = call i32 @__tgt_target_mapper(%struct.ident_t* @[[GLOB1]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z20explicit_maps_singlei_l668.region_id, i32 1, i8** [[TMP67]], i8** [[TMP68]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.1, i32 0, i32 0), i8** null, i8** null)
370*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    [[TMP70:%.*]] = icmp ne i32 [[TMP69]], 0
371*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    br i1 [[TMP70]], label [[OMP_OFFLOAD_FAILED6:%.*]], label [[OMP_OFFLOAD_CONT7:%.*]]
37283ddfa0dSJoel E. Denny // CHECK-USE-I386:       omp_offload.failed6:
373*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z20explicit_maps_singlei_l668(i32* [[A]]) #[[ATTR2]]
37483ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    br label [[OMP_OFFLOAD_CONT7]]
37583ddfa0dSJoel E. Denny // CHECK-USE-I386:       omp_offload.cont7:
37683ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    ret void
37783ddfa0dSJoel E. Denny //
37883ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-LABEL: @_Z20explicit_maps_singlei(
37983ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:  entry:
38083ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[II_ADDR:%.*]] = alloca i32, align 4
38183ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[A:%.*]] = alloca i32, align 4
38283ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[ST1:%.*]] = alloca [[STRUCT_ST:%.*]], align 4
38383ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[ST2:%.*]] = alloca [[STRUCT_ST]], align 4
38483ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [7 x i8*], align 8
38583ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[DOTOFFLOAD_PTRS:%.*]] = alloca [7 x i8*], align 8
38683ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [7 x i8*], align 8
387*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    [[DOTOFFLOAD_SIZES:%.*]] = alloca [7 x i64], align 8
38883ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[DOTOFFLOAD_BASEPTRS3:%.*]] = alloca [1 x i8*], align 8
38983ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[DOTOFFLOAD_PTRS4:%.*]] = alloca [1 x i8*], align 8
39083ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[DOTOFFLOAD_MAPPERS5:%.*]] = alloca [1 x i8*], align 8
39183ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    store i32 [[II:%.*]], i32* [[II_ADDR]], align 4
39283ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP0:%.*]] = load i32, i32* [[II_ADDR]], align 4
39383ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    store i32 [[TMP0]], i32* [[A]], align 4
39483ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[I:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST1]], i32 0, i32 0
39583ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[J:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST1]], i32 0, i32 1
39683ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP1:%.*]] = getelementptr i32, i32* [[J]], i32 1
39783ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP2:%.*]] = bitcast i32* [[I]] to i8*
39883ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP3:%.*]] = bitcast i32* [[TMP1]] to i8*
39983ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP4:%.*]] = ptrtoint i8* [[TMP3]] to i64
40083ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP5:%.*]] = ptrtoint i8* [[TMP2]] to i64
40183ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP6:%.*]] = sub i64 [[TMP4]], [[TMP5]]
40283ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP7:%.*]] = sdiv exact i64 [[TMP6]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64)
40383ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[I1:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST2]], i32 0, i32 0
40483ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[J2:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST2]], i32 0, i32 1
40583ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP8:%.*]] = getelementptr i32, i32* [[J2]], i32 1
40683ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP9:%.*]] = bitcast i32* [[I1]] to i8*
40783ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP10:%.*]] = bitcast i32* [[TMP8]] to i8*
40883ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP11:%.*]] = ptrtoint i8* [[TMP10]] to i64
40983ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP12:%.*]] = ptrtoint i8* [[TMP9]] to i64
41083ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP13:%.*]] = sub i64 [[TMP11]], [[TMP12]]
41183ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP14:%.*]] = sdiv exact i64 [[TMP13]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64)
41283ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP15:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
41383ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP16:%.*]] = bitcast i8** [[TMP15]] to %struct.ST**
41483ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    store %struct.ST* [[ST1]], %struct.ST** [[TMP16]], align 8
41583ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP17:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
41683ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP18:%.*]] = bitcast i8** [[TMP17]] to i32**
41783ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    store i32* [[I]], i32** [[TMP18]], align 8
418*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP19:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
419*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    store i64 [[TMP7]], i64* [[TMP19]], align 8
420*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP20:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
421*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    store i8* null, i8** [[TMP20]], align 8
422*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP21:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
423*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP22:%.*]] = bitcast i8** [[TMP21]] to %struct.ST**
424*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    store %struct.ST* [[ST1]], %struct.ST** [[TMP22]], align 8
425*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP23:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
426*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP24:%.*]] = bitcast i8** [[TMP23]] to i32**
427*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    store i32* [[I]], i32** [[TMP24]], align 8
428*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP25:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
429*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    store i64 4, i64* [[TMP25]], align 8
430*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP26:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1
431*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    store i8* null, i8** [[TMP26]], align 8
432*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP27:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
433*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP28:%.*]] = bitcast i8** [[TMP27]] to %struct.ST**
434*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    store %struct.ST* [[ST1]], %struct.ST** [[TMP28]], align 8
435*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP29:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
436*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP30:%.*]] = bitcast i8** [[TMP29]] to i32**
437*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    store i32* [[J]], i32** [[TMP30]], align 8
438*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP31:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
439*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    store i64 4, i64* [[TMP31]], align 8
440*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP32:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2
441*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    store i8* null, i8** [[TMP32]], align 8
442*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP33:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
443*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP34:%.*]] = bitcast i8** [[TMP33]] to i32**
444*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    store i32* [[A]], i32** [[TMP34]], align 8
445*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP35:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
446*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP36:%.*]] = bitcast i8** [[TMP35]] to i32**
447*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    store i32* [[A]], i32** [[TMP36]], align 8
448*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP37:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 3
449*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    store i64 4, i64* [[TMP37]], align 8
450*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP38:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 3
451*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    store i8* null, i8** [[TMP38]], align 8
452*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP39:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
453*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP40:%.*]] = bitcast i8** [[TMP39]] to %struct.ST**
454*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    store %struct.ST* [[ST2]], %struct.ST** [[TMP40]], align 8
455*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP41:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
456*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP42:%.*]] = bitcast i8** [[TMP41]] to i32**
457*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    store i32* [[I1]], i32** [[TMP42]], align 8
458*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP43:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 4
459*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    store i64 [[TMP14]], i64* [[TMP43]], align 8
460*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP44:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 4
46183ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    store i8* null, i8** [[TMP44]], align 8
462*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP45:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 5
46383ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP46:%.*]] = bitcast i8** [[TMP45]] to %struct.ST**
46483ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    store %struct.ST* [[ST2]], %struct.ST** [[TMP46]], align 8
465*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP47:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 5
46683ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP48:%.*]] = bitcast i8** [[TMP47]] to i32**
467*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    store i32* [[I1]], i32** [[TMP48]], align 8
468*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP49:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 5
469*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    store i64 4, i64* [[TMP49]], align 8
470*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP50:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 5
471*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    store i8* null, i8** [[TMP50]], align 8
472*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP51:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 6
473*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP52:%.*]] = bitcast i8** [[TMP51]] to %struct.ST**
474*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    store %struct.ST* [[ST2]], %struct.ST** [[TMP52]], align 8
475*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP53:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 6
476*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP54:%.*]] = bitcast i8** [[TMP53]] to i32**
477*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    store i32* [[J2]], i32** [[TMP54]], align 8
478*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP55:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 6
479*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    store i64 4, i64* [[TMP55]], align 8
480*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP56:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 6
481*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    store i8* null, i8** [[TMP56]], align 8
482*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP57:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
483*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP58:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
484*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP59:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
485*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP60:%.*]] = call i32 @__tgt_target_mapper(%struct.ident_t* @[[GLOB1:[0-9]+]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z20explicit_maps_singlei_l654.region_id, i32 7, i8** [[TMP57]], i8** [[TMP58]], i64* [[TMP59]], i64* getelementptr inbounds ([7 x i64], [7 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null)
486*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP61:%.*]] = icmp ne i32 [[TMP60]], 0
487*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    br i1 [[TMP61]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
48883ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE:       omp_offload.failed:
489*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z20explicit_maps_singlei_l654() #[[ATTR2:[0-9]+]]
49083ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    br label [[OMP_OFFLOAD_CONT]]
49183ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE:       omp_offload.cont:
492*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP62:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS3]], i32 0, i32 0
493*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP63:%.*]] = bitcast i8** [[TMP62]] to i32**
494*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    store i32* [[A]], i32** [[TMP63]], align 8
495*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP64:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS4]], i32 0, i32 0
496*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP65:%.*]] = bitcast i8** [[TMP64]] to i32**
497*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    store i32* [[A]], i32** [[TMP65]], align 8
498*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP66:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_MAPPERS5]], i64 0, i64 0
499*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    store i8* null, i8** [[TMP66]], align 8
500*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP67:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS3]], i32 0, i32 0
501*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP68:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS4]], i32 0, i32 0
502*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP69:%.*]] = call i32 @__tgt_target_mapper(%struct.ident_t* @[[GLOB1]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z20explicit_maps_singlei_l668.region_id, i32 1, i8** [[TMP67]], i8** [[TMP68]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.1, i32 0, i32 0), i8** null, i8** null)
503*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP70:%.*]] = icmp ne i32 [[TMP69]], 0
504*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    br i1 [[TMP70]], label [[OMP_OFFLOAD_FAILED6:%.*]], label [[OMP_OFFLOAD_CONT7:%.*]]
50583ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE:       omp_offload.failed6:
506*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z20explicit_maps_singlei_l668() #[[ATTR2]]
50783ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    br label [[OMP_OFFLOAD_CONT7]]
50883ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE:       omp_offload.cont7:
50983ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    ret void
51083ddfa0dSJoel E. Denny //
51183ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-LABEL: @_Z20explicit_maps_singlei(
51283ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:  entry:
51383ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[II_ADDR:%.*]] = alloca i32, align 4
51483ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[A:%.*]] = alloca i32, align 4
51583ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[ST1:%.*]] = alloca [[STRUCT_ST:%.*]], align 4
51683ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[ST2:%.*]] = alloca [[STRUCT_ST]], align 4
51783ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [7 x i8*], align 4
51883ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[DOTOFFLOAD_PTRS:%.*]] = alloca [7 x i8*], align 4
51983ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [7 x i8*], align 4
520*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    [[DOTOFFLOAD_SIZES:%.*]] = alloca [7 x i64], align 4
52183ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[DOTOFFLOAD_BASEPTRS3:%.*]] = alloca [1 x i8*], align 4
52283ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[DOTOFFLOAD_PTRS4:%.*]] = alloca [1 x i8*], align 4
52383ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[DOTOFFLOAD_MAPPERS5:%.*]] = alloca [1 x i8*], align 4
52483ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    store i32 [[II:%.*]], i32* [[II_ADDR]], align 4
52583ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP0:%.*]] = load i32, i32* [[II_ADDR]], align 4
52683ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    store i32 [[TMP0]], i32* [[A]], align 4
52783ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[I:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST1]], i32 0, i32 0
52883ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[J:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST1]], i32 0, i32 1
52983ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP1:%.*]] = getelementptr i32, i32* [[J]], i32 1
53083ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP2:%.*]] = bitcast i32* [[I]] to i8*
53183ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP3:%.*]] = bitcast i32* [[TMP1]] to i8*
53283ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP4:%.*]] = ptrtoint i8* [[TMP3]] to i64
53383ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP5:%.*]] = ptrtoint i8* [[TMP2]] to i64
53483ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP6:%.*]] = sub i64 [[TMP4]], [[TMP5]]
53583ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP7:%.*]] = sdiv exact i64 [[TMP6]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64)
53683ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[I1:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST2]], i32 0, i32 0
53783ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[J2:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST2]], i32 0, i32 1
53883ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP8:%.*]] = getelementptr i32, i32* [[J2]], i32 1
53983ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP9:%.*]] = bitcast i32* [[I1]] to i8*
54083ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP10:%.*]] = bitcast i32* [[TMP8]] to i8*
54183ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP11:%.*]] = ptrtoint i8* [[TMP10]] to i64
54283ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP12:%.*]] = ptrtoint i8* [[TMP9]] to i64
54383ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP13:%.*]] = sub i64 [[TMP11]], [[TMP12]]
54483ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP14:%.*]] = sdiv exact i64 [[TMP13]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64)
54583ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP15:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
54683ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP16:%.*]] = bitcast i8** [[TMP15]] to %struct.ST**
54783ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    store %struct.ST* [[ST1]], %struct.ST** [[TMP16]], align 4
54883ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP17:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
54983ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP18:%.*]] = bitcast i8** [[TMP17]] to i32**
55083ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    store i32* [[I]], i32** [[TMP18]], align 4
551*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    [[TMP19:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
552*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    store i64 [[TMP7]], i64* [[TMP19]], align 4
553*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    [[TMP20:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
554*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    store i8* null, i8** [[TMP20]], align 4
555*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    [[TMP21:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
556*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    [[TMP22:%.*]] = bitcast i8** [[TMP21]] to %struct.ST**
557*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    store %struct.ST* [[ST1]], %struct.ST** [[TMP22]], align 4
558*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    [[TMP23:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
559*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    [[TMP24:%.*]] = bitcast i8** [[TMP23]] to i32**
560*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    store i32* [[I]], i32** [[TMP24]], align 4
561*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    [[TMP25:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
562*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    store i64 4, i64* [[TMP25]], align 4
563*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    [[TMP26:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1
564*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    store i8* null, i8** [[TMP26]], align 4
565*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    [[TMP27:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
566*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    [[TMP28:%.*]] = bitcast i8** [[TMP27]] to %struct.ST**
567*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    store %struct.ST* [[ST1]], %struct.ST** [[TMP28]], align 4
568*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    [[TMP29:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
569*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    [[TMP30:%.*]] = bitcast i8** [[TMP29]] to i32**
570*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    store i32* [[J]], i32** [[TMP30]], align 4
571*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    [[TMP31:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
572*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    store i64 4, i64* [[TMP31]], align 4
573*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    [[TMP32:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2
574*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    store i8* null, i8** [[TMP32]], align 4
575*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    [[TMP33:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
576*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    [[TMP34:%.*]] = bitcast i8** [[TMP33]] to i32**
577*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    store i32* [[A]], i32** [[TMP34]], align 4
578*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    [[TMP35:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
579*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    [[TMP36:%.*]] = bitcast i8** [[TMP35]] to i32**
580*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    store i32* [[A]], i32** [[TMP36]], align 4
581*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    [[TMP37:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 3
582*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    store i64 4, i64* [[TMP37]], align 4
583*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    [[TMP38:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 3
584*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    store i8* null, i8** [[TMP38]], align 4
585*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    [[TMP39:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
586*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    [[TMP40:%.*]] = bitcast i8** [[TMP39]] to %struct.ST**
587*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    store %struct.ST* [[ST2]], %struct.ST** [[TMP40]], align 4
588*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    [[TMP41:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
589*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    [[TMP42:%.*]] = bitcast i8** [[TMP41]] to i32**
590*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    store i32* [[I1]], i32** [[TMP42]], align 4
591*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    [[TMP43:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 4
592*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    store i64 [[TMP14]], i64* [[TMP43]], align 4
593*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    [[TMP44:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 4
59483ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    store i8* null, i8** [[TMP44]], align 4
595*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    [[TMP45:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 5
59683ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP46:%.*]] = bitcast i8** [[TMP45]] to %struct.ST**
59783ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    store %struct.ST* [[ST2]], %struct.ST** [[TMP46]], align 4
598*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    [[TMP47:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 5
59983ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP48:%.*]] = bitcast i8** [[TMP47]] to i32**
600*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    store i32* [[I1]], i32** [[TMP48]], align 4
601*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    [[TMP49:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 5
602*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    store i64 4, i64* [[TMP49]], align 4
603*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    [[TMP50:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 5
604*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    store i8* null, i8** [[TMP50]], align 4
605*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    [[TMP51:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 6
606*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    [[TMP52:%.*]] = bitcast i8** [[TMP51]] to %struct.ST**
607*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    store %struct.ST* [[ST2]], %struct.ST** [[TMP52]], align 4
608*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    [[TMP53:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 6
609*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    [[TMP54:%.*]] = bitcast i8** [[TMP53]] to i32**
610*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    store i32* [[J2]], i32** [[TMP54]], align 4
611*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    [[TMP55:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 6
612*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    store i64 4, i64* [[TMP55]], align 4
613*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    [[TMP56:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 6
614*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    store i8* null, i8** [[TMP56]], align 4
615*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    [[TMP57:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
616*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    [[TMP58:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
617*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    [[TMP59:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
618*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    [[TMP60:%.*]] = call i32 @__tgt_target_mapper(%struct.ident_t* @[[GLOB1:[0-9]+]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z20explicit_maps_singlei_l654.region_id, i32 7, i8** [[TMP57]], i8** [[TMP58]], i64* [[TMP59]], i64* getelementptr inbounds ([7 x i64], [7 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null)
619*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    [[TMP61:%.*]] = icmp ne i32 [[TMP60]], 0
620*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    br i1 [[TMP61]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
62183ddfa0dSJoel E. Denny // CHECK-NOUSE-I386:       omp_offload.failed:
622*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z20explicit_maps_singlei_l654() #[[ATTR2:[0-9]+]]
62383ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    br label [[OMP_OFFLOAD_CONT]]
62483ddfa0dSJoel E. Denny // CHECK-NOUSE-I386:       omp_offload.cont:
625*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    [[TMP62:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS3]], i32 0, i32 0
626*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    [[TMP63:%.*]] = bitcast i8** [[TMP62]] to i32**
627*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    store i32* [[A]], i32** [[TMP63]], align 4
628*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    [[TMP64:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS4]], i32 0, i32 0
629*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    [[TMP65:%.*]] = bitcast i8** [[TMP64]] to i32**
630*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    store i32* [[A]], i32** [[TMP65]], align 4
631*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    [[TMP66:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_MAPPERS5]], i32 0, i32 0
632*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    store i8* null, i8** [[TMP66]], align 4
633*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    [[TMP67:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS3]], i32 0, i32 0
634*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    [[TMP68:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS4]], i32 0, i32 0
635*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    [[TMP69:%.*]] = call i32 @__tgt_target_mapper(%struct.ident_t* @[[GLOB1]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z20explicit_maps_singlei_l668.region_id, i32 1, i8** [[TMP67]], i8** [[TMP68]], i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_sizes, i32 0, i32 0), i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.offload_maptypes.1, i32 0, i32 0), i8** null, i8** null)
636*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    [[TMP70:%.*]] = icmp ne i32 [[TMP69]], 0
637*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    br i1 [[TMP70]], label [[OMP_OFFLOAD_FAILED6:%.*]], label [[OMP_OFFLOAD_CONT7:%.*]]
63883ddfa0dSJoel E. Denny // CHECK-NOUSE-I386:       omp_offload.failed6:
639*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z20explicit_maps_singlei_l668() #[[ATTR2]]
64083ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    br label [[OMP_OFFLOAD_CONT7]]
64183ddfa0dSJoel E. Denny // CHECK-NOUSE-I386:       omp_offload.cont7:
64283ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    ret void
64383ddfa0dSJoel E. Denny //
64483ddfa0dSJoel E. Denny void explicit_maps_single(int ii) {
64583ddfa0dSJoel E. Denny 
64683ddfa0dSJoel E. Denny   // Map of a scalar.
64783ddfa0dSJoel E. Denny   int a = ii;
64883ddfa0dSJoel E. Denny 
64983ddfa0dSJoel E. Denny   struct ST st1;
65083ddfa0dSJoel E. Denny   struct ST st2;
65183ddfa0dSJoel E. Denny 
65283ddfa0dSJoel E. Denny   // Make sure the struct picks up ompx_hold even if another element of the
65383ddfa0dSJoel E. Denny   // struct doesn't have ompx_hold.
65483ddfa0dSJoel E. Denny   #pragma omp target map(tofrom : st1.i) \
65583ddfa0dSJoel E. Denny                      map(ompx_hold, tofrom : a, st1.j, st2.i) \
65683ddfa0dSJoel E. Denny                      map(tofrom : st2.j)
65783ddfa0dSJoel E. Denny   {
65883ddfa0dSJoel E. Denny #ifdef USE
65983ddfa0dSJoel E. Denny     st1.i++;
66083ddfa0dSJoel E. Denny     a++;
66183ddfa0dSJoel E. Denny     st1.j++;
66283ddfa0dSJoel E. Denny     st2.i++;
66383ddfa0dSJoel E. Denny     st2.j++;
66483ddfa0dSJoel E. Denny #endif
66583ddfa0dSJoel E. Denny   }
66683ddfa0dSJoel E. Denny 
66783ddfa0dSJoel E. Denny   // Always Close Hold.
66883ddfa0dSJoel E. Denny   #pragma omp target map(always close ompx_hold tofrom: a)
66983ddfa0dSJoel E. Denny   {
67083ddfa0dSJoel E. Denny #ifdef USE
67183ddfa0dSJoel E. Denny     a++;
67283ddfa0dSJoel E. Denny #endif
67383ddfa0dSJoel E. Denny   }
67483ddfa0dSJoel E. Denny }
67583ddfa0dSJoel E. Denny 
67683ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-LABEL: @_ZN2ST20test_present_membersEv(
67783ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:  entry:
67883ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[THIS_ADDR:%.*]] = alloca %struct.ST*, align 8
67983ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [3 x i8*], align 8
68083ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[DOTOFFLOAD_PTRS:%.*]] = alloca [3 x i8*], align 8
68183ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [3 x i8*], align 8
682*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    [[DOTOFFLOAD_SIZES:%.*]] = alloca [3 x i64], align 8
68383ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    store %struct.ST* [[THIS:%.*]], %struct.ST** [[THIS_ADDR]], align 8
68483ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[THIS1:%.*]] = load %struct.ST*, %struct.ST** [[THIS_ADDR]], align 8
68583ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[I:%.*]] = getelementptr inbounds [[STRUCT_ST:%.*]], %struct.ST* [[THIS1]], i32 0, i32 0
68683ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[J:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[THIS1]], i32 0, i32 1
68783ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP0:%.*]] = getelementptr i32, i32* [[J]], i32 1
68883ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP1:%.*]] = bitcast i32* [[I]] to i8*
68983ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP2:%.*]] = bitcast i32* [[TMP0]] to i8*
69083ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP3:%.*]] = ptrtoint i8* [[TMP2]] to i64
69183ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP4:%.*]] = ptrtoint i8* [[TMP1]] to i64
69283ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP5:%.*]] = sub i64 [[TMP3]], [[TMP4]]
69383ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP6:%.*]] = sdiv exact i64 [[TMP5]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64)
69483ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP7:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
69583ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP8:%.*]] = bitcast i8** [[TMP7]] to %struct.ST**
69683ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    store %struct.ST* [[THIS1]], %struct.ST** [[TMP8]], align 8
69783ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP9:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
69883ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP10:%.*]] = bitcast i8** [[TMP9]] to i32**
69983ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    store i32* [[I]], i32** [[TMP10]], align 8
700*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    [[TMP11:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
701*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    store i64 [[TMP6]], i64* [[TMP11]], align 8
702*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    [[TMP12:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
703*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    store i8* null, i8** [[TMP12]], align 8
704*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    [[TMP13:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
705*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    [[TMP14:%.*]] = bitcast i8** [[TMP13]] to %struct.ST**
706*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    store %struct.ST* [[THIS1]], %struct.ST** [[TMP14]], align 8
707*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    [[TMP15:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
708*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    [[TMP16:%.*]] = bitcast i8** [[TMP15]] to i32**
709*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    store i32* [[I]], i32** [[TMP16]], align 8
710*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    [[TMP17:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
711*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    store i64 4, i64* [[TMP17]], align 8
712*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    [[TMP18:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1
713*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    store i8* null, i8** [[TMP18]], align 8
714*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    [[TMP19:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
715*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    [[TMP20:%.*]] = bitcast i8** [[TMP19]] to %struct.ST**
716*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    store %struct.ST* [[THIS1]], %struct.ST** [[TMP20]], align 8
717*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    [[TMP21:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
718*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    [[TMP22:%.*]] = bitcast i8** [[TMP21]] to i32**
719*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    store i32* [[J]], i32** [[TMP22]], align 8
720*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    [[TMP23:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
721*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    store i64 4, i64* [[TMP23]], align 8
722*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    [[TMP24:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2
723*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    store i8* null, i8** [[TMP24]], align 8
724*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    [[TMP25:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
725*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    [[TMP26:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
726*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    [[TMP27:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
727*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    [[TMP28:%.*]] = call i32 @__tgt_target_mapper(%struct.ident_t* @[[GLOB1]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2ST20test_present_membersEv_l919.region_id, i32 3, i8** [[TMP25]], i8** [[TMP26]], i64* [[TMP27]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes.2, i32 0, i32 0), i8** null, i8** null)
728*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    [[TMP29:%.*]] = icmp ne i32 [[TMP28]], 0
729*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    br i1 [[TMP29]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
73083ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE:       omp_offload.failed:
731*ca6fa71bSAlexey Bataev // CHECK-USE-PPC64LE-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2ST20test_present_membersEv_l919(%struct.ST* [[THIS1]]) #[[ATTR2]]
73283ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    br label [[OMP_OFFLOAD_CONT]]
73383ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE:       omp_offload.cont:
73483ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    ret void
73583ddfa0dSJoel E. Denny //
73683ddfa0dSJoel E. Denny // CHECK-USE-I386-LABEL: @_ZN2ST20test_present_membersEv(
73783ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:  entry:
73883ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[THIS_ADDR:%.*]] = alloca %struct.ST*, align 4
73983ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [3 x i8*], align 4
74083ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[DOTOFFLOAD_PTRS:%.*]] = alloca [3 x i8*], align 4
74183ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [3 x i8*], align 4
742*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    [[DOTOFFLOAD_SIZES:%.*]] = alloca [3 x i64], align 4
74383ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    store %struct.ST* [[THIS:%.*]], %struct.ST** [[THIS_ADDR]], align 4
74483ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[THIS1:%.*]] = load %struct.ST*, %struct.ST** [[THIS_ADDR]], align 4
74583ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[I:%.*]] = getelementptr inbounds [[STRUCT_ST:%.*]], %struct.ST* [[THIS1]], i32 0, i32 0
74683ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[J:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[THIS1]], i32 0, i32 1
74783ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP0:%.*]] = getelementptr i32, i32* [[J]], i32 1
74883ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP1:%.*]] = bitcast i32* [[I]] to i8*
74983ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP2:%.*]] = bitcast i32* [[TMP0]] to i8*
75083ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP3:%.*]] = ptrtoint i8* [[TMP2]] to i64
75183ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP4:%.*]] = ptrtoint i8* [[TMP1]] to i64
75283ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP5:%.*]] = sub i64 [[TMP3]], [[TMP4]]
75383ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP6:%.*]] = sdiv exact i64 [[TMP5]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64)
75483ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP7:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
75583ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP8:%.*]] = bitcast i8** [[TMP7]] to %struct.ST**
75683ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    store %struct.ST* [[THIS1]], %struct.ST** [[TMP8]], align 4
75783ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP9:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
75883ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP10:%.*]] = bitcast i8** [[TMP9]] to i32**
75983ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    store i32* [[I]], i32** [[TMP10]], align 4
760*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    [[TMP11:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
761*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    store i64 [[TMP6]], i64* [[TMP11]], align 4
762*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    [[TMP12:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
763*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    store i8* null, i8** [[TMP12]], align 4
764*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    [[TMP13:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
765*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    [[TMP14:%.*]] = bitcast i8** [[TMP13]] to %struct.ST**
766*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    store %struct.ST* [[THIS1]], %struct.ST** [[TMP14]], align 4
767*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    [[TMP15:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
768*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    [[TMP16:%.*]] = bitcast i8** [[TMP15]] to i32**
769*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    store i32* [[I]], i32** [[TMP16]], align 4
770*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    [[TMP17:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
771*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    store i64 4, i64* [[TMP17]], align 4
772*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    [[TMP18:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1
773*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    store i8* null, i8** [[TMP18]], align 4
774*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    [[TMP19:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
775*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    [[TMP20:%.*]] = bitcast i8** [[TMP19]] to %struct.ST**
776*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    store %struct.ST* [[THIS1]], %struct.ST** [[TMP20]], align 4
777*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    [[TMP21:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
778*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    [[TMP22:%.*]] = bitcast i8** [[TMP21]] to i32**
779*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    store i32* [[J]], i32** [[TMP22]], align 4
780*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    [[TMP23:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
781*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    store i64 4, i64* [[TMP23]], align 4
782*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    [[TMP24:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2
783*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    store i8* null, i8** [[TMP24]], align 4
784*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    [[TMP25:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
785*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    [[TMP26:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
786*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    [[TMP27:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
787*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    [[TMP28:%.*]] = call i32 @__tgt_target_mapper(%struct.ident_t* @[[GLOB1]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2ST20test_present_membersEv_l919.region_id, i32 3, i8** [[TMP25]], i8** [[TMP26]], i64* [[TMP27]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes.2, i32 0, i32 0), i8** null, i8** null)
788*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    [[TMP29:%.*]] = icmp ne i32 [[TMP28]], 0
789*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    br i1 [[TMP29]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
79083ddfa0dSJoel E. Denny // CHECK-USE-I386:       omp_offload.failed:
791*ca6fa71bSAlexey Bataev // CHECK-USE-I386-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2ST20test_present_membersEv_l919(%struct.ST* [[THIS1]]) #[[ATTR2]]
79283ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    br label [[OMP_OFFLOAD_CONT]]
79383ddfa0dSJoel E. Denny // CHECK-USE-I386:       omp_offload.cont:
79483ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    ret void
79583ddfa0dSJoel E. Denny //
79683ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-LABEL: @_ZN2ST20test_present_membersEv(
79783ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:  entry:
79883ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[THIS_ADDR:%.*]] = alloca %struct.ST*, align 8
79983ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [3 x i8*], align 8
80083ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[DOTOFFLOAD_PTRS:%.*]] = alloca [3 x i8*], align 8
80183ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [3 x i8*], align 8
802*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    [[DOTOFFLOAD_SIZES:%.*]] = alloca [3 x i64], align 8
80383ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    store %struct.ST* [[THIS:%.*]], %struct.ST** [[THIS_ADDR]], align 8
80483ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[THIS1:%.*]] = load %struct.ST*, %struct.ST** [[THIS_ADDR]], align 8
80583ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[I:%.*]] = getelementptr inbounds [[STRUCT_ST:%.*]], %struct.ST* [[THIS1]], i32 0, i32 0
80683ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[J:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[THIS1]], i32 0, i32 1
80783ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP0:%.*]] = getelementptr i32, i32* [[J]], i32 1
80883ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP1:%.*]] = bitcast i32* [[I]] to i8*
80983ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP2:%.*]] = bitcast i32* [[TMP0]] to i8*
81083ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP3:%.*]] = ptrtoint i8* [[TMP2]] to i64
81183ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP4:%.*]] = ptrtoint i8* [[TMP1]] to i64
81283ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP5:%.*]] = sub i64 [[TMP3]], [[TMP4]]
81383ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP6:%.*]] = sdiv exact i64 [[TMP5]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64)
81483ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP7:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
81583ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP8:%.*]] = bitcast i8** [[TMP7]] to %struct.ST**
81683ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    store %struct.ST* [[THIS1]], %struct.ST** [[TMP8]], align 8
81783ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP9:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
81883ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP10:%.*]] = bitcast i8** [[TMP9]] to i32**
81983ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    store i32* [[I]], i32** [[TMP10]], align 8
820*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP11:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
821*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    store i64 [[TMP6]], i64* [[TMP11]], align 8
822*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP12:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
823*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    store i8* null, i8** [[TMP12]], align 8
824*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP13:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
825*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP14:%.*]] = bitcast i8** [[TMP13]] to %struct.ST**
826*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    store %struct.ST* [[THIS1]], %struct.ST** [[TMP14]], align 8
827*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP15:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
828*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP16:%.*]] = bitcast i8** [[TMP15]] to i32**
829*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    store i32* [[I]], i32** [[TMP16]], align 8
830*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP17:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
831*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    store i64 4, i64* [[TMP17]], align 8
832*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP18:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1
833*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    store i8* null, i8** [[TMP18]], align 8
834*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP19:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
835*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP20:%.*]] = bitcast i8** [[TMP19]] to %struct.ST**
836*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    store %struct.ST* [[THIS1]], %struct.ST** [[TMP20]], align 8
837*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP21:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
838*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP22:%.*]] = bitcast i8** [[TMP21]] to i32**
839*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    store i32* [[J]], i32** [[TMP22]], align 8
840*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP23:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
841*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    store i64 4, i64* [[TMP23]], align 8
842*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP24:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2
843*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    store i8* null, i8** [[TMP24]], align 8
844*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP25:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
845*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP26:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
846*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP27:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
847*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP28:%.*]] = call i32 @__tgt_target_mapper(%struct.ident_t* @[[GLOB1]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2ST20test_present_membersEv_l919.region_id, i32 3, i8** [[TMP25]], i8** [[TMP26]], i64* [[TMP27]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes.2, i32 0, i32 0), i8** null, i8** null)
848*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP29:%.*]] = icmp ne i32 [[TMP28]], 0
849*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    br i1 [[TMP29]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
85083ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE:       omp_offload.failed:
851*ca6fa71bSAlexey Bataev // CHECK-NOUSE-PPC64LE-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2ST20test_present_membersEv_l919() #[[ATTR2]]
85283ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    br label [[OMP_OFFLOAD_CONT]]
85383ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE:       omp_offload.cont:
85483ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    ret void
85583ddfa0dSJoel E. Denny //
85683ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-LABEL: @_ZN2ST20test_present_membersEv(
85783ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:  entry:
85883ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[THIS_ADDR:%.*]] = alloca %struct.ST*, align 4
85983ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [3 x i8*], align 4
86083ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[DOTOFFLOAD_PTRS:%.*]] = alloca [3 x i8*], align 4
86183ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [3 x i8*], align 4
862*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    [[DOTOFFLOAD_SIZES:%.*]] = alloca [3 x i64], align 4
86383ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    store %struct.ST* [[THIS:%.*]], %struct.ST** [[THIS_ADDR]], align 4
86483ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[THIS1:%.*]] = load %struct.ST*, %struct.ST** [[THIS_ADDR]], align 4
86583ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[I:%.*]] = getelementptr inbounds [[STRUCT_ST:%.*]], %struct.ST* [[THIS1]], i32 0, i32 0
86683ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[J:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[THIS1]], i32 0, i32 1
86783ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP0:%.*]] = getelementptr i32, i32* [[J]], i32 1
86883ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP1:%.*]] = bitcast i32* [[I]] to i8*
86983ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP2:%.*]] = bitcast i32* [[TMP0]] to i8*
87083ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP3:%.*]] = ptrtoint i8* [[TMP2]] to i64
87183ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP4:%.*]] = ptrtoint i8* [[TMP1]] to i64
87283ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP5:%.*]] = sub i64 [[TMP3]], [[TMP4]]
87383ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP6:%.*]] = sdiv exact i64 [[TMP5]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64)
87483ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP7:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
87583ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP8:%.*]] = bitcast i8** [[TMP7]] to %struct.ST**
87683ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    store %struct.ST* [[THIS1]], %struct.ST** [[TMP8]], align 4
87783ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP9:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
87883ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP10:%.*]] = bitcast i8** [[TMP9]] to i32**
87983ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    store i32* [[I]], i32** [[TMP10]], align 4
880*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    [[TMP11:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
881*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    store i64 [[TMP6]], i64* [[TMP11]], align 4
882*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    [[TMP12:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
883*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    store i8* null, i8** [[TMP12]], align 4
884*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    [[TMP13:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
885*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    [[TMP14:%.*]] = bitcast i8** [[TMP13]] to %struct.ST**
886*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    store %struct.ST* [[THIS1]], %struct.ST** [[TMP14]], align 4
887*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    [[TMP15:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
888*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    [[TMP16:%.*]] = bitcast i8** [[TMP15]] to i32**
889*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    store i32* [[I]], i32** [[TMP16]], align 4
890*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    [[TMP17:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
891*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    store i64 4, i64* [[TMP17]], align 4
892*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    [[TMP18:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1
893*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    store i8* null, i8** [[TMP18]], align 4
894*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    [[TMP19:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
895*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    [[TMP20:%.*]] = bitcast i8** [[TMP19]] to %struct.ST**
896*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    store %struct.ST* [[THIS1]], %struct.ST** [[TMP20]], align 4
897*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    [[TMP21:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
898*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    [[TMP22:%.*]] = bitcast i8** [[TMP21]] to i32**
899*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    store i32* [[J]], i32** [[TMP22]], align 4
900*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    [[TMP23:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
901*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    store i64 4, i64* [[TMP23]], align 4
902*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    [[TMP24:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2
903*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    store i8* null, i8** [[TMP24]], align 4
904*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    [[TMP25:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
905*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    [[TMP26:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
906*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    [[TMP27:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
907*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    [[TMP28:%.*]] = call i32 @__tgt_target_mapper(%struct.ident_t* @[[GLOB1]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2ST20test_present_membersEv_l919.region_id, i32 3, i8** [[TMP25]], i8** [[TMP26]], i64* [[TMP27]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes.2, i32 0, i32 0), i8** null, i8** null)
908*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    [[TMP29:%.*]] = icmp ne i32 [[TMP28]], 0
909*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    br i1 [[TMP29]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
91083ddfa0dSJoel E. Denny // CHECK-NOUSE-I386:       omp_offload.failed:
911*ca6fa71bSAlexey Bataev // CHECK-NOUSE-I386-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2ST20test_present_membersEv_l919() #[[ATTR2]]
91283ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    br label [[OMP_OFFLOAD_CONT]]
91383ddfa0dSJoel E. Denny // CHECK-NOUSE-I386:       omp_offload.cont:
91483ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    ret void
91583ddfa0dSJoel E. Denny //
91683ddfa0dSJoel E. Denny void ST::test_present_members() {
91783ddfa0dSJoel E. Denny   // Make sure the struct picks up ompx_hold even if another element of the
91883ddfa0dSJoel E. Denny   // struct doesn't have ompx_hold.
91983ddfa0dSJoel E. Denny   #pragma omp target map(tofrom : i) map(ompx_hold, tofrom : j)
92083ddfa0dSJoel E. Denny   {
92183ddfa0dSJoel E. Denny #ifdef USE
92283ddfa0dSJoel E. Denny     i++;
92383ddfa0dSJoel E. Denny     j++;
92483ddfa0dSJoel E. Denny #endif
92583ddfa0dSJoel E. Denny   }
92683ddfa0dSJoel E. Denny }
92783ddfa0dSJoel E. Denny 
92883ddfa0dSJoel E. Denny #endif
929