1*83ddfa0dSJoel E. Denny // 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.*"
2*83ddfa0dSJoel E. Denny // expected-no-diagnostics
3*83ddfa0dSJoel E. Denny #ifndef HEADER
4*83ddfa0dSJoel E. Denny #define HEADER
5*83ddfa0dSJoel E. Denny 
6*83ddfa0dSJoel E. Denny //--------------------------------------------------
7*83ddfa0dSJoel E. Denny // With -DUSE.
8*83ddfa0dSJoel E. Denny //--------------------------------------------------
9*83ddfa0dSJoel E. Denny 
10*83ddfa0dSJoel E. Denny // powerpc64le-ibm-linux-gnu
11*83ddfa0dSJoel E. Denny 
12*83ddfa0dSJoel E. Denny // RUN: %clang_cc1 -DUSE -verify -fopenmp -fopenmp-extensions \
13*83ddfa0dSJoel E. Denny // RUN:     -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ \
14*83ddfa0dSJoel E. Denny // RUN:     -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | \
15*83ddfa0dSJoel E. Denny // RUN:   FileCheck %s --check-prefixes=CHECK-USE-PPC64LE
16*83ddfa0dSJoel E. Denny // RUN: %clang_cc1 -DUSE -fopenmp -fopenmp-extensions \
17*83ddfa0dSJoel E. Denny // RUN:     -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -std=c++11 \
18*83ddfa0dSJoel E. Denny // RUN:     -triple powerpc64le-unknown-unknown -emit-pch -o %t %s
19*83ddfa0dSJoel E. Denny // RUN: %clang_cc1 -DUSE -fopenmp -fopenmp-extensions \
20*83ddfa0dSJoel E. Denny // RUN:     -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ \
21*83ddfa0dSJoel E. Denny // RUN:     -triple powerpc64le-unknown-unknown -std=c++11 -include-pch %t \
22*83ddfa0dSJoel E. Denny // RUN:     -verify %s -emit-llvm -o - | \
23*83ddfa0dSJoel E. Denny // RUN:   FileCheck %s --check-prefixes=CHECK-USE-PPC64LE
24*83ddfa0dSJoel E. Denny 
25*83ddfa0dSJoel E. Denny // i386-pc-linux-gnu
26*83ddfa0dSJoel E. Denny 
27*83ddfa0dSJoel E. Denny // RUN: %clang_cc1 -DUSE -verify -fopenmp -fopenmp-extensions \
28*83ddfa0dSJoel E. Denny // RUN:     -fopenmp-targets=i386-pc-linux-gnu -x c++ \
29*83ddfa0dSJoel E. Denny // RUN:     -triple i386-unknown-unknown -emit-llvm %s -o - | \
30*83ddfa0dSJoel E. Denny // RUN:   FileCheck %s --check-prefixes=CHECK-USE-I386
31*83ddfa0dSJoel E. Denny // RUN: %clang_cc1 -DUSE -fopenmp -fopenmp-extensions \
32*83ddfa0dSJoel E. Denny // RUN:     -fopenmp-targets=i386-pc-linux-gnu -x c++ -std=c++11 \
33*83ddfa0dSJoel E. Denny // RUN:     -triple i386-unknown-unknown -emit-pch -o %t %s
34*83ddfa0dSJoel E. Denny // RUN: %clang_cc1 -DUSE -fopenmp -fopenmp-extensions \
35*83ddfa0dSJoel E. Denny // RUN:     -fopenmp-targets=i386-pc-linux-gnu -x c++ \
36*83ddfa0dSJoel E. Denny // RUN:     -triple i386-unknown-unknown -std=c++11 -include-pch %t -verify %s \
37*83ddfa0dSJoel E. Denny // RUN:     -emit-llvm -o - | \
38*83ddfa0dSJoel E. Denny // RUN:   FileCheck %s --check-prefixes=CHECK-USE-I386
39*83ddfa0dSJoel E. Denny 
40*83ddfa0dSJoel E. Denny //--------------------------------------------------
41*83ddfa0dSJoel E. Denny // Without -DUSE.
42*83ddfa0dSJoel E. Denny //--------------------------------------------------
43*83ddfa0dSJoel E. Denny 
44*83ddfa0dSJoel E. Denny // powerpc64le-ibm-linux-gnu
45*83ddfa0dSJoel E. Denny 
46*83ddfa0dSJoel E. Denny // RUN: %clang_cc1 -verify -fopenmp -fopenmp-extensions \
47*83ddfa0dSJoel E. Denny // RUN:     -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ \
48*83ddfa0dSJoel E. Denny // RUN:     -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | \
49*83ddfa0dSJoel E. Denny // RUN:   FileCheck %s --check-prefixes=CHECK-NOUSE-PPC64LE
50*83ddfa0dSJoel E. Denny // RUN: %clang_cc1 -fopenmp -fopenmp-extensions \
51*83ddfa0dSJoel E. Denny // RUN:     -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -std=c++11 \
52*83ddfa0dSJoel E. Denny // RUN:     -triple powerpc64le-unknown-unknown -emit-pch -o %t %s
53*83ddfa0dSJoel E. Denny // RUN: %clang_cc1 -fopenmp -fopenmp-extensions \
54*83ddfa0dSJoel E. Denny // RUN:     -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ \
55*83ddfa0dSJoel E. Denny // RUN:     -triple powerpc64le-unknown-unknown -std=c++11 -include-pch %t \
56*83ddfa0dSJoel E. Denny // RUN:     -verify %s -emit-llvm -o - | \
57*83ddfa0dSJoel E. Denny // RUN:   FileCheck %s --check-prefixes=CHECK-NOUSE-PPC64LE
58*83ddfa0dSJoel E. Denny 
59*83ddfa0dSJoel E. Denny // i386-pc-linux-gnu
60*83ddfa0dSJoel E. Denny 
61*83ddfa0dSJoel E. Denny // RUN: %clang_cc1 -verify -fopenmp -fopenmp-extensions \
62*83ddfa0dSJoel E. Denny // RUN:     -fopenmp-targets=i386-pc-linux-gnu -x c++ \
63*83ddfa0dSJoel E. Denny // RUN:     -triple i386-unknown-unknown -emit-llvm %s -o - | \
64*83ddfa0dSJoel E. Denny // RUN:   FileCheck %s --check-prefixes=CHECK-NOUSE-I386
65*83ddfa0dSJoel E. Denny // RUN: %clang_cc1 -fopenmp -fopenmp-extensions \
66*83ddfa0dSJoel E. Denny // RUN:     -fopenmp-targets=i386-pc-linux-gnu -x c++ -std=c++11 \
67*83ddfa0dSJoel E. Denny // RUN:     -triple i386-unknown-unknown -emit-pch -o %t %s
68*83ddfa0dSJoel E. Denny // RUN: %clang_cc1 -fopenmp -fopenmp-extensions \
69*83ddfa0dSJoel E. Denny // RUN:     -fopenmp-targets=i386-pc-linux-gnu -x c++ \
70*83ddfa0dSJoel E. Denny // RUN:     -triple i386-unknown-unknown -std=c++11 -include-pch %t -verify %s \
71*83ddfa0dSJoel E. Denny // RUN:     -emit-llvm -o - | \
72*83ddfa0dSJoel E. Denny // RUN:   FileCheck %s --check-prefixes=CHECK-NOUSE-I386
73*83ddfa0dSJoel E. Denny 
74*83ddfa0dSJoel E. Denny // Map flags used in @.offload_maptypes* below:
75*83ddfa0dSJoel E. Denny //
76*83ddfa0dSJoel E. Denny // TO           = 0x1
77*83ddfa0dSJoel E. Denny // FROM         = 0x2
78*83ddfa0dSJoel E. Denny // ALWAYS       = 0x4
79*83ddfa0dSJoel E. Denny // TARGET_PARAM = 0x20
80*83ddfa0dSJoel E. Denny // CLOSE        = 0x400
81*83ddfa0dSJoel E. Denny // OMPX_HOLD    = 0x2000
82*83ddfa0dSJoel E. Denny // MEMBER_OF_1  = 0x1000000000000
83*83ddfa0dSJoel E. Denny // MEMBER_OF_5  = 0x5000000000000
84*83ddfa0dSJoel E. Denny 
85*83ddfa0dSJoel E. Denny //.
86*83ddfa0dSJoel 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*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE: @.offload_sizes = private unnamed_addr constant [1 x i64] [i64 4]
88*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE: @.offload_maptypes.1 = private unnamed_addr constant [1 x i64] [i64 [[#0x2427]]]
89*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE: @.offload_maptypes.2 = private unnamed_addr constant [3 x i64] [i64 [[#0x2020]], i64 [[#0x1000000002003]], i64 [[#0x1000000002003]]]
90*83ddfa0dSJoel E. Denny //.
91*83ddfa0dSJoel 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*83ddfa0dSJoel E. Denny // CHECK-USE-I386: @.offload_sizes = private unnamed_addr constant [1 x i64] [i64 4]
93*83ddfa0dSJoel E. Denny // CHECK-USE-I386: @.offload_maptypes.1 = private unnamed_addr constant [1 x i64] [i64 [[#0x2427]]]
94*83ddfa0dSJoel E. Denny // CHECK-USE-I386: @.offload_maptypes.2 = private unnamed_addr constant [3 x i64] [i64 [[#0x2020]], i64 [[#0x1000000002003]], i64 [[#0x1000000002003]]]
95*83ddfa0dSJoel E. Denny //.
96*83ddfa0dSJoel 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*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE: @.offload_sizes = private unnamed_addr constant [1 x i64] [i64 4]
98*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE: @.offload_maptypes.1 = private unnamed_addr constant [1 x i64] [i64 [[#0x2407]]]
99*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE: @.offload_maptypes.2 = private unnamed_addr constant [3 x i64] [i64 [[#0x2000]], i64 [[#0x1000000002003]], i64 [[#0x1000000002003]]]
100*83ddfa0dSJoel E. Denny //.
101*83ddfa0dSJoel 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*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386: @.offload_sizes = private unnamed_addr constant [1 x i64] [i64 4]
103*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386: @.offload_maptypes.1 = private unnamed_addr constant [1 x i64] [i64 [[#0x2407]]]
104*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386: @.offload_maptypes.2 = private unnamed_addr constant [3 x i64] [i64 [[#0x2000]], i64 [[#0x1000000002003]], i64 [[#0x1000000002003]]]
105*83ddfa0dSJoel E. Denny //.
106*83ddfa0dSJoel E. Denny struct ST {
107*83ddfa0dSJoel E. Denny   int i;
108*83ddfa0dSJoel E. Denny   int j;
109*83ddfa0dSJoel E. Denny   void test_present_members();
110*83ddfa0dSJoel E. Denny };
111*83ddfa0dSJoel E. Denny 
112*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-LABEL: @_Z20explicit_maps_singlei(
113*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:  entry:
114*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[II_ADDR:%.*]] = alloca i32, align 4
115*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[A:%.*]] = alloca i32, align 4
116*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[ST1:%.*]] = alloca [[STRUCT_ST:%.*]], align 4
117*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[ST2:%.*]] = alloca [[STRUCT_ST]], align 4
118*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [7 x i8*], align 8
119*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[DOTOFFLOAD_PTRS:%.*]] = alloca [7 x i8*], align 8
120*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [7 x i8*], align 8
121*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[DOTOFFLOAD_SIZES:%.*]] = alloca [7 x i64], align 8
122*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[DOTOFFLOAD_BASEPTRS3:%.*]] = alloca [1 x i8*], align 8
123*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[DOTOFFLOAD_PTRS4:%.*]] = alloca [1 x i8*], align 8
124*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[DOTOFFLOAD_MAPPERS5:%.*]] = alloca [1 x i8*], align 8
125*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    store i32 [[II:%.*]], i32* [[II_ADDR]], align 4
126*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP0:%.*]] = load i32, i32* [[II_ADDR]], align 4
127*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    store i32 [[TMP0]], i32* [[A]], align 4
128*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[I:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST1]], i32 0, i32 0
129*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[J:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST1]], i32 0, i32 1
130*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP1:%.*]] = getelementptr i32, i32* [[J]], i32 1
131*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP2:%.*]] = bitcast i32* [[I]] to i8*
132*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP3:%.*]] = bitcast i32* [[TMP1]] to i8*
133*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP4:%.*]] = ptrtoint i8* [[TMP3]] to i64
134*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP5:%.*]] = ptrtoint i8* [[TMP2]] to i64
135*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP6:%.*]] = sub i64 [[TMP4]], [[TMP5]]
136*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP7:%.*]] = sdiv exact i64 [[TMP6]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64)
137*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[I1:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST2]], i32 0, i32 0
138*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[J2:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST2]], i32 0, i32 1
139*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP8:%.*]] = getelementptr i32, i32* [[J2]], i32 1
140*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP9:%.*]] = bitcast i32* [[I1]] to i8*
141*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP10:%.*]] = bitcast i32* [[TMP8]] to i8*
142*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP11:%.*]] = ptrtoint i8* [[TMP10]] to i64
143*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP12:%.*]] = ptrtoint i8* [[TMP9]] to i64
144*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP13:%.*]] = sub i64 [[TMP11]], [[TMP12]]
145*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP14:%.*]] = sdiv exact i64 [[TMP13]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64)
146*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP15:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
147*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP16:%.*]] = bitcast i8** [[TMP15]] to %struct.ST**
148*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    store %struct.ST* [[ST1]], %struct.ST** [[TMP16]], align 8
149*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP17:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
150*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP18:%.*]] = bitcast i8** [[TMP17]] to i32**
151*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    store i32* [[I]], i32** [[TMP18]], align 8
152*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP19:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
153*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    store i64 [[TMP7]], i64* [[TMP19]], align 8
154*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP20:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
155*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    store i8* null, i8** [[TMP20]], align 8
156*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP21:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
157*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP22:%.*]] = bitcast i8** [[TMP21]] to %struct.ST**
158*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    store %struct.ST* [[ST1]], %struct.ST** [[TMP22]], align 8
159*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP23:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
160*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP24:%.*]] = bitcast i8** [[TMP23]] to i32**
161*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    store i32* [[I]], i32** [[TMP24]], align 8
162*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP25:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
163*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    store i64 4, i64* [[TMP25]], align 8
164*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP26:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1
165*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    store i8* null, i8** [[TMP26]], align 8
166*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP27:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
167*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP28:%.*]] = bitcast i8** [[TMP27]] to %struct.ST**
168*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    store %struct.ST* [[ST1]], %struct.ST** [[TMP28]], align 8
169*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP29:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
170*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP30:%.*]] = bitcast i8** [[TMP29]] to i32**
171*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    store i32* [[J]], i32** [[TMP30]], align 8
172*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP31:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
173*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    store i64 4, i64* [[TMP31]], align 8
174*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP32:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2
175*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    store i8* null, i8** [[TMP32]], align 8
176*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP33:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
177*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP34:%.*]] = bitcast i8** [[TMP33]] to i32**
178*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    store i32* [[A]], i32** [[TMP34]], align 8
179*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP35:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
180*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP36:%.*]] = bitcast i8** [[TMP35]] to i32**
181*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    store i32* [[A]], i32** [[TMP36]], align 8
182*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP37:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 3
183*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    store i64 4, i64* [[TMP37]], align 8
184*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP38:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 3
185*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    store i8* null, i8** [[TMP38]], align 8
186*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP39:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
187*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP40:%.*]] = bitcast i8** [[TMP39]] to %struct.ST**
188*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    store %struct.ST* [[ST2]], %struct.ST** [[TMP40]], align 8
189*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP41:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
190*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP42:%.*]] = bitcast i8** [[TMP41]] to i32**
191*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    store i32* [[I1]], i32** [[TMP42]], align 8
192*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP43:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 4
193*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    store i64 [[TMP14]], i64* [[TMP43]], align 8
194*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP44:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 4
195*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    store i8* null, i8** [[TMP44]], align 8
196*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP45:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 5
197*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP46:%.*]] = bitcast i8** [[TMP45]] to %struct.ST**
198*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    store %struct.ST* [[ST2]], %struct.ST** [[TMP46]], align 8
199*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP47:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 5
200*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP48:%.*]] = bitcast i8** [[TMP47]] to i32**
201*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    store i32* [[I1]], i32** [[TMP48]], align 8
202*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP49:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 5
203*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    store i64 4, i64* [[TMP49]], align 8
204*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP50:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 5
205*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    store i8* null, i8** [[TMP50]], align 8
206*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP51:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 6
207*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP52:%.*]] = bitcast i8** [[TMP51]] to %struct.ST**
208*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    store %struct.ST* [[ST2]], %struct.ST** [[TMP52]], align 8
209*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP53:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 6
210*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP54:%.*]] = bitcast i8** [[TMP53]] to i32**
211*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    store i32* [[J2]], i32** [[TMP54]], align 8
212*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP55:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 6
213*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    store i64 4, i64* [[TMP55]], align 8
214*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP56:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 6
215*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    store i8* null, i8** [[TMP56]], align 8
216*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP57:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
217*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP58:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
218*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP59:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
219*83ddfa0dSJoel E. Denny // 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*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP61:%.*]] = icmp ne i32 [[TMP60]], 0
221*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    br i1 [[TMP61]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
222*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE:       omp_offload.failed:
223*83ddfa0dSJoel E. Denny // 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]+]]
224*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    br label [[OMP_OFFLOAD_CONT]]
225*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE:       omp_offload.cont:
226*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP62:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS3]], i32 0, i32 0
227*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP63:%.*]] = bitcast i8** [[TMP62]] to i32**
228*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    store i32* [[A]], i32** [[TMP63]], align 8
229*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP64:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS4]], i32 0, i32 0
230*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP65:%.*]] = bitcast i8** [[TMP64]] to i32**
231*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    store i32* [[A]], i32** [[TMP65]], align 8
232*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP66:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_MAPPERS5]], i64 0, i64 0
233*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    store i8* null, i8** [[TMP66]], align 8
234*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP67:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS3]], i32 0, i32 0
235*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP68:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS4]], i32 0, i32 0
236*83ddfa0dSJoel E. Denny // 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*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP70:%.*]] = icmp ne i32 [[TMP69]], 0
238*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    br i1 [[TMP70]], label [[OMP_OFFLOAD_FAILED6:%.*]], label [[OMP_OFFLOAD_CONT7:%.*]]
239*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE:       omp_offload.failed6:
240*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z20explicit_maps_singlei_l668(i32* [[A]]) #[[ATTR2]]
241*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    br label [[OMP_OFFLOAD_CONT7]]
242*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE:       omp_offload.cont7:
243*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    ret void
244*83ddfa0dSJoel E. Denny //
245*83ddfa0dSJoel E. Denny // CHECK-USE-I386-LABEL: @_Z20explicit_maps_singlei(
246*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:  entry:
247*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[II_ADDR:%.*]] = alloca i32, align 4
248*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[A:%.*]] = alloca i32, align 4
249*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[ST1:%.*]] = alloca [[STRUCT_ST:%.*]], align 4
250*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[ST2:%.*]] = alloca [[STRUCT_ST]], align 4
251*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [7 x i8*], align 4
252*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[DOTOFFLOAD_PTRS:%.*]] = alloca [7 x i8*], align 4
253*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [7 x i8*], align 4
254*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[DOTOFFLOAD_SIZES:%.*]] = alloca [7 x i64], align 4
255*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[DOTOFFLOAD_BASEPTRS3:%.*]] = alloca [1 x i8*], align 4
256*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[DOTOFFLOAD_PTRS4:%.*]] = alloca [1 x i8*], align 4
257*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[DOTOFFLOAD_MAPPERS5:%.*]] = alloca [1 x i8*], align 4
258*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    store i32 [[II:%.*]], i32* [[II_ADDR]], align 4
259*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP0:%.*]] = load i32, i32* [[II_ADDR]], align 4
260*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    store i32 [[TMP0]], i32* [[A]], align 4
261*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[I:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST1]], i32 0, i32 0
262*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[J:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST1]], i32 0, i32 1
263*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP1:%.*]] = getelementptr i32, i32* [[J]], i32 1
264*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP2:%.*]] = bitcast i32* [[I]] to i8*
265*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP3:%.*]] = bitcast i32* [[TMP1]] to i8*
266*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP4:%.*]] = ptrtoint i8* [[TMP3]] to i64
267*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP5:%.*]] = ptrtoint i8* [[TMP2]] to i64
268*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP6:%.*]] = sub i64 [[TMP4]], [[TMP5]]
269*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP7:%.*]] = sdiv exact i64 [[TMP6]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64)
270*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[I1:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST2]], i32 0, i32 0
271*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[J2:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST2]], i32 0, i32 1
272*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP8:%.*]] = getelementptr i32, i32* [[J2]], i32 1
273*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP9:%.*]] = bitcast i32* [[I1]] to i8*
274*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP10:%.*]] = bitcast i32* [[TMP8]] to i8*
275*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP11:%.*]] = ptrtoint i8* [[TMP10]] to i64
276*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP12:%.*]] = ptrtoint i8* [[TMP9]] to i64
277*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP13:%.*]] = sub i64 [[TMP11]], [[TMP12]]
278*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP14:%.*]] = sdiv exact i64 [[TMP13]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64)
279*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP15:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
280*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP16:%.*]] = bitcast i8** [[TMP15]] to %struct.ST**
281*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    store %struct.ST* [[ST1]], %struct.ST** [[TMP16]], align 4
282*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP17:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
283*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP18:%.*]] = bitcast i8** [[TMP17]] to i32**
284*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    store i32* [[I]], i32** [[TMP18]], align 4
285*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP19:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
286*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    store i64 [[TMP7]], i64* [[TMP19]], align 4
287*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP20:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
288*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    store i8* null, i8** [[TMP20]], align 4
289*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP21:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
290*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP22:%.*]] = bitcast i8** [[TMP21]] to %struct.ST**
291*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    store %struct.ST* [[ST1]], %struct.ST** [[TMP22]], align 4
292*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP23:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
293*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP24:%.*]] = bitcast i8** [[TMP23]] to i32**
294*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    store i32* [[I]], i32** [[TMP24]], align 4
295*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP25:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
296*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    store i64 4, i64* [[TMP25]], align 4
297*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP26:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1
298*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    store i8* null, i8** [[TMP26]], align 4
299*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP27:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
300*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP28:%.*]] = bitcast i8** [[TMP27]] to %struct.ST**
301*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    store %struct.ST* [[ST1]], %struct.ST** [[TMP28]], align 4
302*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP29:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
303*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP30:%.*]] = bitcast i8** [[TMP29]] to i32**
304*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    store i32* [[J]], i32** [[TMP30]], align 4
305*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP31:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
306*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    store i64 4, i64* [[TMP31]], align 4
307*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP32:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2
308*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    store i8* null, i8** [[TMP32]], align 4
309*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP33:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
310*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP34:%.*]] = bitcast i8** [[TMP33]] to i32**
311*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    store i32* [[A]], i32** [[TMP34]], align 4
312*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP35:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
313*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP36:%.*]] = bitcast i8** [[TMP35]] to i32**
314*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    store i32* [[A]], i32** [[TMP36]], align 4
315*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP37:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 3
316*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    store i64 4, i64* [[TMP37]], align 4
317*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP38:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 3
318*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    store i8* null, i8** [[TMP38]], align 4
319*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP39:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
320*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP40:%.*]] = bitcast i8** [[TMP39]] to %struct.ST**
321*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    store %struct.ST* [[ST2]], %struct.ST** [[TMP40]], align 4
322*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP41:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
323*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP42:%.*]] = bitcast i8** [[TMP41]] to i32**
324*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    store i32* [[I1]], i32** [[TMP42]], align 4
325*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP43:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 4
326*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    store i64 [[TMP14]], i64* [[TMP43]], align 4
327*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP44:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 4
328*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    store i8* null, i8** [[TMP44]], align 4
329*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP45:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 5
330*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP46:%.*]] = bitcast i8** [[TMP45]] to %struct.ST**
331*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    store %struct.ST* [[ST2]], %struct.ST** [[TMP46]], align 4
332*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP47:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 5
333*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP48:%.*]] = bitcast i8** [[TMP47]] to i32**
334*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    store i32* [[I1]], i32** [[TMP48]], align 4
335*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP49:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 5
336*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    store i64 4, i64* [[TMP49]], align 4
337*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP50:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 5
338*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    store i8* null, i8** [[TMP50]], align 4
339*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP51:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 6
340*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP52:%.*]] = bitcast i8** [[TMP51]] to %struct.ST**
341*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    store %struct.ST* [[ST2]], %struct.ST** [[TMP52]], align 4
342*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP53:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 6
343*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP54:%.*]] = bitcast i8** [[TMP53]] to i32**
344*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    store i32* [[J2]], i32** [[TMP54]], align 4
345*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP55:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 6
346*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    store i64 4, i64* [[TMP55]], align 4
347*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP56:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 6
348*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    store i8* null, i8** [[TMP56]], align 4
349*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP57:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
350*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP58:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
351*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP59:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
352*83ddfa0dSJoel E. Denny // 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*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP61:%.*]] = icmp ne i32 [[TMP60]], 0
354*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    br i1 [[TMP61]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
355*83ddfa0dSJoel E. Denny // CHECK-USE-I386:       omp_offload.failed:
356*83ddfa0dSJoel E. Denny // 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]+]]
357*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    br label [[OMP_OFFLOAD_CONT]]
358*83ddfa0dSJoel E. Denny // CHECK-USE-I386:       omp_offload.cont:
359*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP62:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS3]], i32 0, i32 0
360*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP63:%.*]] = bitcast i8** [[TMP62]] to i32**
361*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    store i32* [[A]], i32** [[TMP63]], align 4
362*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP64:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS4]], i32 0, i32 0
363*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP65:%.*]] = bitcast i8** [[TMP64]] to i32**
364*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    store i32* [[A]], i32** [[TMP65]], align 4
365*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP66:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_MAPPERS5]], i32 0, i32 0
366*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    store i8* null, i8** [[TMP66]], align 4
367*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP67:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS3]], i32 0, i32 0
368*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP68:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS4]], i32 0, i32 0
369*83ddfa0dSJoel E. Denny // 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*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP70:%.*]] = icmp ne i32 [[TMP69]], 0
371*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    br i1 [[TMP70]], label [[OMP_OFFLOAD_FAILED6:%.*]], label [[OMP_OFFLOAD_CONT7:%.*]]
372*83ddfa0dSJoel E. Denny // CHECK-USE-I386:       omp_offload.failed6:
373*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z20explicit_maps_singlei_l668(i32* [[A]]) #[[ATTR2]]
374*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    br label [[OMP_OFFLOAD_CONT7]]
375*83ddfa0dSJoel E. Denny // CHECK-USE-I386:       omp_offload.cont7:
376*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    ret void
377*83ddfa0dSJoel E. Denny //
378*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-LABEL: @_Z20explicit_maps_singlei(
379*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:  entry:
380*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[II_ADDR:%.*]] = alloca i32, align 4
381*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[A:%.*]] = alloca i32, align 4
382*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[ST1:%.*]] = alloca [[STRUCT_ST:%.*]], align 4
383*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[ST2:%.*]] = alloca [[STRUCT_ST]], align 4
384*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [7 x i8*], align 8
385*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[DOTOFFLOAD_PTRS:%.*]] = alloca [7 x i8*], align 8
386*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [7 x i8*], align 8
387*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[DOTOFFLOAD_SIZES:%.*]] = alloca [7 x i64], align 8
388*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[DOTOFFLOAD_BASEPTRS3:%.*]] = alloca [1 x i8*], align 8
389*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[DOTOFFLOAD_PTRS4:%.*]] = alloca [1 x i8*], align 8
390*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[DOTOFFLOAD_MAPPERS5:%.*]] = alloca [1 x i8*], align 8
391*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    store i32 [[II:%.*]], i32* [[II_ADDR]], align 4
392*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP0:%.*]] = load i32, i32* [[II_ADDR]], align 4
393*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    store i32 [[TMP0]], i32* [[A]], align 4
394*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[I:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST1]], i32 0, i32 0
395*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[J:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST1]], i32 0, i32 1
396*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP1:%.*]] = getelementptr i32, i32* [[J]], i32 1
397*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP2:%.*]] = bitcast i32* [[I]] to i8*
398*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP3:%.*]] = bitcast i32* [[TMP1]] to i8*
399*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP4:%.*]] = ptrtoint i8* [[TMP3]] to i64
400*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP5:%.*]] = ptrtoint i8* [[TMP2]] to i64
401*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP6:%.*]] = sub i64 [[TMP4]], [[TMP5]]
402*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP7:%.*]] = sdiv exact i64 [[TMP6]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64)
403*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[I1:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST2]], i32 0, i32 0
404*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[J2:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST2]], i32 0, i32 1
405*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP8:%.*]] = getelementptr i32, i32* [[J2]], i32 1
406*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP9:%.*]] = bitcast i32* [[I1]] to i8*
407*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP10:%.*]] = bitcast i32* [[TMP8]] to i8*
408*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP11:%.*]] = ptrtoint i8* [[TMP10]] to i64
409*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP12:%.*]] = ptrtoint i8* [[TMP9]] to i64
410*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP13:%.*]] = sub i64 [[TMP11]], [[TMP12]]
411*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP14:%.*]] = sdiv exact i64 [[TMP13]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64)
412*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP15:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
413*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP16:%.*]] = bitcast i8** [[TMP15]] to %struct.ST**
414*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    store %struct.ST* [[ST1]], %struct.ST** [[TMP16]], align 8
415*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP17:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
416*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP18:%.*]] = bitcast i8** [[TMP17]] to i32**
417*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    store i32* [[I]], i32** [[TMP18]], align 8
418*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP19:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
419*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    store i64 [[TMP7]], i64* [[TMP19]], align 8
420*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP20:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
421*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    store i8* null, i8** [[TMP20]], align 8
422*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP21:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
423*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP22:%.*]] = bitcast i8** [[TMP21]] to %struct.ST**
424*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    store %struct.ST* [[ST1]], %struct.ST** [[TMP22]], align 8
425*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP23:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
426*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP24:%.*]] = bitcast i8** [[TMP23]] to i32**
427*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    store i32* [[I]], i32** [[TMP24]], align 8
428*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP25:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
429*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    store i64 4, i64* [[TMP25]], align 8
430*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP26:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1
431*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    store i8* null, i8** [[TMP26]], align 8
432*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP27:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
433*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP28:%.*]] = bitcast i8** [[TMP27]] to %struct.ST**
434*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    store %struct.ST* [[ST1]], %struct.ST** [[TMP28]], align 8
435*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP29:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
436*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP30:%.*]] = bitcast i8** [[TMP29]] to i32**
437*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    store i32* [[J]], i32** [[TMP30]], align 8
438*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP31:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
439*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    store i64 4, i64* [[TMP31]], align 8
440*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP32:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2
441*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    store i8* null, i8** [[TMP32]], align 8
442*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP33:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
443*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP34:%.*]] = bitcast i8** [[TMP33]] to i32**
444*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    store i32* [[A]], i32** [[TMP34]], align 8
445*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP35:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
446*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP36:%.*]] = bitcast i8** [[TMP35]] to i32**
447*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    store i32* [[A]], i32** [[TMP36]], align 8
448*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP37:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 3
449*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    store i64 4, i64* [[TMP37]], align 8
450*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP38:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 3
451*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    store i8* null, i8** [[TMP38]], align 8
452*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP39:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
453*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP40:%.*]] = bitcast i8** [[TMP39]] to %struct.ST**
454*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    store %struct.ST* [[ST2]], %struct.ST** [[TMP40]], align 8
455*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP41:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
456*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP42:%.*]] = bitcast i8** [[TMP41]] to i32**
457*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    store i32* [[I1]], i32** [[TMP42]], align 8
458*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP43:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 4
459*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    store i64 [[TMP14]], i64* [[TMP43]], align 8
460*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP44:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 4
461*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    store i8* null, i8** [[TMP44]], align 8
462*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP45:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 5
463*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP46:%.*]] = bitcast i8** [[TMP45]] to %struct.ST**
464*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    store %struct.ST* [[ST2]], %struct.ST** [[TMP46]], align 8
465*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP47:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 5
466*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP48:%.*]] = bitcast i8** [[TMP47]] to i32**
467*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    store i32* [[I1]], i32** [[TMP48]], align 8
468*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP49:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 5
469*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    store i64 4, i64* [[TMP49]], align 8
470*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP50:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 5
471*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    store i8* null, i8** [[TMP50]], align 8
472*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP51:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 6
473*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP52:%.*]] = bitcast i8** [[TMP51]] to %struct.ST**
474*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    store %struct.ST* [[ST2]], %struct.ST** [[TMP52]], align 8
475*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP53:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 6
476*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP54:%.*]] = bitcast i8** [[TMP53]] to i32**
477*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    store i32* [[J2]], i32** [[TMP54]], align 8
478*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP55:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 6
479*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    store i64 4, i64* [[TMP55]], align 8
480*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP56:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 6
481*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    store i8* null, i8** [[TMP56]], align 8
482*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP57:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
483*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP58:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
484*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP59:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
485*83ddfa0dSJoel E. Denny // 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*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP61:%.*]] = icmp ne i32 [[TMP60]], 0
487*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    br i1 [[TMP61]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
488*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE:       omp_offload.failed:
489*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z20explicit_maps_singlei_l654() #[[ATTR2:[0-9]+]]
490*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    br label [[OMP_OFFLOAD_CONT]]
491*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE:       omp_offload.cont:
492*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP62:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS3]], i32 0, i32 0
493*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP63:%.*]] = bitcast i8** [[TMP62]] to i32**
494*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    store i32* [[A]], i32** [[TMP63]], align 8
495*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP64:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS4]], i32 0, i32 0
496*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP65:%.*]] = bitcast i8** [[TMP64]] to i32**
497*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    store i32* [[A]], i32** [[TMP65]], align 8
498*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP66:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_MAPPERS5]], i64 0, i64 0
499*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    store i8* null, i8** [[TMP66]], align 8
500*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP67:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS3]], i32 0, i32 0
501*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP68:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS4]], i32 0, i32 0
502*83ddfa0dSJoel E. Denny // 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*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP70:%.*]] = icmp ne i32 [[TMP69]], 0
504*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    br i1 [[TMP70]], label [[OMP_OFFLOAD_FAILED6:%.*]], label [[OMP_OFFLOAD_CONT7:%.*]]
505*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE:       omp_offload.failed6:
506*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z20explicit_maps_singlei_l668() #[[ATTR2]]
507*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    br label [[OMP_OFFLOAD_CONT7]]
508*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE:       omp_offload.cont7:
509*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    ret void
510*83ddfa0dSJoel E. Denny //
511*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-LABEL: @_Z20explicit_maps_singlei(
512*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:  entry:
513*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[II_ADDR:%.*]] = alloca i32, align 4
514*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[A:%.*]] = alloca i32, align 4
515*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[ST1:%.*]] = alloca [[STRUCT_ST:%.*]], align 4
516*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[ST2:%.*]] = alloca [[STRUCT_ST]], align 4
517*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [7 x i8*], align 4
518*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[DOTOFFLOAD_PTRS:%.*]] = alloca [7 x i8*], align 4
519*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [7 x i8*], align 4
520*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[DOTOFFLOAD_SIZES:%.*]] = alloca [7 x i64], align 4
521*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[DOTOFFLOAD_BASEPTRS3:%.*]] = alloca [1 x i8*], align 4
522*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[DOTOFFLOAD_PTRS4:%.*]] = alloca [1 x i8*], align 4
523*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[DOTOFFLOAD_MAPPERS5:%.*]] = alloca [1 x i8*], align 4
524*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    store i32 [[II:%.*]], i32* [[II_ADDR]], align 4
525*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP0:%.*]] = load i32, i32* [[II_ADDR]], align 4
526*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    store i32 [[TMP0]], i32* [[A]], align 4
527*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[I:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST1]], i32 0, i32 0
528*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[J:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST1]], i32 0, i32 1
529*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP1:%.*]] = getelementptr i32, i32* [[J]], i32 1
530*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP2:%.*]] = bitcast i32* [[I]] to i8*
531*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP3:%.*]] = bitcast i32* [[TMP1]] to i8*
532*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP4:%.*]] = ptrtoint i8* [[TMP3]] to i64
533*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP5:%.*]] = ptrtoint i8* [[TMP2]] to i64
534*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP6:%.*]] = sub i64 [[TMP4]], [[TMP5]]
535*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP7:%.*]] = sdiv exact i64 [[TMP6]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64)
536*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[I1:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST2]], i32 0, i32 0
537*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[J2:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[ST2]], i32 0, i32 1
538*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP8:%.*]] = getelementptr i32, i32* [[J2]], i32 1
539*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP9:%.*]] = bitcast i32* [[I1]] to i8*
540*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP10:%.*]] = bitcast i32* [[TMP8]] to i8*
541*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP11:%.*]] = ptrtoint i8* [[TMP10]] to i64
542*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP12:%.*]] = ptrtoint i8* [[TMP9]] to i64
543*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP13:%.*]] = sub i64 [[TMP11]], [[TMP12]]
544*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP14:%.*]] = sdiv exact i64 [[TMP13]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64)
545*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP15:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
546*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP16:%.*]] = bitcast i8** [[TMP15]] to %struct.ST**
547*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    store %struct.ST* [[ST1]], %struct.ST** [[TMP16]], align 4
548*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP17:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
549*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP18:%.*]] = bitcast i8** [[TMP17]] to i32**
550*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    store i32* [[I]], i32** [[TMP18]], align 4
551*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP19:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
552*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    store i64 [[TMP7]], i64* [[TMP19]], align 4
553*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP20:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
554*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    store i8* null, i8** [[TMP20]], align 4
555*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP21:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
556*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP22:%.*]] = bitcast i8** [[TMP21]] to %struct.ST**
557*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    store %struct.ST* [[ST1]], %struct.ST** [[TMP22]], align 4
558*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP23:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
559*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP24:%.*]] = bitcast i8** [[TMP23]] to i32**
560*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    store i32* [[I]], i32** [[TMP24]], align 4
561*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP25:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
562*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    store i64 4, i64* [[TMP25]], align 4
563*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP26:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1
564*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    store i8* null, i8** [[TMP26]], align 4
565*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP27:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
566*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP28:%.*]] = bitcast i8** [[TMP27]] to %struct.ST**
567*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    store %struct.ST* [[ST1]], %struct.ST** [[TMP28]], align 4
568*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP29:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
569*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP30:%.*]] = bitcast i8** [[TMP29]] to i32**
570*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    store i32* [[J]], i32** [[TMP30]], align 4
571*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP31:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
572*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    store i64 4, i64* [[TMP31]], align 4
573*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP32:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2
574*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    store i8* null, i8** [[TMP32]], align 4
575*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP33:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 3
576*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP34:%.*]] = bitcast i8** [[TMP33]] to i32**
577*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    store i32* [[A]], i32** [[TMP34]], align 4
578*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP35:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 3
579*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP36:%.*]] = bitcast i8** [[TMP35]] to i32**
580*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    store i32* [[A]], i32** [[TMP36]], align 4
581*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP37:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 3
582*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    store i64 4, i64* [[TMP37]], align 4
583*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP38:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 3
584*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    store i8* null, i8** [[TMP38]], align 4
585*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP39:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 4
586*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP40:%.*]] = bitcast i8** [[TMP39]] to %struct.ST**
587*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    store %struct.ST* [[ST2]], %struct.ST** [[TMP40]], align 4
588*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP41:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 4
589*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP42:%.*]] = bitcast i8** [[TMP41]] to i32**
590*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    store i32* [[I1]], i32** [[TMP42]], align 4
591*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP43:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 4
592*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    store i64 [[TMP14]], i64* [[TMP43]], align 4
593*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP44:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 4
594*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    store i8* null, i8** [[TMP44]], align 4
595*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP45:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 5
596*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP46:%.*]] = bitcast i8** [[TMP45]] to %struct.ST**
597*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    store %struct.ST* [[ST2]], %struct.ST** [[TMP46]], align 4
598*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP47:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 5
599*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP48:%.*]] = bitcast i8** [[TMP47]] to i32**
600*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    store i32* [[I1]], i32** [[TMP48]], align 4
601*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP49:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 5
602*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    store i64 4, i64* [[TMP49]], align 4
603*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP50:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 5
604*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    store i8* null, i8** [[TMP50]], align 4
605*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP51:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 6
606*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP52:%.*]] = bitcast i8** [[TMP51]] to %struct.ST**
607*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    store %struct.ST* [[ST2]], %struct.ST** [[TMP52]], align 4
608*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP53:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 6
609*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP54:%.*]] = bitcast i8** [[TMP53]] to i32**
610*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    store i32* [[J2]], i32** [[TMP54]], align 4
611*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP55:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 6
612*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    store i64 4, i64* [[TMP55]], align 4
613*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP56:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 6
614*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    store i8* null, i8** [[TMP56]], align 4
615*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP57:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
616*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP58:%.*]] = getelementptr inbounds [7 x i8*], [7 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
617*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP59:%.*]] = getelementptr inbounds [7 x i64], [7 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
618*83ddfa0dSJoel E. Denny // 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*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP61:%.*]] = icmp ne i32 [[TMP60]], 0
620*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    br i1 [[TMP61]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
621*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386:       omp_offload.failed:
622*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z20explicit_maps_singlei_l654() #[[ATTR2:[0-9]+]]
623*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    br label [[OMP_OFFLOAD_CONT]]
624*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386:       omp_offload.cont:
625*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP62:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS3]], i32 0, i32 0
626*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP63:%.*]] = bitcast i8** [[TMP62]] to i32**
627*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    store i32* [[A]], i32** [[TMP63]], align 4
628*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP64:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS4]], i32 0, i32 0
629*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP65:%.*]] = bitcast i8** [[TMP64]] to i32**
630*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    store i32* [[A]], i32** [[TMP65]], align 4
631*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP66:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_MAPPERS5]], i32 0, i32 0
632*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    store i8* null, i8** [[TMP66]], align 4
633*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP67:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_BASEPTRS3]], i32 0, i32 0
634*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP68:%.*]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[DOTOFFLOAD_PTRS4]], i32 0, i32 0
635*83ddfa0dSJoel E. Denny // 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*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP70:%.*]] = icmp ne i32 [[TMP69]], 0
637*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    br i1 [[TMP70]], label [[OMP_OFFLOAD_FAILED6:%.*]], label [[OMP_OFFLOAD_CONT7:%.*]]
638*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386:       omp_offload.failed6:
639*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z20explicit_maps_singlei_l668() #[[ATTR2]]
640*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    br label [[OMP_OFFLOAD_CONT7]]
641*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386:       omp_offload.cont7:
642*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    ret void
643*83ddfa0dSJoel E. Denny //
644*83ddfa0dSJoel E. Denny void explicit_maps_single(int ii) {
645*83ddfa0dSJoel E. Denny 
646*83ddfa0dSJoel E. Denny   // Map of a scalar.
647*83ddfa0dSJoel E. Denny   int a = ii;
648*83ddfa0dSJoel E. Denny 
649*83ddfa0dSJoel E. Denny   struct ST st1;
650*83ddfa0dSJoel E. Denny   struct ST st2;
651*83ddfa0dSJoel E. Denny 
652*83ddfa0dSJoel E. Denny   // Make sure the struct picks up ompx_hold even if another element of the
653*83ddfa0dSJoel E. Denny   // struct doesn't have ompx_hold.
654*83ddfa0dSJoel E. Denny   #pragma omp target map(tofrom : st1.i) \
655*83ddfa0dSJoel E. Denny                      map(ompx_hold, tofrom : a, st1.j, st2.i) \
656*83ddfa0dSJoel E. Denny                      map(tofrom : st2.j)
657*83ddfa0dSJoel E. Denny   {
658*83ddfa0dSJoel E. Denny #ifdef USE
659*83ddfa0dSJoel E. Denny     st1.i++;
660*83ddfa0dSJoel E. Denny     a++;
661*83ddfa0dSJoel E. Denny     st1.j++;
662*83ddfa0dSJoel E. Denny     st2.i++;
663*83ddfa0dSJoel E. Denny     st2.j++;
664*83ddfa0dSJoel E. Denny #endif
665*83ddfa0dSJoel E. Denny   }
666*83ddfa0dSJoel E. Denny 
667*83ddfa0dSJoel E. Denny   // Always Close Hold.
668*83ddfa0dSJoel E. Denny   #pragma omp target map(always close ompx_hold tofrom: a)
669*83ddfa0dSJoel E. Denny   {
670*83ddfa0dSJoel E. Denny #ifdef USE
671*83ddfa0dSJoel E. Denny     a++;
672*83ddfa0dSJoel E. Denny #endif
673*83ddfa0dSJoel E. Denny   }
674*83ddfa0dSJoel E. Denny }
675*83ddfa0dSJoel E. Denny 
676*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-LABEL: @_ZN2ST20test_present_membersEv(
677*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:  entry:
678*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[THIS_ADDR:%.*]] = alloca %struct.ST*, align 8
679*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [3 x i8*], align 8
680*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[DOTOFFLOAD_PTRS:%.*]] = alloca [3 x i8*], align 8
681*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [3 x i8*], align 8
682*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[DOTOFFLOAD_SIZES:%.*]] = alloca [3 x i64], align 8
683*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    store %struct.ST* [[THIS:%.*]], %struct.ST** [[THIS_ADDR]], align 8
684*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[THIS1:%.*]] = load %struct.ST*, %struct.ST** [[THIS_ADDR]], align 8
685*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[I:%.*]] = getelementptr inbounds [[STRUCT_ST:%.*]], %struct.ST* [[THIS1]], i32 0, i32 0
686*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[J:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[THIS1]], i32 0, i32 1
687*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP0:%.*]] = getelementptr i32, i32* [[J]], i32 1
688*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP1:%.*]] = bitcast i32* [[I]] to i8*
689*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP2:%.*]] = bitcast i32* [[TMP0]] to i8*
690*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP3:%.*]] = ptrtoint i8* [[TMP2]] to i64
691*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP4:%.*]] = ptrtoint i8* [[TMP1]] to i64
692*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP5:%.*]] = sub i64 [[TMP3]], [[TMP4]]
693*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP6:%.*]] = sdiv exact i64 [[TMP5]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64)
694*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP7:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
695*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP8:%.*]] = bitcast i8** [[TMP7]] to %struct.ST**
696*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    store %struct.ST* [[THIS1]], %struct.ST** [[TMP8]], align 8
697*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP9:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
698*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP10:%.*]] = bitcast i8** [[TMP9]] to i32**
699*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    store i32* [[I]], i32** [[TMP10]], align 8
700*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP11:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
701*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    store i64 [[TMP6]], i64* [[TMP11]], align 8
702*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP12:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
703*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    store i8* null, i8** [[TMP12]], align 8
704*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP13:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
705*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP14:%.*]] = bitcast i8** [[TMP13]] to %struct.ST**
706*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    store %struct.ST* [[THIS1]], %struct.ST** [[TMP14]], align 8
707*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP15:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
708*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP16:%.*]] = bitcast i8** [[TMP15]] to i32**
709*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    store i32* [[I]], i32** [[TMP16]], align 8
710*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP17:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
711*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    store i64 4, i64* [[TMP17]], align 8
712*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP18:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1
713*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    store i8* null, i8** [[TMP18]], align 8
714*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP19:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
715*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP20:%.*]] = bitcast i8** [[TMP19]] to %struct.ST**
716*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    store %struct.ST* [[THIS1]], %struct.ST** [[TMP20]], align 8
717*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP21:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
718*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP22:%.*]] = bitcast i8** [[TMP21]] to i32**
719*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    store i32* [[J]], i32** [[TMP22]], align 8
720*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP23:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
721*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    store i64 4, i64* [[TMP23]], align 8
722*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP24:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2
723*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    store i8* null, i8** [[TMP24]], align 8
724*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP25:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
725*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP26:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
726*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP27:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
727*83ddfa0dSJoel E. Denny // 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*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    [[TMP29:%.*]] = icmp ne i32 [[TMP28]], 0
729*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    br i1 [[TMP29]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
730*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE:       omp_offload.failed:
731*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2ST20test_present_membersEv_l919(%struct.ST* [[THIS1]]) #[[ATTR2]]
732*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    br label [[OMP_OFFLOAD_CONT]]
733*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE:       omp_offload.cont:
734*83ddfa0dSJoel E. Denny // CHECK-USE-PPC64LE-NEXT:    ret void
735*83ddfa0dSJoel E. Denny //
736*83ddfa0dSJoel E. Denny // CHECK-USE-I386-LABEL: @_ZN2ST20test_present_membersEv(
737*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:  entry:
738*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[THIS_ADDR:%.*]] = alloca %struct.ST*, align 4
739*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [3 x i8*], align 4
740*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[DOTOFFLOAD_PTRS:%.*]] = alloca [3 x i8*], align 4
741*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [3 x i8*], align 4
742*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[DOTOFFLOAD_SIZES:%.*]] = alloca [3 x i64], align 4
743*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    store %struct.ST* [[THIS:%.*]], %struct.ST** [[THIS_ADDR]], align 4
744*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[THIS1:%.*]] = load %struct.ST*, %struct.ST** [[THIS_ADDR]], align 4
745*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[I:%.*]] = getelementptr inbounds [[STRUCT_ST:%.*]], %struct.ST* [[THIS1]], i32 0, i32 0
746*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[J:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[THIS1]], i32 0, i32 1
747*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP0:%.*]] = getelementptr i32, i32* [[J]], i32 1
748*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP1:%.*]] = bitcast i32* [[I]] to i8*
749*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP2:%.*]] = bitcast i32* [[TMP0]] to i8*
750*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP3:%.*]] = ptrtoint i8* [[TMP2]] to i64
751*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP4:%.*]] = ptrtoint i8* [[TMP1]] to i64
752*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP5:%.*]] = sub i64 [[TMP3]], [[TMP4]]
753*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP6:%.*]] = sdiv exact i64 [[TMP5]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64)
754*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP7:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
755*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP8:%.*]] = bitcast i8** [[TMP7]] to %struct.ST**
756*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    store %struct.ST* [[THIS1]], %struct.ST** [[TMP8]], align 4
757*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP9:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
758*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP10:%.*]] = bitcast i8** [[TMP9]] to i32**
759*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    store i32* [[I]], i32** [[TMP10]], align 4
760*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP11:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
761*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    store i64 [[TMP6]], i64* [[TMP11]], align 4
762*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP12:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
763*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    store i8* null, i8** [[TMP12]], align 4
764*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP13:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
765*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP14:%.*]] = bitcast i8** [[TMP13]] to %struct.ST**
766*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    store %struct.ST* [[THIS1]], %struct.ST** [[TMP14]], align 4
767*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP15:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
768*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP16:%.*]] = bitcast i8** [[TMP15]] to i32**
769*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    store i32* [[I]], i32** [[TMP16]], align 4
770*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP17:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
771*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    store i64 4, i64* [[TMP17]], align 4
772*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP18:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1
773*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    store i8* null, i8** [[TMP18]], align 4
774*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP19:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
775*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP20:%.*]] = bitcast i8** [[TMP19]] to %struct.ST**
776*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    store %struct.ST* [[THIS1]], %struct.ST** [[TMP20]], align 4
777*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP21:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
778*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP22:%.*]] = bitcast i8** [[TMP21]] to i32**
779*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    store i32* [[J]], i32** [[TMP22]], align 4
780*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP23:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
781*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    store i64 4, i64* [[TMP23]], align 4
782*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP24:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2
783*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    store i8* null, i8** [[TMP24]], align 4
784*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP25:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
785*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP26:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
786*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP27:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
787*83ddfa0dSJoel E. Denny // 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*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    [[TMP29:%.*]] = icmp ne i32 [[TMP28]], 0
789*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    br i1 [[TMP29]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
790*83ddfa0dSJoel E. Denny // CHECK-USE-I386:       omp_offload.failed:
791*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2ST20test_present_membersEv_l919(%struct.ST* [[THIS1]]) #[[ATTR2]]
792*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    br label [[OMP_OFFLOAD_CONT]]
793*83ddfa0dSJoel E. Denny // CHECK-USE-I386:       omp_offload.cont:
794*83ddfa0dSJoel E. Denny // CHECK-USE-I386-NEXT:    ret void
795*83ddfa0dSJoel E. Denny //
796*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-LABEL: @_ZN2ST20test_present_membersEv(
797*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:  entry:
798*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[THIS_ADDR:%.*]] = alloca %struct.ST*, align 8
799*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [3 x i8*], align 8
800*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[DOTOFFLOAD_PTRS:%.*]] = alloca [3 x i8*], align 8
801*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [3 x i8*], align 8
802*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[DOTOFFLOAD_SIZES:%.*]] = alloca [3 x i64], align 8
803*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    store %struct.ST* [[THIS:%.*]], %struct.ST** [[THIS_ADDR]], align 8
804*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[THIS1:%.*]] = load %struct.ST*, %struct.ST** [[THIS_ADDR]], align 8
805*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[I:%.*]] = getelementptr inbounds [[STRUCT_ST:%.*]], %struct.ST* [[THIS1]], i32 0, i32 0
806*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[J:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[THIS1]], i32 0, i32 1
807*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP0:%.*]] = getelementptr i32, i32* [[J]], i32 1
808*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP1:%.*]] = bitcast i32* [[I]] to i8*
809*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP2:%.*]] = bitcast i32* [[TMP0]] to i8*
810*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP3:%.*]] = ptrtoint i8* [[TMP2]] to i64
811*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP4:%.*]] = ptrtoint i8* [[TMP1]] to i64
812*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP5:%.*]] = sub i64 [[TMP3]], [[TMP4]]
813*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP6:%.*]] = sdiv exact i64 [[TMP5]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64)
814*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP7:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
815*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP8:%.*]] = bitcast i8** [[TMP7]] to %struct.ST**
816*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    store %struct.ST* [[THIS1]], %struct.ST** [[TMP8]], align 8
817*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP9:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
818*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP10:%.*]] = bitcast i8** [[TMP9]] to i32**
819*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    store i32* [[I]], i32** [[TMP10]], align 8
820*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP11:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
821*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    store i64 [[TMP6]], i64* [[TMP11]], align 8
822*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP12:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
823*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    store i8* null, i8** [[TMP12]], align 8
824*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP13:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
825*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP14:%.*]] = bitcast i8** [[TMP13]] to %struct.ST**
826*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    store %struct.ST* [[THIS1]], %struct.ST** [[TMP14]], align 8
827*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP15:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
828*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP16:%.*]] = bitcast i8** [[TMP15]] to i32**
829*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    store i32* [[I]], i32** [[TMP16]], align 8
830*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP17:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
831*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    store i64 4, i64* [[TMP17]], align 8
832*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP18:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 1
833*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    store i8* null, i8** [[TMP18]], align 8
834*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP19:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
835*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP20:%.*]] = bitcast i8** [[TMP19]] to %struct.ST**
836*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    store %struct.ST* [[THIS1]], %struct.ST** [[TMP20]], align 8
837*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP21:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
838*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP22:%.*]] = bitcast i8** [[TMP21]] to i32**
839*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    store i32* [[J]], i32** [[TMP22]], align 8
840*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP23:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
841*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    store i64 4, i64* [[TMP23]], align 8
842*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP24:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i64 0, i64 2
843*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    store i8* null, i8** [[TMP24]], align 8
844*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP25:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
845*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP26:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
846*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP27:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
847*83ddfa0dSJoel E. Denny // 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*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    [[TMP29:%.*]] = icmp ne i32 [[TMP28]], 0
849*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    br i1 [[TMP29]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
850*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE:       omp_offload.failed:
851*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2ST20test_present_membersEv_l919() #[[ATTR2]]
852*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    br label [[OMP_OFFLOAD_CONT]]
853*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE:       omp_offload.cont:
854*83ddfa0dSJoel E. Denny // CHECK-NOUSE-PPC64LE-NEXT:    ret void
855*83ddfa0dSJoel E. Denny //
856*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-LABEL: @_ZN2ST20test_present_membersEv(
857*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:  entry:
858*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[THIS_ADDR:%.*]] = alloca %struct.ST*, align 4
859*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [3 x i8*], align 4
860*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[DOTOFFLOAD_PTRS:%.*]] = alloca [3 x i8*], align 4
861*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [3 x i8*], align 4
862*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[DOTOFFLOAD_SIZES:%.*]] = alloca [3 x i64], align 4
863*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    store %struct.ST* [[THIS:%.*]], %struct.ST** [[THIS_ADDR]], align 4
864*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[THIS1:%.*]] = load %struct.ST*, %struct.ST** [[THIS_ADDR]], align 4
865*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[I:%.*]] = getelementptr inbounds [[STRUCT_ST:%.*]], %struct.ST* [[THIS1]], i32 0, i32 0
866*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[J:%.*]] = getelementptr inbounds [[STRUCT_ST]], %struct.ST* [[THIS1]], i32 0, i32 1
867*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP0:%.*]] = getelementptr i32, i32* [[J]], i32 1
868*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP1:%.*]] = bitcast i32* [[I]] to i8*
869*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP2:%.*]] = bitcast i32* [[TMP0]] to i8*
870*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP3:%.*]] = ptrtoint i8* [[TMP2]] to i64
871*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP4:%.*]] = ptrtoint i8* [[TMP1]] to i64
872*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP5:%.*]] = sub i64 [[TMP3]], [[TMP4]]
873*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP6:%.*]] = sdiv exact i64 [[TMP5]], ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i64)
874*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP7:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
875*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP8:%.*]] = bitcast i8** [[TMP7]] to %struct.ST**
876*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    store %struct.ST* [[THIS1]], %struct.ST** [[TMP8]], align 4
877*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP9:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
878*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP10:%.*]] = bitcast i8** [[TMP9]] to i32**
879*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    store i32* [[I]], i32** [[TMP10]], align 4
880*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP11:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
881*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    store i64 [[TMP6]], i64* [[TMP11]], align 4
882*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP12:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
883*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    store i8* null, i8** [[TMP12]], align 4
884*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP13:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 1
885*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP14:%.*]] = bitcast i8** [[TMP13]] to %struct.ST**
886*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    store %struct.ST* [[THIS1]], %struct.ST** [[TMP14]], align 4
887*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP15:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 1
888*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP16:%.*]] = bitcast i8** [[TMP15]] to i32**
889*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    store i32* [[I]], i32** [[TMP16]], align 4
890*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP17:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 1
891*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    store i64 4, i64* [[TMP17]], align 4
892*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP18:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 1
893*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    store i8* null, i8** [[TMP18]], align 4
894*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP19:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 2
895*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP20:%.*]] = bitcast i8** [[TMP19]] to %struct.ST**
896*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    store %struct.ST* [[THIS1]], %struct.ST** [[TMP20]], align 4
897*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP21:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 2
898*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP22:%.*]] = bitcast i8** [[TMP21]] to i32**
899*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    store i32* [[J]], i32** [[TMP22]], align 4
900*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP23:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 2
901*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    store i64 4, i64* [[TMP23]], align 4
902*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP24:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_MAPPERS]], i32 0, i32 2
903*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    store i8* null, i8** [[TMP24]], align 4
904*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP25:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
905*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP26:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[DOTOFFLOAD_PTRS]], i32 0, i32 0
906*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP27:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[DOTOFFLOAD_SIZES]], i32 0, i32 0
907*83ddfa0dSJoel E. Denny // 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*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    [[TMP29:%.*]] = icmp ne i32 [[TMP28]], 0
909*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    br i1 [[TMP29]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
910*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386:       omp_offload.failed:
911*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2ST20test_present_membersEv_l919() #[[ATTR2]]
912*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    br label [[OMP_OFFLOAD_CONT]]
913*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386:       omp_offload.cont:
914*83ddfa0dSJoel E. Denny // CHECK-NOUSE-I386-NEXT:    ret void
915*83ddfa0dSJoel E. Denny //
916*83ddfa0dSJoel E. Denny void ST::test_present_members() {
917*83ddfa0dSJoel E. Denny   // Make sure the struct picks up ompx_hold even if another element of the
918*83ddfa0dSJoel E. Denny   // struct doesn't have ompx_hold.
919*83ddfa0dSJoel E. Denny   #pragma omp target map(tofrom : i) map(ompx_hold, tofrom : j)
920*83ddfa0dSJoel E. Denny   {
921*83ddfa0dSJoel E. Denny #ifdef USE
922*83ddfa0dSJoel E. Denny     i++;
923*83ddfa0dSJoel E. Denny     j++;
924*83ddfa0dSJoel E. Denny #endif
925*83ddfa0dSJoel E. Denny   }
926*83ddfa0dSJoel E. Denny }
927*83ddfa0dSJoel E. Denny 
928*83ddfa0dSJoel E. Denny #endif
929