Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / clang / test / OpenMP / target_is_device_ptr_codegen.cpp
blob6a5d5608e0fa8f1da45fadf9584719fb20659ff2
1 // NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --function-signature --include-generated-funcs --replace-value-regex "__omp_offloading_[0-9a-z]+_[0-9a-z]+" "reduction_size[.].+[.]" "pl_cond[.].+[.|,]" --prefix-filecheck-ir-name _
2 // expected-no-diagnostics
3 #ifndef HEADER
4 #define HEADER
6 ///==========================================================================///
7 // RUN: %clang_cc1 -DCK1 -verify -fopenmp -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | FileCheck %s --check-prefix CK10
8 // RUN: %clang_cc1 -DCK1 -fopenmp -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -emit-pch -o %t %s
9 // RUN: %clang_cc1 -fopenmp -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s --check-prefix CK11
10 // RUN: %clang_cc1 -DCK1 -verify -fopenmp -fopenmp-targets=i386-pc-linux-gnu -x c++ -triple i386-unknown-unknown -emit-llvm %s -o - | FileCheck %s --check-prefix CK12
11 // RUN: %clang_cc1 -DCK1 -fopenmp -fopenmp-targets=i386-pc-linux-gnu -x c++ -std=c++11 -triple i386-unknown-unknown -emit-pch -o %t %s
12 // RUN: %clang_cc1 -fopenmp -fopenmp-targets=i386-pc-linux-gnu -x c++ -triple i386-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s --check-prefix CK13
14 // RUN: %clang_cc1 -DCK1 -verify -fopenmp-simd -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | FileCheck --check-prefix SIMD-ONLY00 %s
15 // RUN: %clang_cc1 -DCK1 -fopenmp-simd -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -emit-pch -o %t %s
16 // RUN: %clang_cc1 -fopenmp-simd -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck --check-prefix SIMD-ONLY01 %s
17 // RUN: %clang_cc1 -DCK1 -verify -fopenmp-simd -fopenmp-targets=i386-pc-linux-gnu -x c++ -triple i386-unknown-unknown -emit-llvm %s -o - | FileCheck --check-prefix SIMD-ONLY02 %s
18 // RUN: %clang_cc1 -DCK1 -fopenmp-simd -fopenmp-targets=i386-pc-linux-gnu -x c++ -std=c++11 -triple i386-unknown-unknown -emit-pch -o %t %s
19 // RUN: %clang_cc1 -fopenmp-simd -fopenmp-targets=i386-pc-linux-gnu -x c++ -triple i386-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck --check-prefix SIMD-ONLY03 %s
20 #ifdef CK1
22 double *g;
31 template<typename T>
32 void foo(float *&lr, T *&tr) {
33 float *l;
34 T *t;
37 #pragma omp target is_device_ptr(g)
39 ++g;
43 #pragma omp target is_device_ptr(l)
45 ++l;
49 #pragma omp target is_device_ptr(t)
51 ++t;
55 #pragma omp target is_device_ptr(lr)
57 ++lr;
61 #pragma omp target is_device_ptr(tr)
63 ++tr;
67 #pragma omp target is_device_ptr(tr, lr)
69 ++tr;
74 #pragma omp target is_device_ptr(tr, lr)
76 ++tr,++lr;
80 void bar(float *&a, int *&b) {
81 foo<int>(a,b);
84 #endif
85 ///==========================================================================///
86 // RUN: %clang_cc1 -DCK2 -verify -fopenmp -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | FileCheck %s --check-prefix CK20
87 // RUN: %clang_cc1 -DCK2 -fopenmp -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -emit-pch -o %t %s
88 // RUN: %clang_cc1 -fopenmp -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s --check-prefix CK21
89 // RUN: %clang_cc1 -DCK2 -verify -fopenmp -fopenmp-targets=i386-pc-linux-gnu -x c++ -triple i386-unknown-unknown -emit-llvm %s -o - | FileCheck %s --check-prefix CK22
90 // RUN: %clang_cc1 -DCK2 -fopenmp -fopenmp-targets=i386-pc-linux-gnu -x c++ -std=c++11 -triple i386-unknown-unknown -emit-pch -o %t %s
91 // RUN: %clang_cc1 -fopenmp -fopenmp-targets=i386-pc-linux-gnu -x c++ -triple i386-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s --check-prefix CK23
93 // RUN: %clang_cc1 -DCK2 -verify -fopenmp-simd -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | FileCheck --check-prefix SIMD-ONLY10 %s
94 // RUN: %clang_cc1 -DCK2 -fopenmp-simd -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -emit-pch -o %t %s
95 // RUN: %clang_cc1 -fopenmp-simd -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck --check-prefix SIMD-ONLY11 %s
96 // RUN: %clang_cc1 -DCK2 -verify -fopenmp-simd -fopenmp-targets=i386-pc-linux-gnu -x c++ -triple i386-unknown-unknown -emit-llvm %s -o - | FileCheck --check-prefix SIMD-ONLY12 %s
97 // RUN: %clang_cc1 -DCK2 -fopenmp-simd -fopenmp-targets=i386-pc-linux-gnu -x c++ -std=c++11 -triple i386-unknown-unknown -emit-pch -o %t %s
98 // RUN: %clang_cc1 -fopenmp-simd -fopenmp-targets=i386-pc-linux-gnu -x c++ -triple i386-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck --check-prefix SIMD-ONLY13 %s
99 #ifdef CK2
102 template <typename T>
103 struct ST {
104 T *a;
105 double *&b;
106 ST(double *&b) : a(0), b(b) {}
108 void foo(double *&arg) {
109 int *la = 0;
112 #pragma omp target is_device_ptr(a)
114 a++;
118 #pragma omp target is_device_ptr(b)
120 b++;
125 #pragma omp target is_device_ptr(a, b)
127 a++;
128 b++;
133 void bar(double *arg){
134 ST<double> A(arg);
135 A.foo(arg);
136 ++arg;
138 #endif
139 ///==========================================================================///
140 // RUN: %clang_cc1 -DCK3 -verify -fopenmp -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | FileCheck %s --check-prefix CK30
141 // RUN: %clang_cc1 -DCK3 -fopenmp -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -emit-pch -o %t %s
142 // RUN: %clang_cc1 -fopenmp -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s --check-prefix CK31
143 // RUN: %clang_cc1 -DCK3 -verify -fopenmp -fopenmp-targets=i386-pc-linux-gnu -x c++ -triple i386-unknown-unknown -emit-llvm %s -o - | FileCheck %s --check-prefix CK32
144 // RUN: %clang_cc1 -DCK3 -fopenmp -fopenmp-targets=i386-pc-linux-gnu -x c++ -std=c++11 -triple i386-unknown-unknown -emit-pch -o %t %s
145 // RUN: %clang_cc1 -fopenmp -fopenmp-targets=i386-pc-linux-gnu -x c++ -triple i386-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s --check-prefix CK33
147 // RUN: %clang_cc1 -DCK3 -verify -fopenmp-simd -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | FileCheck --check-prefix SIMD-ONLY20 %s
148 // RUN: %clang_cc1 -DCK3 -fopenmp-simd -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -emit-pch -o %t %s
149 // RUN: %clang_cc1 -fopenmp-simd -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck --check-prefix SIMD-ONLY21 %s
150 // RUN: %clang_cc1 -DCK3 -verify -fopenmp-simd -fopenmp-targets=i386-pc-linux-gnu -x c++ -triple i386-unknown-unknown -emit-llvm %s -o - | FileCheck --check-prefix SIMD-ONLY22 %s
151 // RUN: %clang_cc1 -DCK3 -fopenmp-simd -fopenmp-targets=i386-pc-linux-gnu -x c++ -std=c++11 -triple i386-unknown-unknown -emit-pch -o %t %s
152 // RUN: %clang_cc1 -fopenmp-simd -fopenmp-targets=i386-pc-linux-gnu -x c++ -triple i386-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck --check-prefix SIMD-ONLY23 %s
153 #ifdef CK3
155 // OMP_MAP_TARGET_PARAM = 0x20 | OMP_MAP_TO = 0x1 = 0x21
156 void bar() {
157 __attribute__((aligned(64))) double *ptr;
159 #pragma omp target is_device_ptr(ptr)
160 *ptr = 0;
162 #endif
163 #endif
164 // CK1-64-LABEL: define {{[^@]+}}@_Z3barRPfRPi
165 // CK1-64-SAME: (ptr noundef nonnull align 8 dereferenceable(8) [[A:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[B:%.*]]) #[[ATTR0:[0-9]+]] {
166 // CK1-64-NEXT: entry:
167 // CK1-64-NEXT: [[A_ADDR:%.*]] = alloca ptr, align 8
168 // CK1-64-NEXT: [[B_ADDR:%.*]] = alloca ptr, align 8
169 // CK1-64-NEXT: store ptr [[A]], ptr [[A_ADDR]], align 8
170 // CK1-64-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 8
171 // CK1-64-NEXT: [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 8
172 // CK1-64-NEXT: [[TMP1:%.*]] = load ptr, ptr [[B_ADDR]], align 8
173 // CK1-64-NEXT: call void @_Z3fooIiEvRPfRPT_(ptr noundef nonnull align 8 dereferenceable(8) [[TMP0]], ptr noundef nonnull align 8 dereferenceable(8) [[TMP1]])
174 // CK1-64-NEXT: ret void
175 // CK1-64-LABEL: define {{[^@]+}}@_Z3fooIiEvRPfRPT_
176 // CK1-64-SAME: (ptr noundef nonnull align 8 dereferenceable(8) [[LR:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[TR:%.*]]) #[[ATTR0]] comdat {
177 // CK1-64-NEXT: entry:
178 // CK1-64-NEXT: [[LR_ADDR:%.*]] = alloca ptr, align 8
179 // CK1-64-NEXT: [[TR_ADDR:%.*]] = alloca ptr, align 8
180 // CK1-64-NEXT: [[L:%.*]] = alloca ptr, align 8
181 // CK1-64-NEXT: [[T:%.*]] = alloca ptr, align 8
182 // CK1-64-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 8
183 // CK1-64-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 8
184 // CK1-64-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 8
185 // CK1-64-NEXT: [[DOTOFFLOAD_BASEPTRS1:%.*]] = alloca [1 x ptr], align 8
186 // CK1-64-NEXT: [[DOTOFFLOAD_PTRS2:%.*]] = alloca [1 x ptr], align 8
187 // CK1-64-NEXT: [[DOTOFFLOAD_MAPPERS3:%.*]] = alloca [1 x ptr], align 8
188 // CK1-64-NEXT: [[DOTOFFLOAD_BASEPTRS7:%.*]] = alloca [1 x ptr], align 8
189 // CK1-64-NEXT: [[DOTOFFLOAD_PTRS8:%.*]] = alloca [1 x ptr], align 8
190 // CK1-64-NEXT: [[DOTOFFLOAD_MAPPERS9:%.*]] = alloca [1 x ptr], align 8
191 // CK1-64-NEXT: [[TMP:%.*]] = alloca ptr, align 8
192 // CK1-64-NEXT: [[DOTOFFLOAD_BASEPTRS13:%.*]] = alloca [1 x ptr], align 8
193 // CK1-64-NEXT: [[DOTOFFLOAD_PTRS14:%.*]] = alloca [1 x ptr], align 8
194 // CK1-64-NEXT: [[DOTOFFLOAD_MAPPERS15:%.*]] = alloca [1 x ptr], align 8
195 // CK1-64-NEXT: [[_TMP19:%.*]] = alloca ptr, align 8
196 // CK1-64-NEXT: [[DOTOFFLOAD_BASEPTRS20:%.*]] = alloca [1 x ptr], align 8
197 // CK1-64-NEXT: [[DOTOFFLOAD_PTRS21:%.*]] = alloca [1 x ptr], align 8
198 // CK1-64-NEXT: [[DOTOFFLOAD_MAPPERS22:%.*]] = alloca [1 x ptr], align 8
199 // CK1-64-NEXT: [[_TMP26:%.*]] = alloca ptr, align 8
200 // CK1-64-NEXT: [[DOTOFFLOAD_BASEPTRS27:%.*]] = alloca [1 x ptr], align 8
201 // CK1-64-NEXT: [[DOTOFFLOAD_PTRS28:%.*]] = alloca [1 x ptr], align 8
202 // CK1-64-NEXT: [[DOTOFFLOAD_MAPPERS29:%.*]] = alloca [1 x ptr], align 8
203 // CK1-64-NEXT: [[_TMP33:%.*]] = alloca ptr, align 8
204 // CK1-64-NEXT: [[_TMP34:%.*]] = alloca ptr, align 8
205 // CK1-64-NEXT: [[DOTOFFLOAD_BASEPTRS35:%.*]] = alloca [2 x ptr], align 8
206 // CK1-64-NEXT: [[DOTOFFLOAD_PTRS36:%.*]] = alloca [2 x ptr], align 8
207 // CK1-64-NEXT: [[DOTOFFLOAD_MAPPERS37:%.*]] = alloca [2 x ptr], align 8
208 // CK1-64-NEXT: store ptr [[LR]], ptr [[LR_ADDR]], align 8
209 // CK1-64-NEXT: store ptr [[TR]], ptr [[TR_ADDR]], align 8
210 // CK1-64-NEXT: [[TMP0:%.*]] = load ptr, ptr @g, align 8
211 // CK1-64-NEXT: [[TMP1:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
212 // CK1-64-NEXT: store ptr [[TMP0]], ptr [[TMP1]], align 8
213 // CK1-64-NEXT: [[TMP2:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0
214 // CK1-64-NEXT: store ptr [[TMP0]], ptr [[TMP2]], align 8
215 // CK1-64-NEXT: [[TMP3:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
216 // CK1-64-NEXT: store ptr null, ptr [[TMP3]], align 8
217 // CK1-64-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
218 // CK1-64-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0
219 // CK1-64-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8
220 // CK1-64-NEXT: [[TMP6:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0
221 // CK1-64-NEXT: store i32 2, ptr [[TMP6]], align 4
222 // CK1-64-NEXT: [[TMP7:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1
223 // CK1-64-NEXT: store i32 1, ptr [[TMP7]], align 4
224 // CK1-64-NEXT: [[TMP8:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2
225 // CK1-64-NEXT: store ptr [[TMP4]], ptr [[TMP8]], align 8
226 // CK1-64-NEXT: [[TMP9:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3
227 // CK1-64-NEXT: store ptr [[TMP5]], ptr [[TMP9]], align 8
228 // CK1-64-NEXT: [[TMP10:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4
229 // CK1-64-NEXT: store ptr @.offload_sizes, ptr [[TMP10]], align 8
230 // CK1-64-NEXT: [[TMP11:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5
231 // CK1-64-NEXT: store ptr @.offload_maptypes, ptr [[TMP11]], align 8
232 // CK1-64-NEXT: [[TMP12:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6
233 // CK1-64-NEXT: store ptr null, ptr [[TMP12]], align 8
234 // CK1-64-NEXT: [[TMP13:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7
235 // CK1-64-NEXT: store ptr null, ptr [[TMP13]], align 8
236 // CK1-64-NEXT: [[TMP14:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8
237 // CK1-64-NEXT: store i64 0, ptr [[TMP14]], align 8
238 // CK1-64-NEXT: [[TMP15:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9
239 // CK1-64-NEXT: store i64 0, ptr [[TMP15]], align 8
240 // CK1-64-NEXT: [[TMP16:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10
241 // CK1-64-NEXT: store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP16]], align 4
242 // CK1-64-NEXT: [[TMP17:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11
243 // CK1-64-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP17]], align 4
244 // CK1-64-NEXT: [[TMP18:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12
245 // CK1-64-NEXT: store i32 0, ptr [[TMP18]], align 4
246 // CK1-64-NEXT: [[TMP19:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1:[0-9]+]], i64 -1, i32 -1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l37.region_id, ptr [[KERNEL_ARGS]])
247 // CK1-64-NEXT: [[TMP20:%.*]] = icmp ne i32 [[TMP19]], 0
248 // CK1-64-NEXT: br i1 [[TMP20]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
249 // CK1-64: omp_offload.failed:
250 // CK1-64-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l37(ptr [[TMP0]]) #[[ATTR2:[0-9]+]]
251 // CK1-64-NEXT: br label [[OMP_OFFLOAD_CONT]]
252 // CK1-64: omp_offload.cont:
253 // CK1-64-NEXT: [[TMP21:%.*]] = load ptr, ptr [[L]], align 8
254 // CK1-64-NEXT: [[TMP22:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS1]], i32 0, i32 0
255 // CK1-64-NEXT: store ptr [[TMP21]], ptr [[TMP22]], align 8
256 // CK1-64-NEXT: [[TMP23:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS2]], i32 0, i32 0
257 // CK1-64-NEXT: store ptr [[TMP21]], ptr [[TMP23]], align 8
258 // CK1-64-NEXT: [[TMP24:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS3]], i64 0, i64 0
259 // CK1-64-NEXT: store ptr null, ptr [[TMP24]], align 8
260 // CK1-64-NEXT: [[TMP25:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS1]], i32 0, i32 0
261 // CK1-64-NEXT: [[TMP26:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS2]], i32 0, i32 0
262 // CK1-64-NEXT: [[KERNEL_ARGS4:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
263 // CK1-64-NEXT: [[TMP27:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 0
264 // CK1-64-NEXT: store i32 2, ptr [[TMP27]], align 4
265 // CK1-64-NEXT: [[TMP28:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 1
266 // CK1-64-NEXT: store i32 1, ptr [[TMP28]], align 4
267 // CK1-64-NEXT: [[TMP29:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 2
268 // CK1-64-NEXT: store ptr [[TMP25]], ptr [[TMP29]], align 8
269 // CK1-64-NEXT: [[TMP30:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 3
270 // CK1-64-NEXT: store ptr [[TMP26]], ptr [[TMP30]], align 8
271 // CK1-64-NEXT: [[TMP31:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 4
272 // CK1-64-NEXT: store ptr @.offload_sizes.1, ptr [[TMP31]], align 8
273 // CK1-64-NEXT: [[TMP32:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 5
274 // CK1-64-NEXT: store ptr @.offload_maptypes.2, ptr [[TMP32]], align 8
275 // CK1-64-NEXT: [[TMP33:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 6
276 // CK1-64-NEXT: store ptr null, ptr [[TMP33]], align 8
277 // CK1-64-NEXT: [[TMP34:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 7
278 // CK1-64-NEXT: store ptr null, ptr [[TMP34]], align 8
279 // CK1-64-NEXT: [[TMP35:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 8
280 // CK1-64-NEXT: store i64 0, ptr [[TMP35]], align 8
281 // CK1-64-NEXT: [[TMP36:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 9
282 // CK1-64-NEXT: store i64 0, ptr [[TMP36]], align 8
283 // CK1-64-NEXT: [[TMP37:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 10
284 // CK1-64-NEXT: store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP37]], align 4
285 // CK1-64-NEXT: [[TMP38:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 11
286 // CK1-64-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP38]], align 4
287 // CK1-64-NEXT: [[TMP39:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 12
288 // CK1-64-NEXT: store i32 0, ptr [[TMP39]], align 4
289 // CK1-64-NEXT: [[TMP40:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1]], i64 -1, i32 -1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l43.region_id, ptr [[KERNEL_ARGS4]])
290 // CK1-64-NEXT: [[TMP41:%.*]] = icmp ne i32 [[TMP40]], 0
291 // CK1-64-NEXT: br i1 [[TMP41]], label [[OMP_OFFLOAD_FAILED5:%.*]], label [[OMP_OFFLOAD_CONT6:%.*]]
292 // CK1-64: omp_offload.failed5:
293 // CK1-64-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l43(ptr [[TMP21]]) #[[ATTR2]]
294 // CK1-64-NEXT: br label [[OMP_OFFLOAD_CONT6]]
295 // CK1-64: omp_offload.cont6:
296 // CK1-64-NEXT: [[TMP42:%.*]] = load ptr, ptr [[T]], align 8
297 // CK1-64-NEXT: [[TMP43:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS7]], i32 0, i32 0
298 // CK1-64-NEXT: store ptr [[TMP42]], ptr [[TMP43]], align 8
299 // CK1-64-NEXT: [[TMP44:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS8]], i32 0, i32 0
300 // CK1-64-NEXT: store ptr [[TMP42]], ptr [[TMP44]], align 8
301 // CK1-64-NEXT: [[TMP45:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS9]], i64 0, i64 0
302 // CK1-64-NEXT: store ptr null, ptr [[TMP45]], align 8
303 // CK1-64-NEXT: [[TMP46:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS7]], i32 0, i32 0
304 // CK1-64-NEXT: [[TMP47:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS8]], i32 0, i32 0
305 // CK1-64-NEXT: [[KERNEL_ARGS10:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
306 // CK1-64-NEXT: [[TMP48:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 0
307 // CK1-64-NEXT: store i32 2, ptr [[TMP48]], align 4
308 // CK1-64-NEXT: [[TMP49:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 1
309 // CK1-64-NEXT: store i32 1, ptr [[TMP49]], align 4
310 // CK1-64-NEXT: [[TMP50:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 2
311 // CK1-64-NEXT: store ptr [[TMP46]], ptr [[TMP50]], align 8
312 // CK1-64-NEXT: [[TMP51:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 3
313 // CK1-64-NEXT: store ptr [[TMP47]], ptr [[TMP51]], align 8
314 // CK1-64-NEXT: [[TMP52:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 4
315 // CK1-64-NEXT: store ptr @.offload_sizes.3, ptr [[TMP52]], align 8
316 // CK1-64-NEXT: [[TMP53:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 5
317 // CK1-64-NEXT: store ptr @.offload_maptypes.4, ptr [[TMP53]], align 8
318 // CK1-64-NEXT: [[TMP54:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 6
319 // CK1-64-NEXT: store ptr null, ptr [[TMP54]], align 8
320 // CK1-64-NEXT: [[TMP55:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 7
321 // CK1-64-NEXT: store ptr null, ptr [[TMP55]], align 8
322 // CK1-64-NEXT: [[TMP56:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 8
323 // CK1-64-NEXT: store i64 0, ptr [[TMP56]], align 8
324 // CK1-64-NEXT: [[TMP57:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 9
325 // CK1-64-NEXT: store i64 0, ptr [[TMP57]], align 8
326 // CK1-64-NEXT: [[TMP58:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 10
327 // CK1-64-NEXT: store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP58]], align 4
328 // CK1-64-NEXT: [[TMP59:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 11
329 // CK1-64-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP59]], align 4
330 // CK1-64-NEXT: [[TMP60:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 12
331 // CK1-64-NEXT: store i32 0, ptr [[TMP60]], align 4
332 // CK1-64-NEXT: [[TMP61:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1]], i64 -1, i32 -1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l49.region_id, ptr [[KERNEL_ARGS10]])
333 // CK1-64-NEXT: [[TMP62:%.*]] = icmp ne i32 [[TMP61]], 0
334 // CK1-64-NEXT: br i1 [[TMP62]], label [[OMP_OFFLOAD_FAILED11:%.*]], label [[OMP_OFFLOAD_CONT12:%.*]]
335 // CK1-64: omp_offload.failed11:
336 // CK1-64-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l49(ptr [[TMP42]]) #[[ATTR2]]
337 // CK1-64-NEXT: br label [[OMP_OFFLOAD_CONT12]]
338 // CK1-64: omp_offload.cont12:
339 // CK1-64-NEXT: [[TMP63:%.*]] = load ptr, ptr [[LR_ADDR]], align 8
340 // CK1-64-NEXT: store ptr [[TMP63]], ptr [[TMP]], align 8
341 // CK1-64-NEXT: [[TMP64:%.*]] = load ptr, ptr [[TMP]], align 8
342 // CK1-64-NEXT: [[TMP65:%.*]] = load ptr, ptr [[TMP64]], align 8
343 // CK1-64-NEXT: [[TMP66:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS13]], i32 0, i32 0
344 // CK1-64-NEXT: store ptr [[TMP65]], ptr [[TMP66]], align 8
345 // CK1-64-NEXT: [[TMP67:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS14]], i32 0, i32 0
346 // CK1-64-NEXT: store ptr [[TMP65]], ptr [[TMP67]], align 8
347 // CK1-64-NEXT: [[TMP68:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS15]], i64 0, i64 0
348 // CK1-64-NEXT: store ptr null, ptr [[TMP68]], align 8
349 // CK1-64-NEXT: [[TMP69:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS13]], i32 0, i32 0
350 // CK1-64-NEXT: [[TMP70:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS14]], i32 0, i32 0
351 // CK1-64-NEXT: [[KERNEL_ARGS16:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
352 // CK1-64-NEXT: [[TMP71:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 0
353 // CK1-64-NEXT: store i32 2, ptr [[TMP71]], align 4
354 // CK1-64-NEXT: [[TMP72:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 1
355 // CK1-64-NEXT: store i32 1, ptr [[TMP72]], align 4
356 // CK1-64-NEXT: [[TMP73:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 2
357 // CK1-64-NEXT: store ptr [[TMP69]], ptr [[TMP73]], align 8
358 // CK1-64-NEXT: [[TMP74:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 3
359 // CK1-64-NEXT: store ptr [[TMP70]], ptr [[TMP74]], align 8
360 // CK1-64-NEXT: [[TMP75:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 4
361 // CK1-64-NEXT: store ptr @.offload_sizes.5, ptr [[TMP75]], align 8
362 // CK1-64-NEXT: [[TMP76:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 5
363 // CK1-64-NEXT: store ptr @.offload_maptypes.6, ptr [[TMP76]], align 8
364 // CK1-64-NEXT: [[TMP77:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 6
365 // CK1-64-NEXT: store ptr null, ptr [[TMP77]], align 8
366 // CK1-64-NEXT: [[TMP78:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 7
367 // CK1-64-NEXT: store ptr null, ptr [[TMP78]], align 8
368 // CK1-64-NEXT: [[TMP79:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 8
369 // CK1-64-NEXT: store i64 0, ptr [[TMP79]], align 8
370 // CK1-64-NEXT: [[TMP80:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 9
371 // CK1-64-NEXT: store i64 0, ptr [[TMP80]], align 8
372 // CK1-64-NEXT: [[TMP81:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 10
373 // CK1-64-NEXT: store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP81]], align 4
374 // CK1-64-NEXT: [[TMP82:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 11
375 // CK1-64-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP82]], align 4
376 // CK1-64-NEXT: [[TMP83:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 12
377 // CK1-64-NEXT: store i32 0, ptr [[TMP83]], align 4
378 // CK1-64-NEXT: [[TMP84:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1]], i64 -1, i32 -1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l55.region_id, ptr [[KERNEL_ARGS16]])
379 // CK1-64-NEXT: [[TMP85:%.*]] = icmp ne i32 [[TMP84]], 0
380 // CK1-64-NEXT: br i1 [[TMP85]], label [[OMP_OFFLOAD_FAILED17:%.*]], label [[OMP_OFFLOAD_CONT18:%.*]]
381 // CK1-64: omp_offload.failed17:
382 // CK1-64-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l55(ptr [[TMP65]]) #[[ATTR2]]
383 // CK1-64-NEXT: br label [[OMP_OFFLOAD_CONT18]]
384 // CK1-64: omp_offload.cont18:
385 // CK1-64-NEXT: [[TMP86:%.*]] = load ptr, ptr [[TR_ADDR]], align 8
386 // CK1-64-NEXT: store ptr [[TMP86]], ptr [[_TMP19]], align 8
387 // CK1-64-NEXT: [[TMP87:%.*]] = load ptr, ptr [[_TMP19]], align 8
388 // CK1-64-NEXT: [[TMP88:%.*]] = load ptr, ptr [[TMP87]], align 8
389 // CK1-64-NEXT: [[TMP89:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS20]], i32 0, i32 0
390 // CK1-64-NEXT: store ptr [[TMP88]], ptr [[TMP89]], align 8
391 // CK1-64-NEXT: [[TMP90:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS21]], i32 0, i32 0
392 // CK1-64-NEXT: store ptr [[TMP88]], ptr [[TMP90]], align 8
393 // CK1-64-NEXT: [[TMP91:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS22]], i64 0, i64 0
394 // CK1-64-NEXT: store ptr null, ptr [[TMP91]], align 8
395 // CK1-64-NEXT: [[TMP92:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS20]], i32 0, i32 0
396 // CK1-64-NEXT: [[TMP93:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS21]], i32 0, i32 0
397 // CK1-64-NEXT: [[KERNEL_ARGS23:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
398 // CK1-64-NEXT: [[TMP94:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 0
399 // CK1-64-NEXT: store i32 2, ptr [[TMP94]], align 4
400 // CK1-64-NEXT: [[TMP95:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 1
401 // CK1-64-NEXT: store i32 1, ptr [[TMP95]], align 4
402 // CK1-64-NEXT: [[TMP96:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 2
403 // CK1-64-NEXT: store ptr [[TMP92]], ptr [[TMP96]], align 8
404 // CK1-64-NEXT: [[TMP97:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 3
405 // CK1-64-NEXT: store ptr [[TMP93]], ptr [[TMP97]], align 8
406 // CK1-64-NEXT: [[TMP98:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 4
407 // CK1-64-NEXT: store ptr @.offload_sizes.7, ptr [[TMP98]], align 8
408 // CK1-64-NEXT: [[TMP99:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 5
409 // CK1-64-NEXT: store ptr @.offload_maptypes.8, ptr [[TMP99]], align 8
410 // CK1-64-NEXT: [[TMP100:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 6
411 // CK1-64-NEXT: store ptr null, ptr [[TMP100]], align 8
412 // CK1-64-NEXT: [[TMP101:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 7
413 // CK1-64-NEXT: store ptr null, ptr [[TMP101]], align 8
414 // CK1-64-NEXT: [[TMP102:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 8
415 // CK1-64-NEXT: store i64 0, ptr [[TMP102]], align 8
416 // CK1-64-NEXT: [[TMP103:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 9
417 // CK1-64-NEXT: store i64 0, ptr [[TMP103]], align 8
418 // CK1-64-NEXT: [[TMP104:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 10
419 // CK1-64-NEXT: store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP104]], align 4
420 // CK1-64-NEXT: [[TMP105:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 11
421 // CK1-64-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP105]], align 4
422 // CK1-64-NEXT: [[TMP106:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 12
423 // CK1-64-NEXT: store i32 0, ptr [[TMP106]], align 4
424 // CK1-64-NEXT: [[TMP107:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1]], i64 -1, i32 -1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l61.region_id, ptr [[KERNEL_ARGS23]])
425 // CK1-64-NEXT: [[TMP108:%.*]] = icmp ne i32 [[TMP107]], 0
426 // CK1-64-NEXT: br i1 [[TMP108]], label [[OMP_OFFLOAD_FAILED24:%.*]], label [[OMP_OFFLOAD_CONT25:%.*]]
427 // CK1-64: omp_offload.failed24:
428 // CK1-64-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l61(ptr [[TMP88]]) #[[ATTR2]]
429 // CK1-64-NEXT: br label [[OMP_OFFLOAD_CONT25]]
430 // CK1-64: omp_offload.cont25:
431 // CK1-64-NEXT: [[TMP109:%.*]] = load ptr, ptr [[TR_ADDR]], align 8
432 // CK1-64-NEXT: store ptr [[TMP109]], ptr [[_TMP26]], align 8
433 // CK1-64-NEXT: [[TMP110:%.*]] = load ptr, ptr [[_TMP26]], align 8
434 // CK1-64-NEXT: [[TMP111:%.*]] = load ptr, ptr [[TMP110]], align 8
435 // CK1-64-NEXT: [[TMP112:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS27]], i32 0, i32 0
436 // CK1-64-NEXT: store ptr [[TMP111]], ptr [[TMP112]], align 8
437 // CK1-64-NEXT: [[TMP113:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS28]], i32 0, i32 0
438 // CK1-64-NEXT: store ptr [[TMP111]], ptr [[TMP113]], align 8
439 // CK1-64-NEXT: [[TMP114:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS29]], i64 0, i64 0
440 // CK1-64-NEXT: store ptr null, ptr [[TMP114]], align 8
441 // CK1-64-NEXT: [[TMP115:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS27]], i32 0, i32 0
442 // CK1-64-NEXT: [[TMP116:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS28]], i32 0, i32 0
443 // CK1-64-NEXT: [[KERNEL_ARGS30:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
444 // CK1-64-NEXT: [[TMP117:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 0
445 // CK1-64-NEXT: store i32 2, ptr [[TMP117]], align 4
446 // CK1-64-NEXT: [[TMP118:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 1
447 // CK1-64-NEXT: store i32 1, ptr [[TMP118]], align 4
448 // CK1-64-NEXT: [[TMP119:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 2
449 // CK1-64-NEXT: store ptr [[TMP115]], ptr [[TMP119]], align 8
450 // CK1-64-NEXT: [[TMP120:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 3
451 // CK1-64-NEXT: store ptr [[TMP116]], ptr [[TMP120]], align 8
452 // CK1-64-NEXT: [[TMP121:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 4
453 // CK1-64-NEXT: store ptr @.offload_sizes.9, ptr [[TMP121]], align 8
454 // CK1-64-NEXT: [[TMP122:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 5
455 // CK1-64-NEXT: store ptr @.offload_maptypes.10, ptr [[TMP122]], align 8
456 // CK1-64-NEXT: [[TMP123:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 6
457 // CK1-64-NEXT: store ptr null, ptr [[TMP123]], align 8
458 // CK1-64-NEXT: [[TMP124:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 7
459 // CK1-64-NEXT: store ptr null, ptr [[TMP124]], align 8
460 // CK1-64-NEXT: [[TMP125:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 8
461 // CK1-64-NEXT: store i64 0, ptr [[TMP125]], align 8
462 // CK1-64-NEXT: [[TMP126:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 9
463 // CK1-64-NEXT: store i64 0, ptr [[TMP126]], align 8
464 // CK1-64-NEXT: [[TMP127:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 10
465 // CK1-64-NEXT: store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP127]], align 4
466 // CK1-64-NEXT: [[TMP128:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 11
467 // CK1-64-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP128]], align 4
468 // CK1-64-NEXT: [[TMP129:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 12
469 // CK1-64-NEXT: store i32 0, ptr [[TMP129]], align 4
470 // CK1-64-NEXT: [[TMP130:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1]], i64 -1, i32 -1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l67.region_id, ptr [[KERNEL_ARGS30]])
471 // CK1-64-NEXT: [[TMP131:%.*]] = icmp ne i32 [[TMP130]], 0
472 // CK1-64-NEXT: br i1 [[TMP131]], label [[OMP_OFFLOAD_FAILED31:%.*]], label [[OMP_OFFLOAD_CONT32:%.*]]
473 // CK1-64: omp_offload.failed31:
474 // CK1-64-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l67(ptr [[TMP111]]) #[[ATTR2]]
475 // CK1-64-NEXT: br label [[OMP_OFFLOAD_CONT32]]
476 // CK1-64: omp_offload.cont32:
477 // CK1-64-NEXT: [[TMP132:%.*]] = load ptr, ptr [[TR_ADDR]], align 8
478 // CK1-64-NEXT: store ptr [[TMP132]], ptr [[_TMP33]], align 8
479 // CK1-64-NEXT: [[TMP133:%.*]] = load ptr, ptr [[LR_ADDR]], align 8
480 // CK1-64-NEXT: store ptr [[TMP133]], ptr [[_TMP34]], align 8
481 // CK1-64-NEXT: [[TMP134:%.*]] = load ptr, ptr [[_TMP33]], align 8
482 // CK1-64-NEXT: [[TMP135:%.*]] = load ptr, ptr [[TMP134]], align 8
483 // CK1-64-NEXT: [[TMP136:%.*]] = load ptr, ptr [[_TMP34]], align 8
484 // CK1-64-NEXT: [[TMP137:%.*]] = load ptr, ptr [[TMP136]], align 8
485 // CK1-64-NEXT: [[TMP138:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS35]], i32 0, i32 0
486 // CK1-64-NEXT: store ptr [[TMP135]], ptr [[TMP138]], align 8
487 // CK1-64-NEXT: [[TMP139:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS36]], i32 0, i32 0
488 // CK1-64-NEXT: store ptr [[TMP135]], ptr [[TMP139]], align 8
489 // CK1-64-NEXT: [[TMP140:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_MAPPERS37]], i64 0, i64 0
490 // CK1-64-NEXT: store ptr null, ptr [[TMP140]], align 8
491 // CK1-64-NEXT: [[TMP141:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS35]], i32 0, i32 1
492 // CK1-64-NEXT: store ptr [[TMP137]], ptr [[TMP141]], align 8
493 // CK1-64-NEXT: [[TMP142:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS36]], i32 0, i32 1
494 // CK1-64-NEXT: store ptr [[TMP137]], ptr [[TMP142]], align 8
495 // CK1-64-NEXT: [[TMP143:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_MAPPERS37]], i64 0, i64 1
496 // CK1-64-NEXT: store ptr null, ptr [[TMP143]], align 8
497 // CK1-64-NEXT: [[TMP144:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS35]], i32 0, i32 0
498 // CK1-64-NEXT: [[TMP145:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS36]], i32 0, i32 0
499 // CK1-64-NEXT: [[KERNEL_ARGS38:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
500 // CK1-64-NEXT: [[TMP146:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 0
501 // CK1-64-NEXT: store i32 2, ptr [[TMP146]], align 4
502 // CK1-64-NEXT: [[TMP147:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 1
503 // CK1-64-NEXT: store i32 2, ptr [[TMP147]], align 4
504 // CK1-64-NEXT: [[TMP148:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 2
505 // CK1-64-NEXT: store ptr [[TMP144]], ptr [[TMP148]], align 8
506 // CK1-64-NEXT: [[TMP149:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 3
507 // CK1-64-NEXT: store ptr [[TMP145]], ptr [[TMP149]], align 8
508 // CK1-64-NEXT: [[TMP150:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 4
509 // CK1-64-NEXT: store ptr @.offload_sizes.11, ptr [[TMP150]], align 8
510 // CK1-64-NEXT: [[TMP151:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 5
511 // CK1-64-NEXT: store ptr @.offload_maptypes.12, ptr [[TMP151]], align 8
512 // CK1-64-NEXT: [[TMP152:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 6
513 // CK1-64-NEXT: store ptr null, ptr [[TMP152]], align 8
514 // CK1-64-NEXT: [[TMP153:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 7
515 // CK1-64-NEXT: store ptr null, ptr [[TMP153]], align 8
516 // CK1-64-NEXT: [[TMP154:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 8
517 // CK1-64-NEXT: store i64 0, ptr [[TMP154]], align 8
518 // CK1-64-NEXT: [[TMP155:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 9
519 // CK1-64-NEXT: store i64 0, ptr [[TMP155]], align 8
520 // CK1-64-NEXT: [[TMP156:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 10
521 // CK1-64-NEXT: store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP156]], align 4
522 // CK1-64-NEXT: [[TMP157:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 11
523 // CK1-64-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP157]], align 4
524 // CK1-64-NEXT: [[TMP158:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 12
525 // CK1-64-NEXT: store i32 0, ptr [[TMP158]], align 4
526 // CK1-64-NEXT: [[TMP159:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1]], i64 -1, i32 -1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l74.region_id, ptr [[KERNEL_ARGS38]])
527 // CK1-64-NEXT: [[TMP160:%.*]] = icmp ne i32 [[TMP159]], 0
528 // CK1-64-NEXT: br i1 [[TMP160]], label [[OMP_OFFLOAD_FAILED39:%.*]], label [[OMP_OFFLOAD_CONT40:%.*]]
529 // CK1-64: omp_offload.failed39:
530 // CK1-64-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l74(ptr [[TMP135]], ptr [[TMP137]]) #[[ATTR2]]
531 // CK1-64-NEXT: br label [[OMP_OFFLOAD_CONT40]]
532 // CK1-64: omp_offload.cont40:
533 // CK1-64-NEXT: ret void
534 // CK1-64-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l37
535 // CK1-64-SAME: (ptr noundef [[G:%.*]]) #[[ATTR1:[0-9]+]] {
536 // CK1-64-NEXT: entry:
537 // CK1-64-NEXT: [[G_ADDR:%.*]] = alloca ptr, align 8
538 // CK1-64-NEXT: store ptr [[G]], ptr [[G_ADDR]], align 8
539 // CK1-64-NEXT: [[TMP0:%.*]] = load ptr, ptr [[G_ADDR]], align 8
540 // CK1-64-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds double, ptr [[TMP0]], i32 1
541 // CK1-64-NEXT: store ptr [[INCDEC_PTR]], ptr [[G_ADDR]], align 8
542 // CK1-64-NEXT: ret void
543 // CK1-64-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l43
544 // CK1-64-SAME: (ptr noundef [[L:%.*]]) #[[ATTR1]] {
545 // CK1-64-NEXT: entry:
546 // CK1-64-NEXT: [[L_ADDR:%.*]] = alloca ptr, align 8
547 // CK1-64-NEXT: store ptr [[L]], ptr [[L_ADDR]], align 8
548 // CK1-64-NEXT: [[TMP0:%.*]] = load ptr, ptr [[L_ADDR]], align 8
549 // CK1-64-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds float, ptr [[TMP0]], i32 1
550 // CK1-64-NEXT: store ptr [[INCDEC_PTR]], ptr [[L_ADDR]], align 8
551 // CK1-64-NEXT: ret void
552 // CK1-64-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l49
553 // CK1-64-SAME: (ptr noundef [[T:%.*]]) #[[ATTR1]] {
554 // CK1-64-NEXT: entry:
555 // CK1-64-NEXT: [[T_ADDR:%.*]] = alloca ptr, align 8
556 // CK1-64-NEXT: store ptr [[T]], ptr [[T_ADDR]], align 8
557 // CK1-64-NEXT: [[TMP0:%.*]] = load ptr, ptr [[T_ADDR]], align 8
558 // CK1-64-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds i32, ptr [[TMP0]], i32 1
559 // CK1-64-NEXT: store ptr [[INCDEC_PTR]], ptr [[T_ADDR]], align 8
560 // CK1-64-NEXT: ret void
561 // CK1-64-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l55
562 // CK1-64-SAME: (ptr noundef [[LR:%.*]]) #[[ATTR1]] {
563 // CK1-64-NEXT: entry:
564 // CK1-64-NEXT: [[LR_ADDR:%.*]] = alloca ptr, align 8
565 // CK1-64-NEXT: [[TMP:%.*]] = alloca ptr, align 8
566 // CK1-64-NEXT: store ptr [[LR]], ptr [[LR_ADDR]], align 8
567 // CK1-64-NEXT: store ptr [[LR_ADDR]], ptr [[TMP]], align 8
568 // CK1-64-NEXT: [[TMP0:%.*]] = load ptr, ptr [[TMP]], align 8
569 // CK1-64-NEXT: [[TMP1:%.*]] = load ptr, ptr [[TMP0]], align 8
570 // CK1-64-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds float, ptr [[TMP1]], i32 1
571 // CK1-64-NEXT: store ptr [[INCDEC_PTR]], ptr [[TMP0]], align 8
572 // CK1-64-NEXT: ret void
573 // CK1-64-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l61
574 // CK1-64-SAME: (ptr noundef [[TR:%.*]]) #[[ATTR1]] {
575 // CK1-64-NEXT: entry:
576 // CK1-64-NEXT: [[TR_ADDR:%.*]] = alloca ptr, align 8
577 // CK1-64-NEXT: [[TMP:%.*]] = alloca ptr, align 8
578 // CK1-64-NEXT: store ptr [[TR]], ptr [[TR_ADDR]], align 8
579 // CK1-64-NEXT: store ptr [[TR_ADDR]], ptr [[TMP]], align 8
580 // CK1-64-NEXT: [[TMP0:%.*]] = load ptr, ptr [[TMP]], align 8
581 // CK1-64-NEXT: [[TMP1:%.*]] = load ptr, ptr [[TMP0]], align 8
582 // CK1-64-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds i32, ptr [[TMP1]], i32 1
583 // CK1-64-NEXT: store ptr [[INCDEC_PTR]], ptr [[TMP0]], align 8
584 // CK1-64-NEXT: ret void
585 // CK1-64-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l67
586 // CK1-64-SAME: (ptr noundef [[TR:%.*]]) #[[ATTR1]] {
587 // CK1-64-NEXT: entry:
588 // CK1-64-NEXT: [[TR_ADDR:%.*]] = alloca ptr, align 8
589 // CK1-64-NEXT: [[TMP:%.*]] = alloca ptr, align 8
590 // CK1-64-NEXT: store ptr [[TR]], ptr [[TR_ADDR]], align 8
591 // CK1-64-NEXT: store ptr [[TR_ADDR]], ptr [[TMP]], align 8
592 // CK1-64-NEXT: [[TMP0:%.*]] = load ptr, ptr [[TMP]], align 8
593 // CK1-64-NEXT: [[TMP1:%.*]] = load ptr, ptr [[TMP0]], align 8
594 // CK1-64-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds i32, ptr [[TMP1]], i32 1
595 // CK1-64-NEXT: store ptr [[INCDEC_PTR]], ptr [[TMP0]], align 8
596 // CK1-64-NEXT: ret void
597 // CK1-64-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l74
598 // CK1-64-SAME: (ptr noundef [[TR:%.*]], ptr noundef [[LR:%.*]]) #[[ATTR1]] {
599 // CK1-64-NEXT: entry:
600 // CK1-64-NEXT: [[TR_ADDR:%.*]] = alloca ptr, align 8
601 // CK1-64-NEXT: [[LR_ADDR:%.*]] = alloca ptr, align 8
602 // CK1-64-NEXT: [[TMP:%.*]] = alloca ptr, align 8
603 // CK1-64-NEXT: [[_TMP1:%.*]] = alloca ptr, align 8
604 // CK1-64-NEXT: store ptr [[TR]], ptr [[TR_ADDR]], align 8
605 // CK1-64-NEXT: store ptr [[LR]], ptr [[LR_ADDR]], align 8
606 // CK1-64-NEXT: store ptr [[TR_ADDR]], ptr [[TMP]], align 8
607 // CK1-64-NEXT: store ptr [[LR_ADDR]], ptr [[_TMP1]], align 8
608 // CK1-64-NEXT: [[TMP0:%.*]] = load ptr, ptr [[TMP]], align 8
609 // CK1-64-NEXT: [[TMP1:%.*]] = load ptr, ptr [[TMP0]], align 8
610 // CK1-64-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds i32, ptr [[TMP1]], i32 1
611 // CK1-64-NEXT: store ptr [[INCDEC_PTR]], ptr [[TMP0]], align 8
612 // CK1-64-NEXT: [[TMP2:%.*]] = load ptr, ptr [[_TMP1]], align 8
613 // CK1-64-NEXT: [[TMP3:%.*]] = load ptr, ptr [[TMP2]], align 8
614 // CK1-64-NEXT: [[INCDEC_PTR2:%.*]] = getelementptr inbounds float, ptr [[TMP3]], i32 1
615 // CK1-64-NEXT: store ptr [[INCDEC_PTR2]], ptr [[TMP2]], align 8
616 // CK1-64-NEXT: ret void
617 // CK1-64-LABEL: define {{[^@]+}}@.omp_offloading.requires_reg
618 // CK1-64-SAME: () #[[ATTR3:[0-9]+]] {
619 // CK1-64-NEXT: entry:
620 // CK1-64-NEXT: call void @__tgt_register_requires(i64 1)
621 // CK1-64-NEXT: ret void
622 // CK2-64-LABEL: define {{[^@]+}}@_Z3barPd
623 // CK2-64-SAME: (ptr noundef [[ARG:%.*]]) #[[ATTR0:[0-9]+]] {
624 // CK2-64-NEXT: entry:
625 // CK2-64-NEXT: [[ARG_ADDR:%.*]] = alloca ptr, align 8
626 // CK2-64-NEXT: [[A:%.*]] = alloca [[STRUCT_ST:%.*]], align 8
627 // CK2-64-NEXT: store ptr [[ARG]], ptr [[ARG_ADDR]], align 8
628 // CK2-64-NEXT: call void @_ZN2STIdEC1ERPd(ptr noundef nonnull align 8 dereferenceable(16) [[A]], ptr noundef nonnull align 8 dereferenceable(8) [[ARG_ADDR]])
629 // CK2-64-NEXT: call void @_ZN2STIdE3fooERPd(ptr noundef nonnull align 8 dereferenceable(16) [[A]], ptr noundef nonnull align 8 dereferenceable(8) [[ARG_ADDR]])
630 // CK2-64-NEXT: [[TMP0:%.*]] = load ptr, ptr [[ARG_ADDR]], align 8
631 // CK2-64-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds double, ptr [[TMP0]], i32 1
632 // CK2-64-NEXT: store ptr [[INCDEC_PTR]], ptr [[ARG_ADDR]], align 8
633 // CK2-64-NEXT: ret void
634 // CK2-64-LABEL: define {{[^@]+}}@_ZN2STIdEC1ERPd
635 // CK2-64-SAME: (ptr noundef nonnull align 8 dereferenceable(16) [[THIS:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[B:%.*]]) unnamed_addr #[[ATTR1:[0-9]+]] comdat align 2 {
636 // CK2-64-NEXT: entry:
637 // CK2-64-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8
638 // CK2-64-NEXT: [[B_ADDR:%.*]] = alloca ptr, align 8
639 // CK2-64-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8
640 // CK2-64-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 8
641 // CK2-64-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8
642 // CK2-64-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 8
643 // CK2-64-NEXT: call void @_ZN2STIdEC2ERPd(ptr noundef nonnull align 8 dereferenceable(16) [[THIS1]], ptr noundef nonnull align 8 dereferenceable(8) [[TMP0]])
644 // CK2-64-NEXT: ret void
645 // CK2-64-LABEL: define {{[^@]+}}@_ZN2STIdE3fooERPd
646 // CK2-64-SAME: (ptr noundef nonnull align 8 dereferenceable(16) [[THIS:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[ARG:%.*]]) #[[ATTR0]] comdat align 2 {
647 // CK2-64-NEXT: entry:
648 // CK2-64-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8
649 // CK2-64-NEXT: [[ARG_ADDR:%.*]] = alloca ptr, align 8
650 // CK2-64-NEXT: [[LA:%.*]] = alloca ptr, align 8
651 // CK2-64-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 8
652 // CK2-64-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 8
653 // CK2-64-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 8
654 // CK2-64-NEXT: [[DOTOFFLOAD_BASEPTRS2:%.*]] = alloca [2 x ptr], align 8
655 // CK2-64-NEXT: [[DOTOFFLOAD_PTRS3:%.*]] = alloca [2 x ptr], align 8
656 // CK2-64-NEXT: [[DOTOFFLOAD_MAPPERS4:%.*]] = alloca [2 x ptr], align 8
657 // CK2-64-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [2 x i64], align 8
658 // CK2-64-NEXT: [[DOTOFFLOAD_BASEPTRS10:%.*]] = alloca [3 x ptr], align 8
659 // CK2-64-NEXT: [[DOTOFFLOAD_PTRS11:%.*]] = alloca [3 x ptr], align 8
660 // CK2-64-NEXT: [[DOTOFFLOAD_MAPPERS12:%.*]] = alloca [3 x ptr], align 8
661 // CK2-64-NEXT: [[DOTOFFLOAD_SIZES13:%.*]] = alloca [3 x i64], align 8
662 // CK2-64-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8
663 // CK2-64-NEXT: store ptr [[ARG]], ptr [[ARG_ADDR]], align 8
664 // CK2-64-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8
665 // CK2-64-NEXT: store ptr null, ptr [[LA]], align 8
666 // CK2-64-NEXT: [[A:%.*]] = getelementptr inbounds [[STRUCT_ST:%.*]], ptr [[THIS1]], i32 0, i32 0
667 // CK2-64-NEXT: [[TMP0:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
668 // CK2-64-NEXT: store ptr [[THIS1]], ptr [[TMP0]], align 8
669 // CK2-64-NEXT: [[TMP1:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0
670 // CK2-64-NEXT: store ptr [[A]], ptr [[TMP1]], align 8
671 // CK2-64-NEXT: [[TMP2:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
672 // CK2-64-NEXT: store ptr null, ptr [[TMP2]], align 8
673 // CK2-64-NEXT: [[TMP3:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
674 // CK2-64-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0
675 // CK2-64-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8
676 // CK2-64-NEXT: [[TMP5:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0
677 // CK2-64-NEXT: store i32 2, ptr [[TMP5]], align 4
678 // CK2-64-NEXT: [[TMP6:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1
679 // CK2-64-NEXT: store i32 1, ptr [[TMP6]], align 4
680 // CK2-64-NEXT: [[TMP7:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2
681 // CK2-64-NEXT: store ptr [[TMP3]], ptr [[TMP7]], align 8
682 // CK2-64-NEXT: [[TMP8:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3
683 // CK2-64-NEXT: store ptr [[TMP4]], ptr [[TMP8]], align 8
684 // CK2-64-NEXT: [[TMP9:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4
685 // CK2-64-NEXT: store ptr @.offload_sizes, ptr [[TMP9]], align 8
686 // CK2-64-NEXT: [[TMP10:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5
687 // CK2-64-NEXT: store ptr @.offload_maptypes, ptr [[TMP10]], align 8
688 // CK2-64-NEXT: [[TMP11:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6
689 // CK2-64-NEXT: store ptr null, ptr [[TMP11]], align 8
690 // CK2-64-NEXT: [[TMP12:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7
691 // CK2-64-NEXT: store ptr null, ptr [[TMP12]], align 8
692 // CK2-64-NEXT: [[TMP13:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8
693 // CK2-64-NEXT: store i64 0, ptr [[TMP13]], align 8
694 // CK2-64-NEXT: [[TMP14:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9
695 // CK2-64-NEXT: store i64 0, ptr [[TMP14]], align 8
696 // CK2-64-NEXT: [[TMP15:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10
697 // CK2-64-NEXT: store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP15]], align 4
698 // CK2-64-NEXT: [[TMP16:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11
699 // CK2-64-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP16]], align 4
700 // CK2-64-NEXT: [[TMP17:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12
701 // CK2-64-NEXT: store i32 0, ptr [[TMP17]], align 4
702 // CK2-64-NEXT: [[TMP18:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1:[0-9]+]], i64 -1, i32 -1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l112.region_id, ptr [[KERNEL_ARGS]])
703 // CK2-64-NEXT: [[TMP19:%.*]] = icmp ne i32 [[TMP18]], 0
704 // CK2-64-NEXT: br i1 [[TMP19]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
705 // CK2-64: omp_offload.failed:
706 // CK2-64-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l112(ptr [[THIS1]]) #[[ATTR3:[0-9]+]]
707 // CK2-64-NEXT: br label [[OMP_OFFLOAD_CONT]]
708 // CK2-64: omp_offload.cont:
709 // CK2-64-NEXT: [[B:%.*]] = getelementptr inbounds [[STRUCT_ST]], ptr [[THIS1]], i32 0, i32 1
710 // CK2-64-NEXT: [[TMP20:%.*]] = load ptr, ptr [[B]], align 8
711 // CK2-64-NEXT: [[TMP21:%.*]] = getelementptr ptr, ptr [[B]], i32 1
712 // CK2-64-NEXT: [[TMP22:%.*]] = ptrtoint ptr [[TMP21]] to i64
713 // CK2-64-NEXT: [[TMP23:%.*]] = ptrtoint ptr [[B]] to i64
714 // CK2-64-NEXT: [[TMP24:%.*]] = sub i64 [[TMP22]], [[TMP23]]
715 // CK2-64-NEXT: [[TMP25:%.*]] = sdiv exact i64 [[TMP24]], ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)
716 // CK2-64-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[DOTOFFLOAD_SIZES]], ptr align 8 @.offload_sizes.1, i64 16, i1 false)
717 // CK2-64-NEXT: [[TMP26:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS2]], i32 0, i32 0
718 // CK2-64-NEXT: store ptr [[THIS1]], ptr [[TMP26]], align 8
719 // CK2-64-NEXT: [[TMP27:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS3]], i32 0, i32 0
720 // CK2-64-NEXT: store ptr [[B]], ptr [[TMP27]], align 8
721 // CK2-64-NEXT: [[TMP28:%.*]] = getelementptr inbounds [2 x i64], ptr [[DOTOFFLOAD_SIZES]], i32 0, i32 0
722 // CK2-64-NEXT: store i64 [[TMP25]], ptr [[TMP28]], align 8
723 // CK2-64-NEXT: [[TMP29:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_MAPPERS4]], i64 0, i64 0
724 // CK2-64-NEXT: store ptr null, ptr [[TMP29]], align 8
725 // CK2-64-NEXT: [[TMP30:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS2]], i32 0, i32 1
726 // CK2-64-NEXT: store ptr [[THIS1]], ptr [[TMP30]], align 8
727 // CK2-64-NEXT: [[TMP31:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS3]], i32 0, i32 1
728 // CK2-64-NEXT: store ptr [[TMP20]], ptr [[TMP31]], align 8
729 // CK2-64-NEXT: [[TMP32:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_MAPPERS4]], i64 0, i64 1
730 // CK2-64-NEXT: store ptr null, ptr [[TMP32]], align 8
731 // CK2-64-NEXT: [[TMP33:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS2]], i32 0, i32 0
732 // CK2-64-NEXT: [[TMP34:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS3]], i32 0, i32 0
733 // CK2-64-NEXT: [[TMP35:%.*]] = getelementptr inbounds [2 x i64], ptr [[DOTOFFLOAD_SIZES]], i32 0, i32 0
734 // CK2-64-NEXT: [[KERNEL_ARGS5:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
735 // CK2-64-NEXT: [[TMP36:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 0
736 // CK2-64-NEXT: store i32 2, ptr [[TMP36]], align 4
737 // CK2-64-NEXT: [[TMP37:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 1
738 // CK2-64-NEXT: store i32 2, ptr [[TMP37]], align 4
739 // CK2-64-NEXT: [[TMP38:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 2
740 // CK2-64-NEXT: store ptr [[TMP33]], ptr [[TMP38]], align 8
741 // CK2-64-NEXT: [[TMP39:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 3
742 // CK2-64-NEXT: store ptr [[TMP34]], ptr [[TMP39]], align 8
743 // CK2-64-NEXT: [[TMP40:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 4
744 // CK2-64-NEXT: store ptr [[TMP35]], ptr [[TMP40]], align 8
745 // CK2-64-NEXT: [[TMP41:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 5
746 // CK2-64-NEXT: store ptr @.offload_maptypes.2, ptr [[TMP41]], align 8
747 // CK2-64-NEXT: [[TMP42:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 6
748 // CK2-64-NEXT: store ptr null, ptr [[TMP42]], align 8
749 // CK2-64-NEXT: [[TMP43:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 7
750 // CK2-64-NEXT: store ptr null, ptr [[TMP43]], align 8
751 // CK2-64-NEXT: [[TMP44:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 8
752 // CK2-64-NEXT: store i64 0, ptr [[TMP44]], align 8
753 // CK2-64-NEXT: [[TMP45:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 9
754 // CK2-64-NEXT: store i64 0, ptr [[TMP45]], align 8
755 // CK2-64-NEXT: [[TMP46:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 10
756 // CK2-64-NEXT: store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP46]], align 4
757 // CK2-64-NEXT: [[TMP47:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 11
758 // CK2-64-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP47]], align 4
759 // CK2-64-NEXT: [[TMP48:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 12
760 // CK2-64-NEXT: store i32 0, ptr [[TMP48]], align 4
761 // CK2-64-NEXT: [[TMP49:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1]], i64 -1, i32 -1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l118.region_id, ptr [[KERNEL_ARGS5]])
762 // CK2-64-NEXT: [[TMP50:%.*]] = icmp ne i32 [[TMP49]], 0
763 // CK2-64-NEXT: br i1 [[TMP50]], label [[OMP_OFFLOAD_FAILED6:%.*]], label [[OMP_OFFLOAD_CONT7:%.*]]
764 // CK2-64: omp_offload.failed6:
765 // CK2-64-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l118(ptr [[THIS1]]) #[[ATTR3]]
766 // CK2-64-NEXT: br label [[OMP_OFFLOAD_CONT7]]
767 // CK2-64: omp_offload.cont7:
768 // CK2-64-NEXT: [[A8:%.*]] = getelementptr inbounds [[STRUCT_ST]], ptr [[THIS1]], i32 0, i32 0
769 // CK2-64-NEXT: [[B9:%.*]] = getelementptr inbounds [[STRUCT_ST]], ptr [[THIS1]], i32 0, i32 1
770 // CK2-64-NEXT: [[TMP51:%.*]] = load ptr, ptr [[B9]], align 8
771 // CK2-64-NEXT: [[TMP52:%.*]] = getelementptr ptr, ptr [[B9]], i32 1
772 // CK2-64-NEXT: [[TMP53:%.*]] = ptrtoint ptr [[TMP52]] to i64
773 // CK2-64-NEXT: [[TMP54:%.*]] = ptrtoint ptr [[A8]] to i64
774 // CK2-64-NEXT: [[TMP55:%.*]] = sub i64 [[TMP53]], [[TMP54]]
775 // CK2-64-NEXT: [[TMP56:%.*]] = sdiv exact i64 [[TMP55]], ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)
776 // CK2-64-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[DOTOFFLOAD_SIZES13]], ptr align 8 @.offload_sizes.3, i64 24, i1 false)
777 // CK2-64-NEXT: [[TMP57:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS10]], i32 0, i32 0
778 // CK2-64-NEXT: store ptr [[THIS1]], ptr [[TMP57]], align 8
779 // CK2-64-NEXT: [[TMP58:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS11]], i32 0, i32 0
780 // CK2-64-NEXT: store ptr [[A8]], ptr [[TMP58]], align 8
781 // CK2-64-NEXT: [[TMP59:%.*]] = getelementptr inbounds [3 x i64], ptr [[DOTOFFLOAD_SIZES13]], i32 0, i32 0
782 // CK2-64-NEXT: store i64 [[TMP56]], ptr [[TMP59]], align 8
783 // CK2-64-NEXT: [[TMP60:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS12]], i64 0, i64 0
784 // CK2-64-NEXT: store ptr null, ptr [[TMP60]], align 8
785 // CK2-64-NEXT: [[TMP61:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS10]], i32 0, i32 1
786 // CK2-64-NEXT: store ptr [[THIS1]], ptr [[TMP61]], align 8
787 // CK2-64-NEXT: [[TMP62:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS11]], i32 0, i32 1
788 // CK2-64-NEXT: store ptr [[A8]], ptr [[TMP62]], align 8
789 // CK2-64-NEXT: [[TMP63:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS12]], i64 0, i64 1
790 // CK2-64-NEXT: store ptr null, ptr [[TMP63]], align 8
791 // CK2-64-NEXT: [[TMP64:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS10]], i32 0, i32 2
792 // CK2-64-NEXT: store ptr [[THIS1]], ptr [[TMP64]], align 8
793 // CK2-64-NEXT: [[TMP65:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS11]], i32 0, i32 2
794 // CK2-64-NEXT: store ptr [[TMP51]], ptr [[TMP65]], align 8
795 // CK2-64-NEXT: [[TMP66:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS12]], i64 0, i64 2
796 // CK2-64-NEXT: store ptr null, ptr [[TMP66]], align 8
797 // CK2-64-NEXT: [[TMP67:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS10]], i32 0, i32 0
798 // CK2-64-NEXT: [[TMP68:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS11]], i32 0, i32 0
799 // CK2-64-NEXT: [[TMP69:%.*]] = getelementptr inbounds [3 x i64], ptr [[DOTOFFLOAD_SIZES13]], i32 0, i32 0
800 // CK2-64-NEXT: [[KERNEL_ARGS14:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
801 // CK2-64-NEXT: [[TMP70:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 0
802 // CK2-64-NEXT: store i32 2, ptr [[TMP70]], align 4
803 // CK2-64-NEXT: [[TMP71:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 1
804 // CK2-64-NEXT: store i32 3, ptr [[TMP71]], align 4
805 // CK2-64-NEXT: [[TMP72:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 2
806 // CK2-64-NEXT: store ptr [[TMP67]], ptr [[TMP72]], align 8
807 // CK2-64-NEXT: [[TMP73:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 3
808 // CK2-64-NEXT: store ptr [[TMP68]], ptr [[TMP73]], align 8
809 // CK2-64-NEXT: [[TMP74:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 4
810 // CK2-64-NEXT: store ptr [[TMP69]], ptr [[TMP74]], align 8
811 // CK2-64-NEXT: [[TMP75:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 5
812 // CK2-64-NEXT: store ptr @.offload_maptypes.4, ptr [[TMP75]], align 8
813 // CK2-64-NEXT: [[TMP76:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 6
814 // CK2-64-NEXT: store ptr null, ptr [[TMP76]], align 8
815 // CK2-64-NEXT: [[TMP77:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 7
816 // CK2-64-NEXT: store ptr null, ptr [[TMP77]], align 8
817 // CK2-64-NEXT: [[TMP78:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 8
818 // CK2-64-NEXT: store i64 0, ptr [[TMP78]], align 8
819 // CK2-64-NEXT: [[TMP79:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 9
820 // CK2-64-NEXT: store i64 0, ptr [[TMP79]], align 8
821 // CK2-64-NEXT: [[TMP80:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 10
822 // CK2-64-NEXT: store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP80]], align 4
823 // CK2-64-NEXT: [[TMP81:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 11
824 // CK2-64-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP81]], align 4
825 // CK2-64-NEXT: [[TMP82:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 12
826 // CK2-64-NEXT: store i32 0, ptr [[TMP82]], align 4
827 // CK2-64-NEXT: [[TMP83:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1]], i64 -1, i32 -1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l125.region_id, ptr [[KERNEL_ARGS14]])
828 // CK2-64-NEXT: [[TMP84:%.*]] = icmp ne i32 [[TMP83]], 0
829 // CK2-64-NEXT: br i1 [[TMP84]], label [[OMP_OFFLOAD_FAILED15:%.*]], label [[OMP_OFFLOAD_CONT16:%.*]]
830 // CK2-64: omp_offload.failed15:
831 // CK2-64-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l125(ptr [[THIS1]]) #[[ATTR3]]
832 // CK2-64-NEXT: br label [[OMP_OFFLOAD_CONT16]]
833 // CK2-64: omp_offload.cont16:
834 // CK2-64-NEXT: ret void
835 // CK2-64-LABEL: define {{[^@]+}}@_ZN2STIdEC2ERPd
836 // CK2-64-SAME: (ptr noundef nonnull align 8 dereferenceable(16) [[THIS:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[B:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 {
837 // CK2-64-NEXT: entry:
838 // CK2-64-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8
839 // CK2-64-NEXT: [[B_ADDR:%.*]] = alloca ptr, align 8
840 // CK2-64-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8
841 // CK2-64-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 8
842 // CK2-64-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8
843 // CK2-64-NEXT: [[A:%.*]] = getelementptr inbounds [[STRUCT_ST:%.*]], ptr [[THIS1]], i32 0, i32 0
844 // CK2-64-NEXT: store ptr null, ptr [[A]], align 8
845 // CK2-64-NEXT: [[B2:%.*]] = getelementptr inbounds [[STRUCT_ST]], ptr [[THIS1]], i32 0, i32 1
846 // CK2-64-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 8
847 // CK2-64-NEXT: store ptr [[TMP0]], ptr [[B2]], align 8
848 // CK2-64-NEXT: ret void
849 // CK2-64-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l112
850 // CK2-64-SAME: (ptr noundef [[THIS:%.*]]) #[[ATTR2:[0-9]+]] {
851 // CK2-64-NEXT: entry:
852 // CK2-64-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8
853 // CK2-64-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8
854 // CK2-64-NEXT: [[TMP0:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8
855 // CK2-64-NEXT: [[A:%.*]] = getelementptr inbounds [[STRUCT_ST:%.*]], ptr [[TMP0]], i32 0, i32 0
856 // CK2-64-NEXT: [[TMP1:%.*]] = load ptr, ptr [[A]], align 8
857 // CK2-64-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds double, ptr [[TMP1]], i32 1
858 // CK2-64-NEXT: store ptr [[INCDEC_PTR]], ptr [[A]], align 8
859 // CK2-64-NEXT: ret void
860 // CK2-64-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l118
861 // CK2-64-SAME: (ptr noundef [[THIS:%.*]]) #[[ATTR2]] {
862 // CK2-64-NEXT: entry:
863 // CK2-64-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8
864 // CK2-64-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8
865 // CK2-64-NEXT: [[TMP0:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8
866 // CK2-64-NEXT: [[B:%.*]] = getelementptr inbounds [[STRUCT_ST:%.*]], ptr [[TMP0]], i32 0, i32 1
867 // CK2-64-NEXT: [[TMP1:%.*]] = load ptr, ptr [[B]], align 8
868 // CK2-64-NEXT: [[TMP2:%.*]] = load ptr, ptr [[TMP1]], align 8
869 // CK2-64-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds double, ptr [[TMP2]], i32 1
870 // CK2-64-NEXT: store ptr [[INCDEC_PTR]], ptr [[TMP1]], align 8
871 // CK2-64-NEXT: ret void
872 // CK2-64-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l125
873 // CK2-64-SAME: (ptr noundef [[THIS:%.*]]) #[[ATTR2]] {
874 // CK2-64-NEXT: entry:
875 // CK2-64-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8
876 // CK2-64-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8
877 // CK2-64-NEXT: [[TMP0:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8
878 // CK2-64-NEXT: [[A:%.*]] = getelementptr inbounds [[STRUCT_ST:%.*]], ptr [[TMP0]], i32 0, i32 0
879 // CK2-64-NEXT: [[TMP1:%.*]] = load ptr, ptr [[A]], align 8
880 // CK2-64-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds double, ptr [[TMP1]], i32 1
881 // CK2-64-NEXT: store ptr [[INCDEC_PTR]], ptr [[A]], align 8
882 // CK2-64-NEXT: [[B:%.*]] = getelementptr inbounds [[STRUCT_ST]], ptr [[TMP0]], i32 0, i32 1
883 // CK2-64-NEXT: [[TMP2:%.*]] = load ptr, ptr [[B]], align 8
884 // CK2-64-NEXT: [[TMP3:%.*]] = load ptr, ptr [[TMP2]], align 8
885 // CK2-64-NEXT: [[INCDEC_PTR1:%.*]] = getelementptr inbounds double, ptr [[TMP3]], i32 1
886 // CK2-64-NEXT: store ptr [[INCDEC_PTR1]], ptr [[TMP2]], align 8
887 // CK2-64-NEXT: ret void
888 // CK2-64-LABEL: define {{[^@]+}}@.omp_offloading.requires_reg
889 // CK2-64-SAME: () #[[ATTR5:[0-9]+]] {
890 // CK2-64-NEXT: entry:
891 // CK2-64-NEXT: call void @__tgt_register_requires(i64 1)
892 // CK2-64-NEXT: ret void
893 // CK2-32-LABEL: define {{[^@]+}}@_Z3barPd
894 // CK2-32-SAME: (ptr noundef [[ARG:%.*]]) #[[ATTR0:[0-9]+]] {
895 // CK2-32-NEXT: entry:
896 // CK2-32-NEXT: [[ARG_ADDR:%.*]] = alloca ptr, align 4
897 // CK2-32-NEXT: [[A:%.*]] = alloca [[STRUCT_ST:%.*]], align 4
898 // CK2-32-NEXT: store ptr [[ARG]], ptr [[ARG_ADDR]], align 4
899 // CK2-32-NEXT: call void @_ZN2STIdEC1ERPd(ptr noundef nonnull align 4 dereferenceable(8) [[A]], ptr noundef nonnull align 4 dereferenceable(4) [[ARG_ADDR]])
900 // CK2-32-NEXT: call void @_ZN2STIdE3fooERPd(ptr noundef nonnull align 4 dereferenceable(8) [[A]], ptr noundef nonnull align 4 dereferenceable(4) [[ARG_ADDR]])
901 // CK2-32-NEXT: [[TMP0:%.*]] = load ptr, ptr [[ARG_ADDR]], align 4
902 // CK2-32-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds double, ptr [[TMP0]], i32 1
903 // CK2-32-NEXT: store ptr [[INCDEC_PTR]], ptr [[ARG_ADDR]], align 4
904 // CK2-32-NEXT: ret void
905 // CK2-32-LABEL: define {{[^@]+}}@_ZN2STIdEC1ERPd
906 // CK2-32-SAME: (ptr noundef nonnull align 4 dereferenceable(8) [[THIS:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[B:%.*]]) unnamed_addr #[[ATTR1:[0-9]+]] comdat align 2 {
907 // CK2-32-NEXT: entry:
908 // CK2-32-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4
909 // CK2-32-NEXT: [[B_ADDR:%.*]] = alloca ptr, align 4
910 // CK2-32-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4
911 // CK2-32-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 4
912 // CK2-32-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4
913 // CK2-32-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 4
914 // CK2-32-NEXT: call void @_ZN2STIdEC2ERPd(ptr noundef nonnull align 4 dereferenceable(8) [[THIS1]], ptr noundef nonnull align 4 dereferenceable(4) [[TMP0]])
915 // CK2-32-NEXT: ret void
916 // CK2-32-LABEL: define {{[^@]+}}@_ZN2STIdE3fooERPd
917 // CK2-32-SAME: (ptr noundef nonnull align 4 dereferenceable(8) [[THIS:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[ARG:%.*]]) #[[ATTR0]] comdat align 2 {
918 // CK2-32-NEXT: entry:
919 // CK2-32-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4
920 // CK2-32-NEXT: [[ARG_ADDR:%.*]] = alloca ptr, align 4
921 // CK2-32-NEXT: [[LA:%.*]] = alloca ptr, align 4
922 // CK2-32-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 4
923 // CK2-32-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 4
924 // CK2-32-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 4
925 // CK2-32-NEXT: [[DOTOFFLOAD_BASEPTRS2:%.*]] = alloca [2 x ptr], align 4
926 // CK2-32-NEXT: [[DOTOFFLOAD_PTRS3:%.*]] = alloca [2 x ptr], align 4
927 // CK2-32-NEXT: [[DOTOFFLOAD_MAPPERS4:%.*]] = alloca [2 x ptr], align 4
928 // CK2-32-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [2 x i64], align 4
929 // CK2-32-NEXT: [[DOTOFFLOAD_BASEPTRS10:%.*]] = alloca [3 x ptr], align 4
930 // CK2-32-NEXT: [[DOTOFFLOAD_PTRS11:%.*]] = alloca [3 x ptr], align 4
931 // CK2-32-NEXT: [[DOTOFFLOAD_MAPPERS12:%.*]] = alloca [3 x ptr], align 4
932 // CK2-32-NEXT: [[DOTOFFLOAD_SIZES13:%.*]] = alloca [3 x i64], align 4
933 // CK2-32-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4
934 // CK2-32-NEXT: store ptr [[ARG]], ptr [[ARG_ADDR]], align 4
935 // CK2-32-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4
936 // CK2-32-NEXT: store ptr null, ptr [[LA]], align 4
937 // CK2-32-NEXT: [[A:%.*]] = getelementptr inbounds [[STRUCT_ST:%.*]], ptr [[THIS1]], i32 0, i32 0
938 // CK2-32-NEXT: [[TMP0:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
939 // CK2-32-NEXT: store ptr [[THIS1]], ptr [[TMP0]], align 4
940 // CK2-32-NEXT: [[TMP1:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0
941 // CK2-32-NEXT: store ptr [[A]], ptr [[TMP1]], align 4
942 // CK2-32-NEXT: [[TMP2:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
943 // CK2-32-NEXT: store ptr null, ptr [[TMP2]], align 4
944 // CK2-32-NEXT: [[TMP3:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
945 // CK2-32-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0
946 // CK2-32-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8
947 // CK2-32-NEXT: [[TMP5:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0
948 // CK2-32-NEXT: store i32 2, ptr [[TMP5]], align 4
949 // CK2-32-NEXT: [[TMP6:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1
950 // CK2-32-NEXT: store i32 1, ptr [[TMP6]], align 4
951 // CK2-32-NEXT: [[TMP7:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2
952 // CK2-32-NEXT: store ptr [[TMP3]], ptr [[TMP7]], align 4
953 // CK2-32-NEXT: [[TMP8:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3
954 // CK2-32-NEXT: store ptr [[TMP4]], ptr [[TMP8]], align 4
955 // CK2-32-NEXT: [[TMP9:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4
956 // CK2-32-NEXT: store ptr @.offload_sizes, ptr [[TMP9]], align 4
957 // CK2-32-NEXT: [[TMP10:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5
958 // CK2-32-NEXT: store ptr @.offload_maptypes, ptr [[TMP10]], align 4
959 // CK2-32-NEXT: [[TMP11:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6
960 // CK2-32-NEXT: store ptr null, ptr [[TMP11]], align 4
961 // CK2-32-NEXT: [[TMP12:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7
962 // CK2-32-NEXT: store ptr null, ptr [[TMP12]], align 4
963 // CK2-32-NEXT: [[TMP13:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8
964 // CK2-32-NEXT: store i64 0, ptr [[TMP13]], align 8
965 // CK2-32-NEXT: [[TMP14:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9
966 // CK2-32-NEXT: store i64 0, ptr [[TMP14]], align 8
967 // CK2-32-NEXT: [[TMP15:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10
968 // CK2-32-NEXT: store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP15]], align 4
969 // CK2-32-NEXT: [[TMP16:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11
970 // CK2-32-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP16]], align 4
971 // CK2-32-NEXT: [[TMP17:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12
972 // CK2-32-NEXT: store i32 0, ptr [[TMP17]], align 4
973 // CK2-32-NEXT: [[TMP18:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1:[0-9]+]], i64 -1, i32 -1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l112.region_id, ptr [[KERNEL_ARGS]])
974 // CK2-32-NEXT: [[TMP19:%.*]] = icmp ne i32 [[TMP18]], 0
975 // CK2-32-NEXT: br i1 [[TMP19]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
976 // CK2-32: omp_offload.failed:
977 // CK2-32-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l112(ptr [[THIS1]]) #[[ATTR3:[0-9]+]]
978 // CK2-32-NEXT: br label [[OMP_OFFLOAD_CONT]]
979 // CK2-32: omp_offload.cont:
980 // CK2-32-NEXT: [[B:%.*]] = getelementptr inbounds [[STRUCT_ST]], ptr [[THIS1]], i32 0, i32 1
981 // CK2-32-NEXT: [[TMP20:%.*]] = load ptr, ptr [[B]], align 4
982 // CK2-32-NEXT: [[TMP21:%.*]] = getelementptr ptr, ptr [[B]], i32 1
983 // CK2-32-NEXT: [[TMP22:%.*]] = ptrtoint ptr [[TMP21]] to i64
984 // CK2-32-NEXT: [[TMP23:%.*]] = ptrtoint ptr [[B]] to i64
985 // CK2-32-NEXT: [[TMP24:%.*]] = sub i64 [[TMP22]], [[TMP23]]
986 // CK2-32-NEXT: [[TMP25:%.*]] = sdiv exact i64 [[TMP24]], ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)
987 // CK2-32-NEXT: call void @llvm.memcpy.p0.p0.i32(ptr align 4 [[DOTOFFLOAD_SIZES]], ptr align 4 @.offload_sizes.1, i32 16, i1 false)
988 // CK2-32-NEXT: [[TMP26:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS2]], i32 0, i32 0
989 // CK2-32-NEXT: store ptr [[THIS1]], ptr [[TMP26]], align 4
990 // CK2-32-NEXT: [[TMP27:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS3]], i32 0, i32 0
991 // CK2-32-NEXT: store ptr [[B]], ptr [[TMP27]], align 4
992 // CK2-32-NEXT: [[TMP28:%.*]] = getelementptr inbounds [2 x i64], ptr [[DOTOFFLOAD_SIZES]], i32 0, i32 0
993 // CK2-32-NEXT: store i64 [[TMP25]], ptr [[TMP28]], align 4
994 // CK2-32-NEXT: [[TMP29:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_MAPPERS4]], i32 0, i32 0
995 // CK2-32-NEXT: store ptr null, ptr [[TMP29]], align 4
996 // CK2-32-NEXT: [[TMP30:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS2]], i32 0, i32 1
997 // CK2-32-NEXT: store ptr [[THIS1]], ptr [[TMP30]], align 4
998 // CK2-32-NEXT: [[TMP31:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS3]], i32 0, i32 1
999 // CK2-32-NEXT: store ptr [[TMP20]], ptr [[TMP31]], align 4
1000 // CK2-32-NEXT: [[TMP32:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_MAPPERS4]], i32 0, i32 1
1001 // CK2-32-NEXT: store ptr null, ptr [[TMP32]], align 4
1002 // CK2-32-NEXT: [[TMP33:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS2]], i32 0, i32 0
1003 // CK2-32-NEXT: [[TMP34:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS3]], i32 0, i32 0
1004 // CK2-32-NEXT: [[TMP35:%.*]] = getelementptr inbounds [2 x i64], ptr [[DOTOFFLOAD_SIZES]], i32 0, i32 0
1005 // CK2-32-NEXT: [[KERNEL_ARGS5:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
1006 // CK2-32-NEXT: [[TMP36:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 0
1007 // CK2-32-NEXT: store i32 2, ptr [[TMP36]], align 4
1008 // CK2-32-NEXT: [[TMP37:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 1
1009 // CK2-32-NEXT: store i32 2, ptr [[TMP37]], align 4
1010 // CK2-32-NEXT: [[TMP38:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 2
1011 // CK2-32-NEXT: store ptr [[TMP33]], ptr [[TMP38]], align 4
1012 // CK2-32-NEXT: [[TMP39:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 3
1013 // CK2-32-NEXT: store ptr [[TMP34]], ptr [[TMP39]], align 4
1014 // CK2-32-NEXT: [[TMP40:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 4
1015 // CK2-32-NEXT: store ptr [[TMP35]], ptr [[TMP40]], align 4
1016 // CK2-32-NEXT: [[TMP41:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 5
1017 // CK2-32-NEXT: store ptr @.offload_maptypes.2, ptr [[TMP41]], align 4
1018 // CK2-32-NEXT: [[TMP42:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 6
1019 // CK2-32-NEXT: store ptr null, ptr [[TMP42]], align 4
1020 // CK2-32-NEXT: [[TMP43:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 7
1021 // CK2-32-NEXT: store ptr null, ptr [[TMP43]], align 4
1022 // CK2-32-NEXT: [[TMP44:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 8
1023 // CK2-32-NEXT: store i64 0, ptr [[TMP44]], align 8
1024 // CK2-32-NEXT: [[TMP45:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 9
1025 // CK2-32-NEXT: store i64 0, ptr [[TMP45]], align 8
1026 // CK2-32-NEXT: [[TMP46:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 10
1027 // CK2-32-NEXT: store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP46]], align 4
1028 // CK2-32-NEXT: [[TMP47:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 11
1029 // CK2-32-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP47]], align 4
1030 // CK2-32-NEXT: [[TMP48:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 12
1031 // CK2-32-NEXT: store i32 0, ptr [[TMP48]], align 4
1032 // CK2-32-NEXT: [[TMP49:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1]], i64 -1, i32 -1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l118.region_id, ptr [[KERNEL_ARGS5]])
1033 // CK2-32-NEXT: [[TMP50:%.*]] = icmp ne i32 [[TMP49]], 0
1034 // CK2-32-NEXT: br i1 [[TMP50]], label [[OMP_OFFLOAD_FAILED6:%.*]], label [[OMP_OFFLOAD_CONT7:%.*]]
1035 // CK2-32: omp_offload.failed6:
1036 // CK2-32-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l118(ptr [[THIS1]]) #[[ATTR3]]
1037 // CK2-32-NEXT: br label [[OMP_OFFLOAD_CONT7]]
1038 // CK2-32: omp_offload.cont7:
1039 // CK2-32-NEXT: [[A8:%.*]] = getelementptr inbounds [[STRUCT_ST]], ptr [[THIS1]], i32 0, i32 0
1040 // CK2-32-NEXT: [[B9:%.*]] = getelementptr inbounds [[STRUCT_ST]], ptr [[THIS1]], i32 0, i32 1
1041 // CK2-32-NEXT: [[TMP51:%.*]] = load ptr, ptr [[B9]], align 4
1042 // CK2-32-NEXT: [[TMP52:%.*]] = getelementptr ptr, ptr [[B9]], i32 1
1043 // CK2-32-NEXT: [[TMP53:%.*]] = ptrtoint ptr [[TMP52]] to i64
1044 // CK2-32-NEXT: [[TMP54:%.*]] = ptrtoint ptr [[A8]] to i64
1045 // CK2-32-NEXT: [[TMP55:%.*]] = sub i64 [[TMP53]], [[TMP54]]
1046 // CK2-32-NEXT: [[TMP56:%.*]] = sdiv exact i64 [[TMP55]], ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)
1047 // CK2-32-NEXT: call void @llvm.memcpy.p0.p0.i32(ptr align 4 [[DOTOFFLOAD_SIZES13]], ptr align 4 @.offload_sizes.3, i32 24, i1 false)
1048 // CK2-32-NEXT: [[TMP57:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS10]], i32 0, i32 0
1049 // CK2-32-NEXT: store ptr [[THIS1]], ptr [[TMP57]], align 4
1050 // CK2-32-NEXT: [[TMP58:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS11]], i32 0, i32 0
1051 // CK2-32-NEXT: store ptr [[A8]], ptr [[TMP58]], align 4
1052 // CK2-32-NEXT: [[TMP59:%.*]] = getelementptr inbounds [3 x i64], ptr [[DOTOFFLOAD_SIZES13]], i32 0, i32 0
1053 // CK2-32-NEXT: store i64 [[TMP56]], ptr [[TMP59]], align 4
1054 // CK2-32-NEXT: [[TMP60:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS12]], i32 0, i32 0
1055 // CK2-32-NEXT: store ptr null, ptr [[TMP60]], align 4
1056 // CK2-32-NEXT: [[TMP61:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS10]], i32 0, i32 1
1057 // CK2-32-NEXT: store ptr [[THIS1]], ptr [[TMP61]], align 4
1058 // CK2-32-NEXT: [[TMP62:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS11]], i32 0, i32 1
1059 // CK2-32-NEXT: store ptr [[A8]], ptr [[TMP62]], align 4
1060 // CK2-32-NEXT: [[TMP63:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS12]], i32 0, i32 1
1061 // CK2-32-NEXT: store ptr null, ptr [[TMP63]], align 4
1062 // CK2-32-NEXT: [[TMP64:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS10]], i32 0, i32 2
1063 // CK2-32-NEXT: store ptr [[THIS1]], ptr [[TMP64]], align 4
1064 // CK2-32-NEXT: [[TMP65:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS11]], i32 0, i32 2
1065 // CK2-32-NEXT: store ptr [[TMP51]], ptr [[TMP65]], align 4
1066 // CK2-32-NEXT: [[TMP66:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS12]], i32 0, i32 2
1067 // CK2-32-NEXT: store ptr null, ptr [[TMP66]], align 4
1068 // CK2-32-NEXT: [[TMP67:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS10]], i32 0, i32 0
1069 // CK2-32-NEXT: [[TMP68:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS11]], i32 0, i32 0
1070 // CK2-32-NEXT: [[TMP69:%.*]] = getelementptr inbounds [3 x i64], ptr [[DOTOFFLOAD_SIZES13]], i32 0, i32 0
1071 // CK2-32-NEXT: [[KERNEL_ARGS14:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
1072 // CK2-32-NEXT: [[TMP70:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 0
1073 // CK2-32-NEXT: store i32 2, ptr [[TMP70]], align 4
1074 // CK2-32-NEXT: [[TMP71:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 1
1075 // CK2-32-NEXT: store i32 3, ptr [[TMP71]], align 4
1076 // CK2-32-NEXT: [[TMP72:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 2
1077 // CK2-32-NEXT: store ptr [[TMP67]], ptr [[TMP72]], align 4
1078 // CK2-32-NEXT: [[TMP73:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 3
1079 // CK2-32-NEXT: store ptr [[TMP68]], ptr [[TMP73]], align 4
1080 // CK2-32-NEXT: [[TMP74:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 4
1081 // CK2-32-NEXT: store ptr [[TMP69]], ptr [[TMP74]], align 4
1082 // CK2-32-NEXT: [[TMP75:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 5
1083 // CK2-32-NEXT: store ptr @.offload_maptypes.4, ptr [[TMP75]], align 4
1084 // CK2-32-NEXT: [[TMP76:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 6
1085 // CK2-32-NEXT: store ptr null, ptr [[TMP76]], align 4
1086 // CK2-32-NEXT: [[TMP77:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 7
1087 // CK2-32-NEXT: store ptr null, ptr [[TMP77]], align 4
1088 // CK2-32-NEXT: [[TMP78:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 8
1089 // CK2-32-NEXT: store i64 0, ptr [[TMP78]], align 8
1090 // CK2-32-NEXT: [[TMP79:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 9
1091 // CK2-32-NEXT: store i64 0, ptr [[TMP79]], align 8
1092 // CK2-32-NEXT: [[TMP80:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 10
1093 // CK2-32-NEXT: store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP80]], align 4
1094 // CK2-32-NEXT: [[TMP81:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 11
1095 // CK2-32-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP81]], align 4
1096 // CK2-32-NEXT: [[TMP82:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 12
1097 // CK2-32-NEXT: store i32 0, ptr [[TMP82]], align 4
1098 // CK2-32-NEXT: [[TMP83:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1]], i64 -1, i32 -1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l125.region_id, ptr [[KERNEL_ARGS14]])
1099 // CK2-32-NEXT: [[TMP84:%.*]] = icmp ne i32 [[TMP83]], 0
1100 // CK2-32-NEXT: br i1 [[TMP84]], label [[OMP_OFFLOAD_FAILED15:%.*]], label [[OMP_OFFLOAD_CONT16:%.*]]
1101 // CK2-32: omp_offload.failed15:
1102 // CK2-32-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l125(ptr [[THIS1]]) #[[ATTR3]]
1103 // CK2-32-NEXT: br label [[OMP_OFFLOAD_CONT16]]
1104 // CK2-32: omp_offload.cont16:
1105 // CK2-32-NEXT: ret void
1106 // CK2-32-LABEL: define {{[^@]+}}@_ZN2STIdEC2ERPd
1107 // CK2-32-SAME: (ptr noundef nonnull align 4 dereferenceable(8) [[THIS:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[B:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 {
1108 // CK2-32-NEXT: entry:
1109 // CK2-32-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4
1110 // CK2-32-NEXT: [[B_ADDR:%.*]] = alloca ptr, align 4
1111 // CK2-32-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4
1112 // CK2-32-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 4
1113 // CK2-32-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4
1114 // CK2-32-NEXT: [[A:%.*]] = getelementptr inbounds [[STRUCT_ST:%.*]], ptr [[THIS1]], i32 0, i32 0
1115 // CK2-32-NEXT: store ptr null, ptr [[A]], align 4
1116 // CK2-32-NEXT: [[B2:%.*]] = getelementptr inbounds [[STRUCT_ST]], ptr [[THIS1]], i32 0, i32 1
1117 // CK2-32-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 4
1118 // CK2-32-NEXT: store ptr [[TMP0]], ptr [[B2]], align 4
1119 // CK2-32-NEXT: ret void
1120 // CK2-32-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l112
1121 // CK2-32-SAME: (ptr noundef [[THIS:%.*]]) #[[ATTR2:[0-9]+]] {
1122 // CK2-32-NEXT: entry:
1123 // CK2-32-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4
1124 // CK2-32-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4
1125 // CK2-32-NEXT: [[TMP0:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4
1126 // CK2-32-NEXT: [[A:%.*]] = getelementptr inbounds [[STRUCT_ST:%.*]], ptr [[TMP0]], i32 0, i32 0
1127 // CK2-32-NEXT: [[TMP1:%.*]] = load ptr, ptr [[A]], align 4
1128 // CK2-32-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds double, ptr [[TMP1]], i32 1
1129 // CK2-32-NEXT: store ptr [[INCDEC_PTR]], ptr [[A]], align 4
1130 // CK2-32-NEXT: ret void
1131 // CK2-32-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l118
1132 // CK2-32-SAME: (ptr noundef [[THIS:%.*]]) #[[ATTR2]] {
1133 // CK2-32-NEXT: entry:
1134 // CK2-32-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4
1135 // CK2-32-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4
1136 // CK2-32-NEXT: [[TMP0:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4
1137 // CK2-32-NEXT: [[B:%.*]] = getelementptr inbounds [[STRUCT_ST:%.*]], ptr [[TMP0]], i32 0, i32 1
1138 // CK2-32-NEXT: [[TMP1:%.*]] = load ptr, ptr [[B]], align 4
1139 // CK2-32-NEXT: [[TMP2:%.*]] = load ptr, ptr [[TMP1]], align 4
1140 // CK2-32-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds double, ptr [[TMP2]], i32 1
1141 // CK2-32-NEXT: store ptr [[INCDEC_PTR]], ptr [[TMP1]], align 4
1142 // CK2-32-NEXT: ret void
1143 // CK2-32-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l125
1144 // CK2-32-SAME: (ptr noundef [[THIS:%.*]]) #[[ATTR2]] {
1145 // CK2-32-NEXT: entry:
1146 // CK2-32-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4
1147 // CK2-32-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4
1148 // CK2-32-NEXT: [[TMP0:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4
1149 // CK2-32-NEXT: [[A:%.*]] = getelementptr inbounds [[STRUCT_ST:%.*]], ptr [[TMP0]], i32 0, i32 0
1150 // CK2-32-NEXT: [[TMP1:%.*]] = load ptr, ptr [[A]], align 4
1151 // CK2-32-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds double, ptr [[TMP1]], i32 1
1152 // CK2-32-NEXT: store ptr [[INCDEC_PTR]], ptr [[A]], align 4
1153 // CK2-32-NEXT: [[B:%.*]] = getelementptr inbounds [[STRUCT_ST]], ptr [[TMP0]], i32 0, i32 1
1154 // CK2-32-NEXT: [[TMP2:%.*]] = load ptr, ptr [[B]], align 4
1155 // CK2-32-NEXT: [[TMP3:%.*]] = load ptr, ptr [[TMP2]], align 4
1156 // CK2-32-NEXT: [[INCDEC_PTR1:%.*]] = getelementptr inbounds double, ptr [[TMP3]], i32 1
1157 // CK2-32-NEXT: store ptr [[INCDEC_PTR1]], ptr [[TMP2]], align 4
1158 // CK2-32-NEXT: ret void
1159 // CK2-32-LABEL: define {{[^@]+}}@.omp_offloading.requires_reg
1160 // CK2-32-SAME: () #[[ATTR5:[0-9]+]] {
1161 // CK2-32-NEXT: entry:
1162 // CK2-32-NEXT: call void @__tgt_register_requires(i64 1)
1163 // CK2-32-NEXT: ret void
1164 // CK3-64-LABEL: define {{[^@]+}}@_Z3barv
1165 // CK3-64-SAME: () #[[ATTR0:[0-9]+]] {
1166 // CK3-64-NEXT: entry:
1167 // CK3-64-NEXT: [[PTR:%.*]] = alloca ptr, align 64
1168 // CK3-64-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 8
1169 // CK3-64-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 8
1170 // CK3-64-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 8
1171 // CK3-64-NEXT: [[TMP0:%.*]] = load ptr, ptr [[PTR]], align 64
1172 // CK3-64-NEXT: [[TMP1:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
1173 // CK3-64-NEXT: store ptr [[TMP0]], ptr [[TMP1]], align 8
1174 // CK3-64-NEXT: [[TMP2:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0
1175 // CK3-64-NEXT: store ptr [[TMP0]], ptr [[TMP2]], align 8
1176 // CK3-64-NEXT: [[TMP3:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
1177 // CK3-64-NEXT: store ptr null, ptr [[TMP3]], align 8
1178 // CK3-64-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
1179 // CK3-64-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0
1180 // CK3-64-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8
1181 // CK3-64-NEXT: [[TMP6:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0
1182 // CK3-64-NEXT: store i32 2, ptr [[TMP6]], align 4
1183 // CK3-64-NEXT: [[TMP7:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1
1184 // CK3-64-NEXT: store i32 1, ptr [[TMP7]], align 4
1185 // CK3-64-NEXT: [[TMP8:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2
1186 // CK3-64-NEXT: store ptr [[TMP4]], ptr [[TMP8]], align 8
1187 // CK3-64-NEXT: [[TMP9:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3
1188 // CK3-64-NEXT: store ptr [[TMP5]], ptr [[TMP9]], align 8
1189 // CK3-64-NEXT: [[TMP10:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4
1190 // CK3-64-NEXT: store ptr @.offload_sizes, ptr [[TMP10]], align 8
1191 // CK3-64-NEXT: [[TMP11:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5
1192 // CK3-64-NEXT: store ptr @.offload_maptypes, ptr [[TMP11]], align 8
1193 // CK3-64-NEXT: [[TMP12:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6
1194 // CK3-64-NEXT: store ptr null, ptr [[TMP12]], align 8
1195 // CK3-64-NEXT: [[TMP13:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7
1196 // CK3-64-NEXT: store ptr null, ptr [[TMP13]], align 8
1197 // CK3-64-NEXT: [[TMP14:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8
1198 // CK3-64-NEXT: store i64 0, ptr [[TMP14]], align 8
1199 // CK3-64-NEXT: [[TMP15:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9
1200 // CK3-64-NEXT: store i64 0, ptr [[TMP15]], align 8
1201 // CK3-64-NEXT: [[TMP16:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10
1202 // CK3-64-NEXT: store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP16]], align 4
1203 // CK3-64-NEXT: [[TMP17:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11
1204 // CK3-64-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP17]], align 4
1205 // CK3-64-NEXT: [[TMP18:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12
1206 // CK3-64-NEXT: store i32 0, ptr [[TMP18]], align 4
1207 // CK3-64-NEXT: [[TMP19:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1:[0-9]+]], i64 -1, i32 -1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3barv_l159.region_id, ptr [[KERNEL_ARGS]])
1208 // CK3-64-NEXT: [[TMP20:%.*]] = icmp ne i32 [[TMP19]], 0
1209 // CK3-64-NEXT: br i1 [[TMP20]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
1210 // CK3-64: omp_offload.failed:
1211 // CK3-64-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3barv_l159(ptr [[TMP0]]) #[[ATTR2:[0-9]+]]
1212 // CK3-64-NEXT: br label [[OMP_OFFLOAD_CONT]]
1213 // CK3-64: omp_offload.cont:
1214 // CK3-64-NEXT: ret void
1215 // CK3-64-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3barv_l159
1216 // CK3-64-SAME: (ptr noundef [[PTR:%.*]]) #[[ATTR1:[0-9]+]] {
1217 // CK3-64-NEXT: entry:
1218 // CK3-64-NEXT: [[PTR_ADDR:%.*]] = alloca ptr, align 8
1219 // CK3-64-NEXT: store ptr [[PTR]], ptr [[PTR_ADDR]], align 8
1220 // CK3-64-NEXT: [[TMP0:%.*]] = load ptr, ptr [[PTR_ADDR]], align 8
1221 // CK3-64-NEXT: store double 0.000000e+00, ptr [[TMP0]], align 8
1222 // CK3-64-NEXT: ret void
1223 // CK3-64-LABEL: define {{[^@]+}}@.omp_offloading.requires_reg
1224 // CK3-64-SAME: () #[[ATTR3:[0-9]+]] {
1225 // CK3-64-NEXT: entry:
1226 // CK3-64-NEXT: call void @__tgt_register_requires(i64 1)
1227 // CK3-64-NEXT: ret void
1228 // CK3-32-LABEL: define {{[^@]+}}@_Z3barv
1229 // CK3-32-SAME: () #[[ATTR0:[0-9]+]] {
1230 // CK3-32-NEXT: entry:
1231 // CK3-32-NEXT: [[PTR:%.*]] = alloca ptr, align 64
1232 // CK3-32-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 4
1233 // CK3-32-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 4
1234 // CK3-32-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 4
1235 // CK3-32-NEXT: [[TMP0:%.*]] = load ptr, ptr [[PTR]], align 64
1236 // CK3-32-NEXT: [[TMP1:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
1237 // CK3-32-NEXT: store ptr [[TMP0]], ptr [[TMP1]], align 4
1238 // CK3-32-NEXT: [[TMP2:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0
1239 // CK3-32-NEXT: store ptr [[TMP0]], ptr [[TMP2]], align 4
1240 // CK3-32-NEXT: [[TMP3:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
1241 // CK3-32-NEXT: store ptr null, ptr [[TMP3]], align 4
1242 // CK3-32-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
1243 // CK3-32-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0
1244 // CK3-32-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8
1245 // CK3-32-NEXT: [[TMP6:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0
1246 // CK3-32-NEXT: store i32 2, ptr [[TMP6]], align 4
1247 // CK3-32-NEXT: [[TMP7:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1
1248 // CK3-32-NEXT: store i32 1, ptr [[TMP7]], align 4
1249 // CK3-32-NEXT: [[TMP8:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2
1250 // CK3-32-NEXT: store ptr [[TMP4]], ptr [[TMP8]], align 4
1251 // CK3-32-NEXT: [[TMP9:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3
1252 // CK3-32-NEXT: store ptr [[TMP5]], ptr [[TMP9]], align 4
1253 // CK3-32-NEXT: [[TMP10:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4
1254 // CK3-32-NEXT: store ptr @.offload_sizes, ptr [[TMP10]], align 4
1255 // CK3-32-NEXT: [[TMP11:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5
1256 // CK3-32-NEXT: store ptr @.offload_maptypes, ptr [[TMP11]], align 4
1257 // CK3-32-NEXT: [[TMP12:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6
1258 // CK3-32-NEXT: store ptr null, ptr [[TMP12]], align 4
1259 // CK3-32-NEXT: [[TMP13:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7
1260 // CK3-32-NEXT: store ptr null, ptr [[TMP13]], align 4
1261 // CK3-32-NEXT: [[TMP14:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8
1262 // CK3-32-NEXT: store i64 0, ptr [[TMP14]], align 8
1263 // CK3-32-NEXT: [[TMP15:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9
1264 // CK3-32-NEXT: store i64 0, ptr [[TMP15]], align 8
1265 // CK3-32-NEXT: [[TMP16:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10
1266 // CK3-32-NEXT: store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP16]], align 4
1267 // CK3-32-NEXT: [[TMP17:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11
1268 // CK3-32-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP17]], align 4
1269 // CK3-32-NEXT: [[TMP18:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12
1270 // CK3-32-NEXT: store i32 0, ptr [[TMP18]], align 4
1271 // CK3-32-NEXT: [[TMP19:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1:[0-9]+]], i64 -1, i32 -1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3barv_l159.region_id, ptr [[KERNEL_ARGS]])
1272 // CK3-32-NEXT: [[TMP20:%.*]] = icmp ne i32 [[TMP19]], 0
1273 // CK3-32-NEXT: br i1 [[TMP20]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
1274 // CK3-32: omp_offload.failed:
1275 // CK3-32-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3barv_l159(ptr [[TMP0]]) #[[ATTR2:[0-9]+]]
1276 // CK3-32-NEXT: br label [[OMP_OFFLOAD_CONT]]
1277 // CK3-32: omp_offload.cont:
1278 // CK3-32-NEXT: ret void
1279 // CK3-32-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3barv_l159
1280 // CK3-32-SAME: (ptr noundef [[PTR:%.*]]) #[[ATTR1:[0-9]+]] {
1281 // CK3-32-NEXT: entry:
1282 // CK3-32-NEXT: [[PTR_ADDR:%.*]] = alloca ptr, align 4
1283 // CK3-32-NEXT: store ptr [[PTR]], ptr [[PTR_ADDR]], align 4
1284 // CK3-32-NEXT: [[TMP0:%.*]] = load ptr, ptr [[PTR_ADDR]], align 4
1285 // CK3-32-NEXT: store double 0.000000e+00, ptr [[TMP0]], align 4
1286 // CK3-32-NEXT: ret void
1287 // CK3-32-LABEL: define {{[^@]+}}@.omp_offloading.requires_reg
1288 // CK3-32-SAME: () #[[ATTR3:[0-9]+]] {
1289 // CK3-32-NEXT: entry:
1290 // CK3-32-NEXT: call void @__tgt_register_requires(i64 1)
1291 // CK3-32-NEXT: ret void
1292 // CK1-LABEL: define {{[^@]+}}@.omp_offloading.requires_reg
1293 // CK1-SAME: () #[[ATTR3:[0-9]+]] {
1294 // CK1-NEXT: entry:
1295 // CK1-NEXT: call void @__tgt_register_requires(i64 1)
1296 // CK1-NEXT: ret void
1297 // CK1-32-LABEL: define {{[^@]+}}@_Z3barRPfRPi
1298 // CK1-32-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[A:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[B:%.*]]) #[[ATTR0:[0-9]+]] {
1299 // CK1-32-NEXT: entry:
1300 // CK1-32-NEXT: [[A_ADDR:%.*]] = alloca ptr, align 4
1301 // CK1-32-NEXT: [[B_ADDR:%.*]] = alloca ptr, align 4
1302 // CK1-32-NEXT: store ptr [[A]], ptr [[A_ADDR]], align 4
1303 // CK1-32-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 4
1304 // CK1-32-NEXT: [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 4
1305 // CK1-32-NEXT: [[TMP1:%.*]] = load ptr, ptr [[B_ADDR]], align 4
1306 // CK1-32-NEXT: call void @_Z3fooIiEvRPfRPT_(ptr noundef nonnull align 4 dereferenceable(4) [[TMP0]], ptr noundef nonnull align 4 dereferenceable(4) [[TMP1]])
1307 // CK1-32-NEXT: ret void
1308 // CK1-32-LABEL: define {{[^@]+}}@_Z3fooIiEvRPfRPT_
1309 // CK1-32-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[LR:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[TR:%.*]]) #[[ATTR0]] comdat {
1310 // CK1-32-NEXT: entry:
1311 // CK1-32-NEXT: [[LR_ADDR:%.*]] = alloca ptr, align 4
1312 // CK1-32-NEXT: [[TR_ADDR:%.*]] = alloca ptr, align 4
1313 // CK1-32-NEXT: [[L:%.*]] = alloca ptr, align 4
1314 // CK1-32-NEXT: [[T:%.*]] = alloca ptr, align 4
1315 // CK1-32-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 4
1316 // CK1-32-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 4
1317 // CK1-32-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 4
1318 // CK1-32-NEXT: [[DOTOFFLOAD_BASEPTRS1:%.*]] = alloca [1 x ptr], align 4
1319 // CK1-32-NEXT: [[DOTOFFLOAD_PTRS2:%.*]] = alloca [1 x ptr], align 4
1320 // CK1-32-NEXT: [[DOTOFFLOAD_MAPPERS3:%.*]] = alloca [1 x ptr], align 4
1321 // CK1-32-NEXT: [[DOTOFFLOAD_BASEPTRS7:%.*]] = alloca [1 x ptr], align 4
1322 // CK1-32-NEXT: [[DOTOFFLOAD_PTRS8:%.*]] = alloca [1 x ptr], align 4
1323 // CK1-32-NEXT: [[DOTOFFLOAD_MAPPERS9:%.*]] = alloca [1 x ptr], align 4
1324 // CK1-32-NEXT: [[TMP:%.*]] = alloca ptr, align 4
1325 // CK1-32-NEXT: [[DOTOFFLOAD_BASEPTRS13:%.*]] = alloca [1 x ptr], align 4
1326 // CK1-32-NEXT: [[DOTOFFLOAD_PTRS14:%.*]] = alloca [1 x ptr], align 4
1327 // CK1-32-NEXT: [[DOTOFFLOAD_MAPPERS15:%.*]] = alloca [1 x ptr], align 4
1328 // CK1-32-NEXT: [[_TMP19:%.*]] = alloca ptr, align 4
1329 // CK1-32-NEXT: [[DOTOFFLOAD_BASEPTRS20:%.*]] = alloca [1 x ptr], align 4
1330 // CK1-32-NEXT: [[DOTOFFLOAD_PTRS21:%.*]] = alloca [1 x ptr], align 4
1331 // CK1-32-NEXT: [[DOTOFFLOAD_MAPPERS22:%.*]] = alloca [1 x ptr], align 4
1332 // CK1-32-NEXT: [[_TMP26:%.*]] = alloca ptr, align 4
1333 // CK1-32-NEXT: [[DOTOFFLOAD_BASEPTRS27:%.*]] = alloca [1 x ptr], align 4
1334 // CK1-32-NEXT: [[DOTOFFLOAD_PTRS28:%.*]] = alloca [1 x ptr], align 4
1335 // CK1-32-NEXT: [[DOTOFFLOAD_MAPPERS29:%.*]] = alloca [1 x ptr], align 4
1336 // CK1-32-NEXT: [[_TMP33:%.*]] = alloca ptr, align 4
1337 // CK1-32-NEXT: [[_TMP34:%.*]] = alloca ptr, align 4
1338 // CK1-32-NEXT: [[DOTOFFLOAD_BASEPTRS35:%.*]] = alloca [2 x ptr], align 4
1339 // CK1-32-NEXT: [[DOTOFFLOAD_PTRS36:%.*]] = alloca [2 x ptr], align 4
1340 // CK1-32-NEXT: [[DOTOFFLOAD_MAPPERS37:%.*]] = alloca [2 x ptr], align 4
1341 // CK1-32-NEXT: store ptr [[LR]], ptr [[LR_ADDR]], align 4
1342 // CK1-32-NEXT: store ptr [[TR]], ptr [[TR_ADDR]], align 4
1343 // CK1-32-NEXT: [[TMP0:%.*]] = load ptr, ptr @g, align 4
1344 // CK1-32-NEXT: [[TMP1:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
1345 // CK1-32-NEXT: store ptr [[TMP0]], ptr [[TMP1]], align 4
1346 // CK1-32-NEXT: [[TMP2:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0
1347 // CK1-32-NEXT: store ptr [[TMP0]], ptr [[TMP2]], align 4
1348 // CK1-32-NEXT: [[TMP3:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
1349 // CK1-32-NEXT: store ptr null, ptr [[TMP3]], align 4
1350 // CK1-32-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
1351 // CK1-32-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0
1352 // CK1-32-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8
1353 // CK1-32-NEXT: [[TMP6:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0
1354 // CK1-32-NEXT: store i32 2, ptr [[TMP6]], align 4
1355 // CK1-32-NEXT: [[TMP7:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1
1356 // CK1-32-NEXT: store i32 1, ptr [[TMP7]], align 4
1357 // CK1-32-NEXT: [[TMP8:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2
1358 // CK1-32-NEXT: store ptr [[TMP4]], ptr [[TMP8]], align 4
1359 // CK1-32-NEXT: [[TMP9:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3
1360 // CK1-32-NEXT: store ptr [[TMP5]], ptr [[TMP9]], align 4
1361 // CK1-32-NEXT: [[TMP10:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4
1362 // CK1-32-NEXT: store ptr @.offload_sizes, ptr [[TMP10]], align 4
1363 // CK1-32-NEXT: [[TMP11:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5
1364 // CK1-32-NEXT: store ptr @.offload_maptypes, ptr [[TMP11]], align 4
1365 // CK1-32-NEXT: [[TMP12:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6
1366 // CK1-32-NEXT: store ptr null, ptr [[TMP12]], align 4
1367 // CK1-32-NEXT: [[TMP13:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7
1368 // CK1-32-NEXT: store ptr null, ptr [[TMP13]], align 4
1369 // CK1-32-NEXT: [[TMP14:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8
1370 // CK1-32-NEXT: store i64 0, ptr [[TMP14]], align 8
1371 // CK1-32-NEXT: [[TMP15:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9
1372 // CK1-32-NEXT: store i64 0, ptr [[TMP15]], align 8
1373 // CK1-32-NEXT: [[TMP16:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10
1374 // CK1-32-NEXT: store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP16]], align 4
1375 // CK1-32-NEXT: [[TMP17:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11
1376 // CK1-32-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP17]], align 4
1377 // CK1-32-NEXT: [[TMP18:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12
1378 // CK1-32-NEXT: store i32 0, ptr [[TMP18]], align 4
1379 // CK1-32-NEXT: [[TMP19:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1:[0-9]+]], i64 -1, i32 -1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l37.region_id, ptr [[KERNEL_ARGS]])
1380 // CK1-32-NEXT: [[TMP20:%.*]] = icmp ne i32 [[TMP19]], 0
1381 // CK1-32-NEXT: br i1 [[TMP20]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
1382 // CK1-32: omp_offload.failed:
1383 // CK1-32-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l37(ptr [[TMP0]]) #[[ATTR2:[0-9]+]]
1384 // CK1-32-NEXT: br label [[OMP_OFFLOAD_CONT]]
1385 // CK1-32: omp_offload.cont:
1386 // CK1-32-NEXT: [[TMP21:%.*]] = load ptr, ptr [[L]], align 4
1387 // CK1-32-NEXT: [[TMP22:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS1]], i32 0, i32 0
1388 // CK1-32-NEXT: store ptr [[TMP21]], ptr [[TMP22]], align 4
1389 // CK1-32-NEXT: [[TMP23:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS2]], i32 0, i32 0
1390 // CK1-32-NEXT: store ptr [[TMP21]], ptr [[TMP23]], align 4
1391 // CK1-32-NEXT: [[TMP24:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS3]], i32 0, i32 0
1392 // CK1-32-NEXT: store ptr null, ptr [[TMP24]], align 4
1393 // CK1-32-NEXT: [[TMP25:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS1]], i32 0, i32 0
1394 // CK1-32-NEXT: [[TMP26:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS2]], i32 0, i32 0
1395 // CK1-32-NEXT: [[KERNEL_ARGS4:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
1396 // CK1-32-NEXT: [[TMP27:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 0
1397 // CK1-32-NEXT: store i32 2, ptr [[TMP27]], align 4
1398 // CK1-32-NEXT: [[TMP28:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 1
1399 // CK1-32-NEXT: store i32 1, ptr [[TMP28]], align 4
1400 // CK1-32-NEXT: [[TMP29:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 2
1401 // CK1-32-NEXT: store ptr [[TMP25]], ptr [[TMP29]], align 4
1402 // CK1-32-NEXT: [[TMP30:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 3
1403 // CK1-32-NEXT: store ptr [[TMP26]], ptr [[TMP30]], align 4
1404 // CK1-32-NEXT: [[TMP31:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 4
1405 // CK1-32-NEXT: store ptr @.offload_sizes.1, ptr [[TMP31]], align 4
1406 // CK1-32-NEXT: [[TMP32:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 5
1407 // CK1-32-NEXT: store ptr @.offload_maptypes.2, ptr [[TMP32]], align 4
1408 // CK1-32-NEXT: [[TMP33:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 6
1409 // CK1-32-NEXT: store ptr null, ptr [[TMP33]], align 4
1410 // CK1-32-NEXT: [[TMP34:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 7
1411 // CK1-32-NEXT: store ptr null, ptr [[TMP34]], align 4
1412 // CK1-32-NEXT: [[TMP35:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 8
1413 // CK1-32-NEXT: store i64 0, ptr [[TMP35]], align 8
1414 // CK1-32-NEXT: [[TMP36:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 9
1415 // CK1-32-NEXT: store i64 0, ptr [[TMP36]], align 8
1416 // CK1-32-NEXT: [[TMP37:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 10
1417 // CK1-32-NEXT: store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP37]], align 4
1418 // CK1-32-NEXT: [[TMP38:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 11
1419 // CK1-32-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP38]], align 4
1420 // CK1-32-NEXT: [[TMP39:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 12
1421 // CK1-32-NEXT: store i32 0, ptr [[TMP39]], align 4
1422 // CK1-32-NEXT: [[TMP40:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1]], i64 -1, i32 -1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l43.region_id, ptr [[KERNEL_ARGS4]])
1423 // CK1-32-NEXT: [[TMP41:%.*]] = icmp ne i32 [[TMP40]], 0
1424 // CK1-32-NEXT: br i1 [[TMP41]], label [[OMP_OFFLOAD_FAILED5:%.*]], label [[OMP_OFFLOAD_CONT6:%.*]]
1425 // CK1-32: omp_offload.failed5:
1426 // CK1-32-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l43(ptr [[TMP21]]) #[[ATTR2]]
1427 // CK1-32-NEXT: br label [[OMP_OFFLOAD_CONT6]]
1428 // CK1-32: omp_offload.cont6:
1429 // CK1-32-NEXT: [[TMP42:%.*]] = load ptr, ptr [[T]], align 4
1430 // CK1-32-NEXT: [[TMP43:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS7]], i32 0, i32 0
1431 // CK1-32-NEXT: store ptr [[TMP42]], ptr [[TMP43]], align 4
1432 // CK1-32-NEXT: [[TMP44:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS8]], i32 0, i32 0
1433 // CK1-32-NEXT: store ptr [[TMP42]], ptr [[TMP44]], align 4
1434 // CK1-32-NEXT: [[TMP45:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS9]], i32 0, i32 0
1435 // CK1-32-NEXT: store ptr null, ptr [[TMP45]], align 4
1436 // CK1-32-NEXT: [[TMP46:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS7]], i32 0, i32 0
1437 // CK1-32-NEXT: [[TMP47:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS8]], i32 0, i32 0
1438 // CK1-32-NEXT: [[KERNEL_ARGS10:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
1439 // CK1-32-NEXT: [[TMP48:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 0
1440 // CK1-32-NEXT: store i32 2, ptr [[TMP48]], align 4
1441 // CK1-32-NEXT: [[TMP49:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 1
1442 // CK1-32-NEXT: store i32 1, ptr [[TMP49]], align 4
1443 // CK1-32-NEXT: [[TMP50:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 2
1444 // CK1-32-NEXT: store ptr [[TMP46]], ptr [[TMP50]], align 4
1445 // CK1-32-NEXT: [[TMP51:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 3
1446 // CK1-32-NEXT: store ptr [[TMP47]], ptr [[TMP51]], align 4
1447 // CK1-32-NEXT: [[TMP52:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 4
1448 // CK1-32-NEXT: store ptr @.offload_sizes.3, ptr [[TMP52]], align 4
1449 // CK1-32-NEXT: [[TMP53:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 5
1450 // CK1-32-NEXT: store ptr @.offload_maptypes.4, ptr [[TMP53]], align 4
1451 // CK1-32-NEXT: [[TMP54:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 6
1452 // CK1-32-NEXT: store ptr null, ptr [[TMP54]], align 4
1453 // CK1-32-NEXT: [[TMP55:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 7
1454 // CK1-32-NEXT: store ptr null, ptr [[TMP55]], align 4
1455 // CK1-32-NEXT: [[TMP56:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 8
1456 // CK1-32-NEXT: store i64 0, ptr [[TMP56]], align 8
1457 // CK1-32-NEXT: [[TMP57:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 9
1458 // CK1-32-NEXT: store i64 0, ptr [[TMP57]], align 8
1459 // CK1-32-NEXT: [[TMP58:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 10
1460 // CK1-32-NEXT: store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP58]], align 4
1461 // CK1-32-NEXT: [[TMP59:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 11
1462 // CK1-32-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP59]], align 4
1463 // CK1-32-NEXT: [[TMP60:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 12
1464 // CK1-32-NEXT: store i32 0, ptr [[TMP60]], align 4
1465 // CK1-32-NEXT: [[TMP61:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1]], i64 -1, i32 -1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l49.region_id, ptr [[KERNEL_ARGS10]])
1466 // CK1-32-NEXT: [[TMP62:%.*]] = icmp ne i32 [[TMP61]], 0
1467 // CK1-32-NEXT: br i1 [[TMP62]], label [[OMP_OFFLOAD_FAILED11:%.*]], label [[OMP_OFFLOAD_CONT12:%.*]]
1468 // CK1-32: omp_offload.failed11:
1469 // CK1-32-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l49(ptr [[TMP42]]) #[[ATTR2]]
1470 // CK1-32-NEXT: br label [[OMP_OFFLOAD_CONT12]]
1471 // CK1-32: omp_offload.cont12:
1472 // CK1-32-NEXT: [[TMP63:%.*]] = load ptr, ptr [[LR_ADDR]], align 4
1473 // CK1-32-NEXT: store ptr [[TMP63]], ptr [[TMP]], align 4
1474 // CK1-32-NEXT: [[TMP64:%.*]] = load ptr, ptr [[TMP]], align 4
1475 // CK1-32-NEXT: [[TMP65:%.*]] = load ptr, ptr [[TMP64]], align 4
1476 // CK1-32-NEXT: [[TMP66:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS13]], i32 0, i32 0
1477 // CK1-32-NEXT: store ptr [[TMP65]], ptr [[TMP66]], align 4
1478 // CK1-32-NEXT: [[TMP67:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS14]], i32 0, i32 0
1479 // CK1-32-NEXT: store ptr [[TMP65]], ptr [[TMP67]], align 4
1480 // CK1-32-NEXT: [[TMP68:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS15]], i32 0, i32 0
1481 // CK1-32-NEXT: store ptr null, ptr [[TMP68]], align 4
1482 // CK1-32-NEXT: [[TMP69:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS13]], i32 0, i32 0
1483 // CK1-32-NEXT: [[TMP70:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS14]], i32 0, i32 0
1484 // CK1-32-NEXT: [[KERNEL_ARGS16:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
1485 // CK1-32-NEXT: [[TMP71:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 0
1486 // CK1-32-NEXT: store i32 2, ptr [[TMP71]], align 4
1487 // CK1-32-NEXT: [[TMP72:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 1
1488 // CK1-32-NEXT: store i32 1, ptr [[TMP72]], align 4
1489 // CK1-32-NEXT: [[TMP73:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 2
1490 // CK1-32-NEXT: store ptr [[TMP69]], ptr [[TMP73]], align 4
1491 // CK1-32-NEXT: [[TMP74:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 3
1492 // CK1-32-NEXT: store ptr [[TMP70]], ptr [[TMP74]], align 4
1493 // CK1-32-NEXT: [[TMP75:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 4
1494 // CK1-32-NEXT: store ptr @.offload_sizes.5, ptr [[TMP75]], align 4
1495 // CK1-32-NEXT: [[TMP76:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 5
1496 // CK1-32-NEXT: store ptr @.offload_maptypes.6, ptr [[TMP76]], align 4
1497 // CK1-32-NEXT: [[TMP77:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 6
1498 // CK1-32-NEXT: store ptr null, ptr [[TMP77]], align 4
1499 // CK1-32-NEXT: [[TMP78:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 7
1500 // CK1-32-NEXT: store ptr null, ptr [[TMP78]], align 4
1501 // CK1-32-NEXT: [[TMP79:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 8
1502 // CK1-32-NEXT: store i64 0, ptr [[TMP79]], align 8
1503 // CK1-32-NEXT: [[TMP80:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 9
1504 // CK1-32-NEXT: store i64 0, ptr [[TMP80]], align 8
1505 // CK1-32-NEXT: [[TMP81:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 10
1506 // CK1-32-NEXT: store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP81]], align 4
1507 // CK1-32-NEXT: [[TMP82:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 11
1508 // CK1-32-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP82]], align 4
1509 // CK1-32-NEXT: [[TMP83:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 12
1510 // CK1-32-NEXT: store i32 0, ptr [[TMP83]], align 4
1511 // CK1-32-NEXT: [[TMP84:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1]], i64 -1, i32 -1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l55.region_id, ptr [[KERNEL_ARGS16]])
1512 // CK1-32-NEXT: [[TMP85:%.*]] = icmp ne i32 [[TMP84]], 0
1513 // CK1-32-NEXT: br i1 [[TMP85]], label [[OMP_OFFLOAD_FAILED17:%.*]], label [[OMP_OFFLOAD_CONT18:%.*]]
1514 // CK1-32: omp_offload.failed17:
1515 // CK1-32-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l55(ptr [[TMP65]]) #[[ATTR2]]
1516 // CK1-32-NEXT: br label [[OMP_OFFLOAD_CONT18]]
1517 // CK1-32: omp_offload.cont18:
1518 // CK1-32-NEXT: [[TMP86:%.*]] = load ptr, ptr [[TR_ADDR]], align 4
1519 // CK1-32-NEXT: store ptr [[TMP86]], ptr [[_TMP19]], align 4
1520 // CK1-32-NEXT: [[TMP87:%.*]] = load ptr, ptr [[_TMP19]], align 4
1521 // CK1-32-NEXT: [[TMP88:%.*]] = load ptr, ptr [[TMP87]], align 4
1522 // CK1-32-NEXT: [[TMP89:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS20]], i32 0, i32 0
1523 // CK1-32-NEXT: store ptr [[TMP88]], ptr [[TMP89]], align 4
1524 // CK1-32-NEXT: [[TMP90:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS21]], i32 0, i32 0
1525 // CK1-32-NEXT: store ptr [[TMP88]], ptr [[TMP90]], align 4
1526 // CK1-32-NEXT: [[TMP91:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS22]], i32 0, i32 0
1527 // CK1-32-NEXT: store ptr null, ptr [[TMP91]], align 4
1528 // CK1-32-NEXT: [[TMP92:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS20]], i32 0, i32 0
1529 // CK1-32-NEXT: [[TMP93:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS21]], i32 0, i32 0
1530 // CK1-32-NEXT: [[KERNEL_ARGS23:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
1531 // CK1-32-NEXT: [[TMP94:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 0
1532 // CK1-32-NEXT: store i32 2, ptr [[TMP94]], align 4
1533 // CK1-32-NEXT: [[TMP95:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 1
1534 // CK1-32-NEXT: store i32 1, ptr [[TMP95]], align 4
1535 // CK1-32-NEXT: [[TMP96:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 2
1536 // CK1-32-NEXT: store ptr [[TMP92]], ptr [[TMP96]], align 4
1537 // CK1-32-NEXT: [[TMP97:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 3
1538 // CK1-32-NEXT: store ptr [[TMP93]], ptr [[TMP97]], align 4
1539 // CK1-32-NEXT: [[TMP98:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 4
1540 // CK1-32-NEXT: store ptr @.offload_sizes.7, ptr [[TMP98]], align 4
1541 // CK1-32-NEXT: [[TMP99:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 5
1542 // CK1-32-NEXT: store ptr @.offload_maptypes.8, ptr [[TMP99]], align 4
1543 // CK1-32-NEXT: [[TMP100:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 6
1544 // CK1-32-NEXT: store ptr null, ptr [[TMP100]], align 4
1545 // CK1-32-NEXT: [[TMP101:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 7
1546 // CK1-32-NEXT: store ptr null, ptr [[TMP101]], align 4
1547 // CK1-32-NEXT: [[TMP102:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 8
1548 // CK1-32-NEXT: store i64 0, ptr [[TMP102]], align 8
1549 // CK1-32-NEXT: [[TMP103:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 9
1550 // CK1-32-NEXT: store i64 0, ptr [[TMP103]], align 8
1551 // CK1-32-NEXT: [[TMP104:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 10
1552 // CK1-32-NEXT: store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP104]], align 4
1553 // CK1-32-NEXT: [[TMP105:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 11
1554 // CK1-32-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP105]], align 4
1555 // CK1-32-NEXT: [[TMP106:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 12
1556 // CK1-32-NEXT: store i32 0, ptr [[TMP106]], align 4
1557 // CK1-32-NEXT: [[TMP107:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1]], i64 -1, i32 -1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l61.region_id, ptr [[KERNEL_ARGS23]])
1558 // CK1-32-NEXT: [[TMP108:%.*]] = icmp ne i32 [[TMP107]], 0
1559 // CK1-32-NEXT: br i1 [[TMP108]], label [[OMP_OFFLOAD_FAILED24:%.*]], label [[OMP_OFFLOAD_CONT25:%.*]]
1560 // CK1-32: omp_offload.failed24:
1561 // CK1-32-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l61(ptr [[TMP88]]) #[[ATTR2]]
1562 // CK1-32-NEXT: br label [[OMP_OFFLOAD_CONT25]]
1563 // CK1-32: omp_offload.cont25:
1564 // CK1-32-NEXT: [[TMP109:%.*]] = load ptr, ptr [[TR_ADDR]], align 4
1565 // CK1-32-NEXT: store ptr [[TMP109]], ptr [[_TMP26]], align 4
1566 // CK1-32-NEXT: [[TMP110:%.*]] = load ptr, ptr [[_TMP26]], align 4
1567 // CK1-32-NEXT: [[TMP111:%.*]] = load ptr, ptr [[TMP110]], align 4
1568 // CK1-32-NEXT: [[TMP112:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS27]], i32 0, i32 0
1569 // CK1-32-NEXT: store ptr [[TMP111]], ptr [[TMP112]], align 4
1570 // CK1-32-NEXT: [[TMP113:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS28]], i32 0, i32 0
1571 // CK1-32-NEXT: store ptr [[TMP111]], ptr [[TMP113]], align 4
1572 // CK1-32-NEXT: [[TMP114:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS29]], i32 0, i32 0
1573 // CK1-32-NEXT: store ptr null, ptr [[TMP114]], align 4
1574 // CK1-32-NEXT: [[TMP115:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS27]], i32 0, i32 0
1575 // CK1-32-NEXT: [[TMP116:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS28]], i32 0, i32 0
1576 // CK1-32-NEXT: [[KERNEL_ARGS30:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
1577 // CK1-32-NEXT: [[TMP117:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 0
1578 // CK1-32-NEXT: store i32 2, ptr [[TMP117]], align 4
1579 // CK1-32-NEXT: [[TMP118:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 1
1580 // CK1-32-NEXT: store i32 1, ptr [[TMP118]], align 4
1581 // CK1-32-NEXT: [[TMP119:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 2
1582 // CK1-32-NEXT: store ptr [[TMP115]], ptr [[TMP119]], align 4
1583 // CK1-32-NEXT: [[TMP120:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 3
1584 // CK1-32-NEXT: store ptr [[TMP116]], ptr [[TMP120]], align 4
1585 // CK1-32-NEXT: [[TMP121:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 4
1586 // CK1-32-NEXT: store ptr @.offload_sizes.9, ptr [[TMP121]], align 4
1587 // CK1-32-NEXT: [[TMP122:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 5
1588 // CK1-32-NEXT: store ptr @.offload_maptypes.10, ptr [[TMP122]], align 4
1589 // CK1-32-NEXT: [[TMP123:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 6
1590 // CK1-32-NEXT: store ptr null, ptr [[TMP123]], align 4
1591 // CK1-32-NEXT: [[TMP124:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 7
1592 // CK1-32-NEXT: store ptr null, ptr [[TMP124]], align 4
1593 // CK1-32-NEXT: [[TMP125:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 8
1594 // CK1-32-NEXT: store i64 0, ptr [[TMP125]], align 8
1595 // CK1-32-NEXT: [[TMP126:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 9
1596 // CK1-32-NEXT: store i64 0, ptr [[TMP126]], align 8
1597 // CK1-32-NEXT: [[TMP127:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 10
1598 // CK1-32-NEXT: store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP127]], align 4
1599 // CK1-32-NEXT: [[TMP128:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 11
1600 // CK1-32-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP128]], align 4
1601 // CK1-32-NEXT: [[TMP129:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 12
1602 // CK1-32-NEXT: store i32 0, ptr [[TMP129]], align 4
1603 // CK1-32-NEXT: [[TMP130:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1]], i64 -1, i32 -1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l67.region_id, ptr [[KERNEL_ARGS30]])
1604 // CK1-32-NEXT: [[TMP131:%.*]] = icmp ne i32 [[TMP130]], 0
1605 // CK1-32-NEXT: br i1 [[TMP131]], label [[OMP_OFFLOAD_FAILED31:%.*]], label [[OMP_OFFLOAD_CONT32:%.*]]
1606 // CK1-32: omp_offload.failed31:
1607 // CK1-32-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l67(ptr [[TMP111]]) #[[ATTR2]]
1608 // CK1-32-NEXT: br label [[OMP_OFFLOAD_CONT32]]
1609 // CK1-32: omp_offload.cont32:
1610 // CK1-32-NEXT: [[TMP132:%.*]] = load ptr, ptr [[TR_ADDR]], align 4
1611 // CK1-32-NEXT: store ptr [[TMP132]], ptr [[_TMP33]], align 4
1612 // CK1-32-NEXT: [[TMP133:%.*]] = load ptr, ptr [[LR_ADDR]], align 4
1613 // CK1-32-NEXT: store ptr [[TMP133]], ptr [[_TMP34]], align 4
1614 // CK1-32-NEXT: [[TMP134:%.*]] = load ptr, ptr [[_TMP33]], align 4
1615 // CK1-32-NEXT: [[TMP135:%.*]] = load ptr, ptr [[TMP134]], align 4
1616 // CK1-32-NEXT: [[TMP136:%.*]] = load ptr, ptr [[_TMP34]], align 4
1617 // CK1-32-NEXT: [[TMP137:%.*]] = load ptr, ptr [[TMP136]], align 4
1618 // CK1-32-NEXT: [[TMP138:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS35]], i32 0, i32 0
1619 // CK1-32-NEXT: store ptr [[TMP135]], ptr [[TMP138]], align 4
1620 // CK1-32-NEXT: [[TMP139:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS36]], i32 0, i32 0
1621 // CK1-32-NEXT: store ptr [[TMP135]], ptr [[TMP139]], align 4
1622 // CK1-32-NEXT: [[TMP140:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_MAPPERS37]], i32 0, i32 0
1623 // CK1-32-NEXT: store ptr null, ptr [[TMP140]], align 4
1624 // CK1-32-NEXT: [[TMP141:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS35]], i32 0, i32 1
1625 // CK1-32-NEXT: store ptr [[TMP137]], ptr [[TMP141]], align 4
1626 // CK1-32-NEXT: [[TMP142:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS36]], i32 0, i32 1
1627 // CK1-32-NEXT: store ptr [[TMP137]], ptr [[TMP142]], align 4
1628 // CK1-32-NEXT: [[TMP143:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_MAPPERS37]], i32 0, i32 1
1629 // CK1-32-NEXT: store ptr null, ptr [[TMP143]], align 4
1630 // CK1-32-NEXT: [[TMP144:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS35]], i32 0, i32 0
1631 // CK1-32-NEXT: [[TMP145:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS36]], i32 0, i32 0
1632 // CK1-32-NEXT: [[KERNEL_ARGS38:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
1633 // CK1-32-NEXT: [[TMP146:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 0
1634 // CK1-32-NEXT: store i32 2, ptr [[TMP146]], align 4
1635 // CK1-32-NEXT: [[TMP147:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 1
1636 // CK1-32-NEXT: store i32 2, ptr [[TMP147]], align 4
1637 // CK1-32-NEXT: [[TMP148:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 2
1638 // CK1-32-NEXT: store ptr [[TMP144]], ptr [[TMP148]], align 4
1639 // CK1-32-NEXT: [[TMP149:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 3
1640 // CK1-32-NEXT: store ptr [[TMP145]], ptr [[TMP149]], align 4
1641 // CK1-32-NEXT: [[TMP150:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 4
1642 // CK1-32-NEXT: store ptr @.offload_sizes.11, ptr [[TMP150]], align 4
1643 // CK1-32-NEXT: [[TMP151:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 5
1644 // CK1-32-NEXT: store ptr @.offload_maptypes.12, ptr [[TMP151]], align 4
1645 // CK1-32-NEXT: [[TMP152:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 6
1646 // CK1-32-NEXT: store ptr null, ptr [[TMP152]], align 4
1647 // CK1-32-NEXT: [[TMP153:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 7
1648 // CK1-32-NEXT: store ptr null, ptr [[TMP153]], align 4
1649 // CK1-32-NEXT: [[TMP154:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 8
1650 // CK1-32-NEXT: store i64 0, ptr [[TMP154]], align 8
1651 // CK1-32-NEXT: [[TMP155:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 9
1652 // CK1-32-NEXT: store i64 0, ptr [[TMP155]], align 8
1653 // CK1-32-NEXT: [[TMP156:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 10
1654 // CK1-32-NEXT: store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP156]], align 4
1655 // CK1-32-NEXT: [[TMP157:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 11
1656 // CK1-32-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP157]], align 4
1657 // CK1-32-NEXT: [[TMP158:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 12
1658 // CK1-32-NEXT: store i32 0, ptr [[TMP158]], align 4
1659 // CK1-32-NEXT: [[TMP159:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1]], i64 -1, i32 -1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l74.region_id, ptr [[KERNEL_ARGS38]])
1660 // CK1-32-NEXT: [[TMP160:%.*]] = icmp ne i32 [[TMP159]], 0
1661 // CK1-32-NEXT: br i1 [[TMP160]], label [[OMP_OFFLOAD_FAILED39:%.*]], label [[OMP_OFFLOAD_CONT40:%.*]]
1662 // CK1-32: omp_offload.failed39:
1663 // CK1-32-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l74(ptr [[TMP135]], ptr [[TMP137]]) #[[ATTR2]]
1664 // CK1-32-NEXT: br label [[OMP_OFFLOAD_CONT40]]
1665 // CK1-32: omp_offload.cont40:
1666 // CK1-32-NEXT: ret void
1667 // CK1-32-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l37
1668 // CK1-32-SAME: (ptr noundef [[G:%.*]]) #[[ATTR1:[0-9]+]] {
1669 // CK1-32-NEXT: entry:
1670 // CK1-32-NEXT: [[G_ADDR:%.*]] = alloca ptr, align 4
1671 // CK1-32-NEXT: store ptr [[G]], ptr [[G_ADDR]], align 4
1672 // CK1-32-NEXT: [[TMP0:%.*]] = load ptr, ptr [[G_ADDR]], align 4
1673 // CK1-32-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds double, ptr [[TMP0]], i32 1
1674 // CK1-32-NEXT: store ptr [[INCDEC_PTR]], ptr [[G_ADDR]], align 4
1675 // CK1-32-NEXT: ret void
1676 // CK1-32-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l43
1677 // CK1-32-SAME: (ptr noundef [[L:%.*]]) #[[ATTR1]] {
1678 // CK1-32-NEXT: entry:
1679 // CK1-32-NEXT: [[L_ADDR:%.*]] = alloca ptr, align 4
1680 // CK1-32-NEXT: store ptr [[L]], ptr [[L_ADDR]], align 4
1681 // CK1-32-NEXT: [[TMP0:%.*]] = load ptr, ptr [[L_ADDR]], align 4
1682 // CK1-32-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds float, ptr [[TMP0]], i32 1
1683 // CK1-32-NEXT: store ptr [[INCDEC_PTR]], ptr [[L_ADDR]], align 4
1684 // CK1-32-NEXT: ret void
1685 // CK1-32-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l49
1686 // CK1-32-SAME: (ptr noundef [[T:%.*]]) #[[ATTR1]] {
1687 // CK1-32-NEXT: entry:
1688 // CK1-32-NEXT: [[T_ADDR:%.*]] = alloca ptr, align 4
1689 // CK1-32-NEXT: store ptr [[T]], ptr [[T_ADDR]], align 4
1690 // CK1-32-NEXT: [[TMP0:%.*]] = load ptr, ptr [[T_ADDR]], align 4
1691 // CK1-32-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds i32, ptr [[TMP0]], i32 1
1692 // CK1-32-NEXT: store ptr [[INCDEC_PTR]], ptr [[T_ADDR]], align 4
1693 // CK1-32-NEXT: ret void
1694 // CK1-32-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l55
1695 // CK1-32-SAME: (ptr noundef [[LR:%.*]]) #[[ATTR1]] {
1696 // CK1-32-NEXT: entry:
1697 // CK1-32-NEXT: [[LR_ADDR:%.*]] = alloca ptr, align 4
1698 // CK1-32-NEXT: [[TMP:%.*]] = alloca ptr, align 4
1699 // CK1-32-NEXT: store ptr [[LR]], ptr [[LR_ADDR]], align 4
1700 // CK1-32-NEXT: store ptr [[LR_ADDR]], ptr [[TMP]], align 4
1701 // CK1-32-NEXT: [[TMP0:%.*]] = load ptr, ptr [[TMP]], align 4
1702 // CK1-32-NEXT: [[TMP1:%.*]] = load ptr, ptr [[TMP0]], align 4
1703 // CK1-32-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds float, ptr [[TMP1]], i32 1
1704 // CK1-32-NEXT: store ptr [[INCDEC_PTR]], ptr [[TMP0]], align 4
1705 // CK1-32-NEXT: ret void
1706 // CK1-32-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l61
1707 // CK1-32-SAME: (ptr noundef [[TR:%.*]]) #[[ATTR1]] {
1708 // CK1-32-NEXT: entry:
1709 // CK1-32-NEXT: [[TR_ADDR:%.*]] = alloca ptr, align 4
1710 // CK1-32-NEXT: [[TMP:%.*]] = alloca ptr, align 4
1711 // CK1-32-NEXT: store ptr [[TR]], ptr [[TR_ADDR]], align 4
1712 // CK1-32-NEXT: store ptr [[TR_ADDR]], ptr [[TMP]], align 4
1713 // CK1-32-NEXT: [[TMP0:%.*]] = load ptr, ptr [[TMP]], align 4
1714 // CK1-32-NEXT: [[TMP1:%.*]] = load ptr, ptr [[TMP0]], align 4
1715 // CK1-32-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds i32, ptr [[TMP1]], i32 1
1716 // CK1-32-NEXT: store ptr [[INCDEC_PTR]], ptr [[TMP0]], align 4
1717 // CK1-32-NEXT: ret void
1718 // CK1-32-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l67
1719 // CK1-32-SAME: (ptr noundef [[TR:%.*]]) #[[ATTR1]] {
1720 // CK1-32-NEXT: entry:
1721 // CK1-32-NEXT: [[TR_ADDR:%.*]] = alloca ptr, align 4
1722 // CK1-32-NEXT: [[TMP:%.*]] = alloca ptr, align 4
1723 // CK1-32-NEXT: store ptr [[TR]], ptr [[TR_ADDR]], align 4
1724 // CK1-32-NEXT: store ptr [[TR_ADDR]], ptr [[TMP]], align 4
1725 // CK1-32-NEXT: [[TMP0:%.*]] = load ptr, ptr [[TMP]], align 4
1726 // CK1-32-NEXT: [[TMP1:%.*]] = load ptr, ptr [[TMP0]], align 4
1727 // CK1-32-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds i32, ptr [[TMP1]], i32 1
1728 // CK1-32-NEXT: store ptr [[INCDEC_PTR]], ptr [[TMP0]], align 4
1729 // CK1-32-NEXT: ret void
1730 // CK1-32-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l74
1731 // CK1-32-SAME: (ptr noundef [[TR:%.*]], ptr noundef [[LR:%.*]]) #[[ATTR1]] {
1732 // CK1-32-NEXT: entry:
1733 // CK1-32-NEXT: [[TR_ADDR:%.*]] = alloca ptr, align 4
1734 // CK1-32-NEXT: [[LR_ADDR:%.*]] = alloca ptr, align 4
1735 // CK1-32-NEXT: [[TMP:%.*]] = alloca ptr, align 4
1736 // CK1-32-NEXT: [[_TMP1:%.*]] = alloca ptr, align 4
1737 // CK1-32-NEXT: store ptr [[TR]], ptr [[TR_ADDR]], align 4
1738 // CK1-32-NEXT: store ptr [[LR]], ptr [[LR_ADDR]], align 4
1739 // CK1-32-NEXT: store ptr [[TR_ADDR]], ptr [[TMP]], align 4
1740 // CK1-32-NEXT: store ptr [[LR_ADDR]], ptr [[_TMP1]], align 4
1741 // CK1-32-NEXT: [[TMP0:%.*]] = load ptr, ptr [[TMP]], align 4
1742 // CK1-32-NEXT: [[TMP1:%.*]] = load ptr, ptr [[TMP0]], align 4
1743 // CK1-32-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds i32, ptr [[TMP1]], i32 1
1744 // CK1-32-NEXT: store ptr [[INCDEC_PTR]], ptr [[TMP0]], align 4
1745 // CK1-32-NEXT: [[TMP2:%.*]] = load ptr, ptr [[_TMP1]], align 4
1746 // CK1-32-NEXT: [[TMP3:%.*]] = load ptr, ptr [[TMP2]], align 4
1747 // CK1-32-NEXT: [[INCDEC_PTR2:%.*]] = getelementptr inbounds float, ptr [[TMP3]], i32 1
1748 // CK1-32-NEXT: store ptr [[INCDEC_PTR2]], ptr [[TMP2]], align 4
1749 // CK1-32-NEXT: ret void
1750 // CK1-32-LABEL: define {{[^@]+}}@.omp_offloading.requires_reg
1751 // CK1-32-SAME: () #[[ATTR3:[0-9]+]] {
1752 // CK1-32-NEXT: entry:
1753 // CK1-32-NEXT: call void @__tgt_register_requires(i64 1)
1754 // CK1-32-NEXT: ret void
1755 // CK2-LABEL: define {{[^@]+}}@.omp_offloading.requires_reg
1756 // CK2-SAME: () #[[ATTR5:[0-9]+]] {
1757 // CK2-NEXT: entry:
1758 // CK2-NEXT: call void @__tgt_register_requires(i64 1)
1759 // CK2-NEXT: ret void
1760 // CK3-LABEL: define {{[^@]+}}@.omp_offloading.requires_reg
1761 // CK3-SAME: () #[[ATTR3:[0-9]+]] {
1762 // CK3-NEXT: entry:
1763 // CK3-NEXT: call void @__tgt_register_requires(i64 1)
1764 // CK3-NEXT: ret void
1765 // CK10-LABEL: define {{[^@]+}}@_Z3barRPfRPi
1766 // CK10-SAME: (ptr noundef nonnull align 8 dereferenceable(8) [[A:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[B:%.*]]) #[[ATTR0:[0-9]+]] {
1767 // CK10-NEXT: entry:
1768 // CK10-NEXT: [[A_ADDR:%.*]] = alloca ptr, align 8
1769 // CK10-NEXT: [[B_ADDR:%.*]] = alloca ptr, align 8
1770 // CK10-NEXT: store ptr [[A]], ptr [[A_ADDR]], align 8
1771 // CK10-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 8
1772 // CK10-NEXT: [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 8
1773 // CK10-NEXT: [[TMP1:%.*]] = load ptr, ptr [[B_ADDR]], align 8
1774 // CK10-NEXT: call void @_Z3fooIiEvRPfRPT_(ptr noundef nonnull align 8 dereferenceable(8) [[TMP0]], ptr noundef nonnull align 8 dereferenceable(8) [[TMP1]])
1775 // CK10-NEXT: ret void
1778 // CK10-LABEL: define {{[^@]+}}@_Z3fooIiEvRPfRPT_
1779 // CK10-SAME: (ptr noundef nonnull align 8 dereferenceable(8) [[LR:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[TR:%.*]]) #[[ATTR0]] comdat {
1780 // CK10-NEXT: entry:
1781 // CK10-NEXT: [[LR_ADDR:%.*]] = alloca ptr, align 8
1782 // CK10-NEXT: [[TR_ADDR:%.*]] = alloca ptr, align 8
1783 // CK10-NEXT: [[L:%.*]] = alloca ptr, align 8
1784 // CK10-NEXT: [[T:%.*]] = alloca ptr, align 8
1785 // CK10-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 8
1786 // CK10-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 8
1787 // CK10-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 8
1788 // CK10-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8
1789 // CK10-NEXT: [[DOTOFFLOAD_BASEPTRS1:%.*]] = alloca [1 x ptr], align 8
1790 // CK10-NEXT: [[DOTOFFLOAD_PTRS2:%.*]] = alloca [1 x ptr], align 8
1791 // CK10-NEXT: [[DOTOFFLOAD_MAPPERS3:%.*]] = alloca [1 x ptr], align 8
1792 // CK10-NEXT: [[KERNEL_ARGS4:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
1793 // CK10-NEXT: [[DOTOFFLOAD_BASEPTRS7:%.*]] = alloca [1 x ptr], align 8
1794 // CK10-NEXT: [[DOTOFFLOAD_PTRS8:%.*]] = alloca [1 x ptr], align 8
1795 // CK10-NEXT: [[DOTOFFLOAD_MAPPERS9:%.*]] = alloca [1 x ptr], align 8
1796 // CK10-NEXT: [[KERNEL_ARGS10:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
1797 // CK10-NEXT: [[TMP:%.*]] = alloca ptr, align 8
1798 // CK10-NEXT: [[DOTOFFLOAD_BASEPTRS13:%.*]] = alloca [1 x ptr], align 8
1799 // CK10-NEXT: [[DOTOFFLOAD_PTRS14:%.*]] = alloca [1 x ptr], align 8
1800 // CK10-NEXT: [[DOTOFFLOAD_MAPPERS15:%.*]] = alloca [1 x ptr], align 8
1801 // CK10-NEXT: [[KERNEL_ARGS16:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
1802 // CK10-NEXT: [[_TMP19:%.*]] = alloca ptr, align 8
1803 // CK10-NEXT: [[DOTOFFLOAD_BASEPTRS20:%.*]] = alloca [1 x ptr], align 8
1804 // CK10-NEXT: [[DOTOFFLOAD_PTRS21:%.*]] = alloca [1 x ptr], align 8
1805 // CK10-NEXT: [[DOTOFFLOAD_MAPPERS22:%.*]] = alloca [1 x ptr], align 8
1806 // CK10-NEXT: [[KERNEL_ARGS23:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
1807 // CK10-NEXT: [[_TMP26:%.*]] = alloca ptr, align 8
1808 // CK10-NEXT: [[DOTOFFLOAD_BASEPTRS27:%.*]] = alloca [1 x ptr], align 8
1809 // CK10-NEXT: [[DOTOFFLOAD_PTRS28:%.*]] = alloca [1 x ptr], align 8
1810 // CK10-NEXT: [[DOTOFFLOAD_MAPPERS29:%.*]] = alloca [1 x ptr], align 8
1811 // CK10-NEXT: [[KERNEL_ARGS30:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
1812 // CK10-NEXT: [[_TMP33:%.*]] = alloca ptr, align 8
1813 // CK10-NEXT: [[_TMP34:%.*]] = alloca ptr, align 8
1814 // CK10-NEXT: [[DOTOFFLOAD_BASEPTRS35:%.*]] = alloca [2 x ptr], align 8
1815 // CK10-NEXT: [[DOTOFFLOAD_PTRS36:%.*]] = alloca [2 x ptr], align 8
1816 // CK10-NEXT: [[DOTOFFLOAD_MAPPERS37:%.*]] = alloca [2 x ptr], align 8
1817 // CK10-NEXT: [[KERNEL_ARGS38:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
1818 // CK10-NEXT: store ptr [[LR]], ptr [[LR_ADDR]], align 8
1819 // CK10-NEXT: store ptr [[TR]], ptr [[TR_ADDR]], align 8
1820 // CK10-NEXT: [[TMP0:%.*]] = load ptr, ptr @g, align 8
1821 // CK10-NEXT: [[TMP1:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
1822 // CK10-NEXT: store ptr [[TMP0]], ptr [[TMP1]], align 8
1823 // CK10-NEXT: [[TMP2:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0
1824 // CK10-NEXT: store ptr [[TMP0]], ptr [[TMP2]], align 8
1825 // CK10-NEXT: [[TMP3:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
1826 // CK10-NEXT: store ptr null, ptr [[TMP3]], align 8
1827 // CK10-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
1828 // CK10-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0
1829 // CK10-NEXT: [[TMP6:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0
1830 // CK10-NEXT: store i32 2, ptr [[TMP6]], align 4
1831 // CK10-NEXT: [[TMP7:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1
1832 // CK10-NEXT: store i32 1, ptr [[TMP7]], align 4
1833 // CK10-NEXT: [[TMP8:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2
1834 // CK10-NEXT: store ptr [[TMP4]], ptr [[TMP8]], align 8
1835 // CK10-NEXT: [[TMP9:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3
1836 // CK10-NEXT: store ptr [[TMP5]], ptr [[TMP9]], align 8
1837 // CK10-NEXT: [[TMP10:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4
1838 // CK10-NEXT: store ptr @.offload_sizes, ptr [[TMP10]], align 8
1839 // CK10-NEXT: [[TMP11:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5
1840 // CK10-NEXT: store ptr @.offload_maptypes, ptr [[TMP11]], align 8
1841 // CK10-NEXT: [[TMP12:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6
1842 // CK10-NEXT: store ptr null, ptr [[TMP12]], align 8
1843 // CK10-NEXT: [[TMP13:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7
1844 // CK10-NEXT: store ptr null, ptr [[TMP13]], align 8
1845 // CK10-NEXT: [[TMP14:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8
1846 // CK10-NEXT: store i64 0, ptr [[TMP14]], align 8
1847 // CK10-NEXT: [[TMP15:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9
1848 // CK10-NEXT: store i64 0, ptr [[TMP15]], align 8
1849 // CK10-NEXT: [[TMP16:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10
1850 // CK10-NEXT: store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP16]], align 4
1851 // CK10-NEXT: [[TMP17:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11
1852 // CK10-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP17]], align 4
1853 // CK10-NEXT: [[TMP18:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12
1854 // CK10-NEXT: store i32 0, ptr [[TMP18]], align 4
1855 // CK10-NEXT: [[TMP19:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1:[0-9]+]], i64 -1, i32 -1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l37.region_id, ptr [[KERNEL_ARGS]])
1856 // CK10-NEXT: [[TMP20:%.*]] = icmp ne i32 [[TMP19]], 0
1857 // CK10-NEXT: br i1 [[TMP20]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
1858 // CK10: omp_offload.failed:
1859 // CK10-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l37(ptr [[TMP0]]) #[[ATTR2:[0-9]+]]
1860 // CK10-NEXT: br label [[OMP_OFFLOAD_CONT]]
1861 // CK10: omp_offload.cont:
1862 // CK10-NEXT: [[TMP21:%.*]] = load ptr, ptr [[L]], align 8
1863 // CK10-NEXT: [[TMP22:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS1]], i32 0, i32 0
1864 // CK10-NEXT: store ptr [[TMP21]], ptr [[TMP22]], align 8
1865 // CK10-NEXT: [[TMP23:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS2]], i32 0, i32 0
1866 // CK10-NEXT: store ptr [[TMP21]], ptr [[TMP23]], align 8
1867 // CK10-NEXT: [[TMP24:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS3]], i64 0, i64 0
1868 // CK10-NEXT: store ptr null, ptr [[TMP24]], align 8
1869 // CK10-NEXT: [[TMP25:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS1]], i32 0, i32 0
1870 // CK10-NEXT: [[TMP26:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS2]], i32 0, i32 0
1871 // CK10-NEXT: [[TMP27:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 0
1872 // CK10-NEXT: store i32 2, ptr [[TMP27]], align 4
1873 // CK10-NEXT: [[TMP28:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 1
1874 // CK10-NEXT: store i32 1, ptr [[TMP28]], align 4
1875 // CK10-NEXT: [[TMP29:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 2
1876 // CK10-NEXT: store ptr [[TMP25]], ptr [[TMP29]], align 8
1877 // CK10-NEXT: [[TMP30:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 3
1878 // CK10-NEXT: store ptr [[TMP26]], ptr [[TMP30]], align 8
1879 // CK10-NEXT: [[TMP31:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 4
1880 // CK10-NEXT: store ptr @.offload_sizes.1, ptr [[TMP31]], align 8
1881 // CK10-NEXT: [[TMP32:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 5
1882 // CK10-NEXT: store ptr @.offload_maptypes.2, ptr [[TMP32]], align 8
1883 // CK10-NEXT: [[TMP33:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 6
1884 // CK10-NEXT: store ptr null, ptr [[TMP33]], align 8
1885 // CK10-NEXT: [[TMP34:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 7
1886 // CK10-NEXT: store ptr null, ptr [[TMP34]], align 8
1887 // CK10-NEXT: [[TMP35:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 8
1888 // CK10-NEXT: store i64 0, ptr [[TMP35]], align 8
1889 // CK10-NEXT: [[TMP36:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 9
1890 // CK10-NEXT: store i64 0, ptr [[TMP36]], align 8
1891 // CK10-NEXT: [[TMP37:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 10
1892 // CK10-NEXT: store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP37]], align 4
1893 // CK10-NEXT: [[TMP38:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 11
1894 // CK10-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP38]], align 4
1895 // CK10-NEXT: [[TMP39:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 12
1896 // CK10-NEXT: store i32 0, ptr [[TMP39]], align 4
1897 // CK10-NEXT: [[TMP40:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1]], i64 -1, i32 -1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l43.region_id, ptr [[KERNEL_ARGS4]])
1898 // CK10-NEXT: [[TMP41:%.*]] = icmp ne i32 [[TMP40]], 0
1899 // CK10-NEXT: br i1 [[TMP41]], label [[OMP_OFFLOAD_FAILED5:%.*]], label [[OMP_OFFLOAD_CONT6:%.*]]
1900 // CK10: omp_offload.failed5:
1901 // CK10-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l43(ptr [[TMP21]]) #[[ATTR2]]
1902 // CK10-NEXT: br label [[OMP_OFFLOAD_CONT6]]
1903 // CK10: omp_offload.cont6:
1904 // CK10-NEXT: [[TMP42:%.*]] = load ptr, ptr [[T]], align 8
1905 // CK10-NEXT: [[TMP43:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS7]], i32 0, i32 0
1906 // CK10-NEXT: store ptr [[TMP42]], ptr [[TMP43]], align 8
1907 // CK10-NEXT: [[TMP44:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS8]], i32 0, i32 0
1908 // CK10-NEXT: store ptr [[TMP42]], ptr [[TMP44]], align 8
1909 // CK10-NEXT: [[TMP45:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS9]], i64 0, i64 0
1910 // CK10-NEXT: store ptr null, ptr [[TMP45]], align 8
1911 // CK10-NEXT: [[TMP46:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS7]], i32 0, i32 0
1912 // CK10-NEXT: [[TMP47:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS8]], i32 0, i32 0
1913 // CK10-NEXT: [[TMP48:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 0
1914 // CK10-NEXT: store i32 2, ptr [[TMP48]], align 4
1915 // CK10-NEXT: [[TMP49:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 1
1916 // CK10-NEXT: store i32 1, ptr [[TMP49]], align 4
1917 // CK10-NEXT: [[TMP50:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 2
1918 // CK10-NEXT: store ptr [[TMP46]], ptr [[TMP50]], align 8
1919 // CK10-NEXT: [[TMP51:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 3
1920 // CK10-NEXT: store ptr [[TMP47]], ptr [[TMP51]], align 8
1921 // CK10-NEXT: [[TMP52:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 4
1922 // CK10-NEXT: store ptr @.offload_sizes.3, ptr [[TMP52]], align 8
1923 // CK10-NEXT: [[TMP53:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 5
1924 // CK10-NEXT: store ptr @.offload_maptypes.4, ptr [[TMP53]], align 8
1925 // CK10-NEXT: [[TMP54:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 6
1926 // CK10-NEXT: store ptr null, ptr [[TMP54]], align 8
1927 // CK10-NEXT: [[TMP55:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 7
1928 // CK10-NEXT: store ptr null, ptr [[TMP55]], align 8
1929 // CK10-NEXT: [[TMP56:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 8
1930 // CK10-NEXT: store i64 0, ptr [[TMP56]], align 8
1931 // CK10-NEXT: [[TMP57:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 9
1932 // CK10-NEXT: store i64 0, ptr [[TMP57]], align 8
1933 // CK10-NEXT: [[TMP58:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 10
1934 // CK10-NEXT: store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP58]], align 4
1935 // CK10-NEXT: [[TMP59:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 11
1936 // CK10-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP59]], align 4
1937 // CK10-NEXT: [[TMP60:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 12
1938 // CK10-NEXT: store i32 0, ptr [[TMP60]], align 4
1939 // CK10-NEXT: [[TMP61:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1]], i64 -1, i32 -1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l49.region_id, ptr [[KERNEL_ARGS10]])
1940 // CK10-NEXT: [[TMP62:%.*]] = icmp ne i32 [[TMP61]], 0
1941 // CK10-NEXT: br i1 [[TMP62]], label [[OMP_OFFLOAD_FAILED11:%.*]], label [[OMP_OFFLOAD_CONT12:%.*]]
1942 // CK10: omp_offload.failed11:
1943 // CK10-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l49(ptr [[TMP42]]) #[[ATTR2]]
1944 // CK10-NEXT: br label [[OMP_OFFLOAD_CONT12]]
1945 // CK10: omp_offload.cont12:
1946 // CK10-NEXT: [[TMP63:%.*]] = load ptr, ptr [[LR_ADDR]], align 8
1947 // CK10-NEXT: store ptr [[TMP63]], ptr [[TMP]], align 8
1948 // CK10-NEXT: [[TMP64:%.*]] = load ptr, ptr [[TMP]], align 8
1949 // CK10-NEXT: [[TMP65:%.*]] = load ptr, ptr [[TMP64]], align 8
1950 // CK10-NEXT: [[TMP66:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS13]], i32 0, i32 0
1951 // CK10-NEXT: store ptr [[TMP65]], ptr [[TMP66]], align 8
1952 // CK10-NEXT: [[TMP67:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS14]], i32 0, i32 0
1953 // CK10-NEXT: store ptr [[TMP65]], ptr [[TMP67]], align 8
1954 // CK10-NEXT: [[TMP68:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS15]], i64 0, i64 0
1955 // CK10-NEXT: store ptr null, ptr [[TMP68]], align 8
1956 // CK10-NEXT: [[TMP69:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS13]], i32 0, i32 0
1957 // CK10-NEXT: [[TMP70:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS14]], i32 0, i32 0
1958 // CK10-NEXT: [[TMP71:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 0
1959 // CK10-NEXT: store i32 2, ptr [[TMP71]], align 4
1960 // CK10-NEXT: [[TMP72:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 1
1961 // CK10-NEXT: store i32 1, ptr [[TMP72]], align 4
1962 // CK10-NEXT: [[TMP73:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 2
1963 // CK10-NEXT: store ptr [[TMP69]], ptr [[TMP73]], align 8
1964 // CK10-NEXT: [[TMP74:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 3
1965 // CK10-NEXT: store ptr [[TMP70]], ptr [[TMP74]], align 8
1966 // CK10-NEXT: [[TMP75:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 4
1967 // CK10-NEXT: store ptr @.offload_sizes.5, ptr [[TMP75]], align 8
1968 // CK10-NEXT: [[TMP76:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 5
1969 // CK10-NEXT: store ptr @.offload_maptypes.6, ptr [[TMP76]], align 8
1970 // CK10-NEXT: [[TMP77:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 6
1971 // CK10-NEXT: store ptr null, ptr [[TMP77]], align 8
1972 // CK10-NEXT: [[TMP78:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 7
1973 // CK10-NEXT: store ptr null, ptr [[TMP78]], align 8
1974 // CK10-NEXT: [[TMP79:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 8
1975 // CK10-NEXT: store i64 0, ptr [[TMP79]], align 8
1976 // CK10-NEXT: [[TMP80:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 9
1977 // CK10-NEXT: store i64 0, ptr [[TMP80]], align 8
1978 // CK10-NEXT: [[TMP81:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 10
1979 // CK10-NEXT: store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP81]], align 4
1980 // CK10-NEXT: [[TMP82:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 11
1981 // CK10-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP82]], align 4
1982 // CK10-NEXT: [[TMP83:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 12
1983 // CK10-NEXT: store i32 0, ptr [[TMP83]], align 4
1984 // CK10-NEXT: [[TMP84:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1]], i64 -1, i32 -1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l55.region_id, ptr [[KERNEL_ARGS16]])
1985 // CK10-NEXT: [[TMP85:%.*]] = icmp ne i32 [[TMP84]], 0
1986 // CK10-NEXT: br i1 [[TMP85]], label [[OMP_OFFLOAD_FAILED17:%.*]], label [[OMP_OFFLOAD_CONT18:%.*]]
1987 // CK10: omp_offload.failed17:
1988 // CK10-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l55(ptr [[TMP65]]) #[[ATTR2]]
1989 // CK10-NEXT: br label [[OMP_OFFLOAD_CONT18]]
1990 // CK10: omp_offload.cont18:
1991 // CK10-NEXT: [[TMP86:%.*]] = load ptr, ptr [[TR_ADDR]], align 8
1992 // CK10-NEXT: store ptr [[TMP86]], ptr [[_TMP19]], align 8
1993 // CK10-NEXT: [[TMP87:%.*]] = load ptr, ptr [[_TMP19]], align 8
1994 // CK10-NEXT: [[TMP88:%.*]] = load ptr, ptr [[TMP87]], align 8
1995 // CK10-NEXT: [[TMP89:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS20]], i32 0, i32 0
1996 // CK10-NEXT: store ptr [[TMP88]], ptr [[TMP89]], align 8
1997 // CK10-NEXT: [[TMP90:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS21]], i32 0, i32 0
1998 // CK10-NEXT: store ptr [[TMP88]], ptr [[TMP90]], align 8
1999 // CK10-NEXT: [[TMP91:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS22]], i64 0, i64 0
2000 // CK10-NEXT: store ptr null, ptr [[TMP91]], align 8
2001 // CK10-NEXT: [[TMP92:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS20]], i32 0, i32 0
2002 // CK10-NEXT: [[TMP93:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS21]], i32 0, i32 0
2003 // CK10-NEXT: [[TMP94:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 0
2004 // CK10-NEXT: store i32 2, ptr [[TMP94]], align 4
2005 // CK10-NEXT: [[TMP95:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 1
2006 // CK10-NEXT: store i32 1, ptr [[TMP95]], align 4
2007 // CK10-NEXT: [[TMP96:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 2
2008 // CK10-NEXT: store ptr [[TMP92]], ptr [[TMP96]], align 8
2009 // CK10-NEXT: [[TMP97:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 3
2010 // CK10-NEXT: store ptr [[TMP93]], ptr [[TMP97]], align 8
2011 // CK10-NEXT: [[TMP98:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 4
2012 // CK10-NEXT: store ptr @.offload_sizes.7, ptr [[TMP98]], align 8
2013 // CK10-NEXT: [[TMP99:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 5
2014 // CK10-NEXT: store ptr @.offload_maptypes.8, ptr [[TMP99]], align 8
2015 // CK10-NEXT: [[TMP100:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 6
2016 // CK10-NEXT: store ptr null, ptr [[TMP100]], align 8
2017 // CK10-NEXT: [[TMP101:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 7
2018 // CK10-NEXT: store ptr null, ptr [[TMP101]], align 8
2019 // CK10-NEXT: [[TMP102:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 8
2020 // CK10-NEXT: store i64 0, ptr [[TMP102]], align 8
2021 // CK10-NEXT: [[TMP103:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 9
2022 // CK10-NEXT: store i64 0, ptr [[TMP103]], align 8
2023 // CK10-NEXT: [[TMP104:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 10
2024 // CK10-NEXT: store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP104]], align 4
2025 // CK10-NEXT: [[TMP105:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 11
2026 // CK10-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP105]], align 4
2027 // CK10-NEXT: [[TMP106:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 12
2028 // CK10-NEXT: store i32 0, ptr [[TMP106]], align 4
2029 // CK10-NEXT: [[TMP107:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1]], i64 -1, i32 -1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l61.region_id, ptr [[KERNEL_ARGS23]])
2030 // CK10-NEXT: [[TMP108:%.*]] = icmp ne i32 [[TMP107]], 0
2031 // CK10-NEXT: br i1 [[TMP108]], label [[OMP_OFFLOAD_FAILED24:%.*]], label [[OMP_OFFLOAD_CONT25:%.*]]
2032 // CK10: omp_offload.failed24:
2033 // CK10-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l61(ptr [[TMP88]]) #[[ATTR2]]
2034 // CK10-NEXT: br label [[OMP_OFFLOAD_CONT25]]
2035 // CK10: omp_offload.cont25:
2036 // CK10-NEXT: [[TMP109:%.*]] = load ptr, ptr [[TR_ADDR]], align 8
2037 // CK10-NEXT: store ptr [[TMP109]], ptr [[_TMP26]], align 8
2038 // CK10-NEXT: [[TMP110:%.*]] = load ptr, ptr [[_TMP26]], align 8
2039 // CK10-NEXT: [[TMP111:%.*]] = load ptr, ptr [[TMP110]], align 8
2040 // CK10-NEXT: [[TMP112:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS27]], i32 0, i32 0
2041 // CK10-NEXT: store ptr [[TMP111]], ptr [[TMP112]], align 8
2042 // CK10-NEXT: [[TMP113:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS28]], i32 0, i32 0
2043 // CK10-NEXT: store ptr [[TMP111]], ptr [[TMP113]], align 8
2044 // CK10-NEXT: [[TMP114:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS29]], i64 0, i64 0
2045 // CK10-NEXT: store ptr null, ptr [[TMP114]], align 8
2046 // CK10-NEXT: [[TMP115:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS27]], i32 0, i32 0
2047 // CK10-NEXT: [[TMP116:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS28]], i32 0, i32 0
2048 // CK10-NEXT: [[TMP117:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 0
2049 // CK10-NEXT: store i32 2, ptr [[TMP117]], align 4
2050 // CK10-NEXT: [[TMP118:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 1
2051 // CK10-NEXT: store i32 1, ptr [[TMP118]], align 4
2052 // CK10-NEXT: [[TMP119:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 2
2053 // CK10-NEXT: store ptr [[TMP115]], ptr [[TMP119]], align 8
2054 // CK10-NEXT: [[TMP120:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 3
2055 // CK10-NEXT: store ptr [[TMP116]], ptr [[TMP120]], align 8
2056 // CK10-NEXT: [[TMP121:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 4
2057 // CK10-NEXT: store ptr @.offload_sizes.9, ptr [[TMP121]], align 8
2058 // CK10-NEXT: [[TMP122:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 5
2059 // CK10-NEXT: store ptr @.offload_maptypes.10, ptr [[TMP122]], align 8
2060 // CK10-NEXT: [[TMP123:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 6
2061 // CK10-NEXT: store ptr null, ptr [[TMP123]], align 8
2062 // CK10-NEXT: [[TMP124:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 7
2063 // CK10-NEXT: store ptr null, ptr [[TMP124]], align 8
2064 // CK10-NEXT: [[TMP125:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 8
2065 // CK10-NEXT: store i64 0, ptr [[TMP125]], align 8
2066 // CK10-NEXT: [[TMP126:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 9
2067 // CK10-NEXT: store i64 0, ptr [[TMP126]], align 8
2068 // CK10-NEXT: [[TMP127:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 10
2069 // CK10-NEXT: store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP127]], align 4
2070 // CK10-NEXT: [[TMP128:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 11
2071 // CK10-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP128]], align 4
2072 // CK10-NEXT: [[TMP129:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 12
2073 // CK10-NEXT: store i32 0, ptr [[TMP129]], align 4
2074 // CK10-NEXT: [[TMP130:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1]], i64 -1, i32 -1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l67.region_id, ptr [[KERNEL_ARGS30]])
2075 // CK10-NEXT: [[TMP131:%.*]] = icmp ne i32 [[TMP130]], 0
2076 // CK10-NEXT: br i1 [[TMP131]], label [[OMP_OFFLOAD_FAILED31:%.*]], label [[OMP_OFFLOAD_CONT32:%.*]]
2077 // CK10: omp_offload.failed31:
2078 // CK10-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l67(ptr [[TMP111]]) #[[ATTR2]]
2079 // CK10-NEXT: br label [[OMP_OFFLOAD_CONT32]]
2080 // CK10: omp_offload.cont32:
2081 // CK10-NEXT: [[TMP132:%.*]] = load ptr, ptr [[TR_ADDR]], align 8
2082 // CK10-NEXT: store ptr [[TMP132]], ptr [[_TMP33]], align 8
2083 // CK10-NEXT: [[TMP133:%.*]] = load ptr, ptr [[LR_ADDR]], align 8
2084 // CK10-NEXT: store ptr [[TMP133]], ptr [[_TMP34]], align 8
2085 // CK10-NEXT: [[TMP134:%.*]] = load ptr, ptr [[_TMP33]], align 8
2086 // CK10-NEXT: [[TMP135:%.*]] = load ptr, ptr [[TMP134]], align 8
2087 // CK10-NEXT: [[TMP136:%.*]] = load ptr, ptr [[_TMP34]], align 8
2088 // CK10-NEXT: [[TMP137:%.*]] = load ptr, ptr [[TMP136]], align 8
2089 // CK10-NEXT: [[TMP138:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS35]], i32 0, i32 0
2090 // CK10-NEXT: store ptr [[TMP135]], ptr [[TMP138]], align 8
2091 // CK10-NEXT: [[TMP139:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS36]], i32 0, i32 0
2092 // CK10-NEXT: store ptr [[TMP135]], ptr [[TMP139]], align 8
2093 // CK10-NEXT: [[TMP140:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_MAPPERS37]], i64 0, i64 0
2094 // CK10-NEXT: store ptr null, ptr [[TMP140]], align 8
2095 // CK10-NEXT: [[TMP141:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS35]], i32 0, i32 1
2096 // CK10-NEXT: store ptr [[TMP137]], ptr [[TMP141]], align 8
2097 // CK10-NEXT: [[TMP142:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS36]], i32 0, i32 1
2098 // CK10-NEXT: store ptr [[TMP137]], ptr [[TMP142]], align 8
2099 // CK10-NEXT: [[TMP143:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_MAPPERS37]], i64 0, i64 1
2100 // CK10-NEXT: store ptr null, ptr [[TMP143]], align 8
2101 // CK10-NEXT: [[TMP144:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS35]], i32 0, i32 0
2102 // CK10-NEXT: [[TMP145:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS36]], i32 0, i32 0
2103 // CK10-NEXT: [[TMP146:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 0
2104 // CK10-NEXT: store i32 2, ptr [[TMP146]], align 4
2105 // CK10-NEXT: [[TMP147:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 1
2106 // CK10-NEXT: store i32 2, ptr [[TMP147]], align 4
2107 // CK10-NEXT: [[TMP148:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 2
2108 // CK10-NEXT: store ptr [[TMP144]], ptr [[TMP148]], align 8
2109 // CK10-NEXT: [[TMP149:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 3
2110 // CK10-NEXT: store ptr [[TMP145]], ptr [[TMP149]], align 8
2111 // CK10-NEXT: [[TMP150:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 4
2112 // CK10-NEXT: store ptr @.offload_sizes.11, ptr [[TMP150]], align 8
2113 // CK10-NEXT: [[TMP151:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 5
2114 // CK10-NEXT: store ptr @.offload_maptypes.12, ptr [[TMP151]], align 8
2115 // CK10-NEXT: [[TMP152:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 6
2116 // CK10-NEXT: store ptr null, ptr [[TMP152]], align 8
2117 // CK10-NEXT: [[TMP153:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 7
2118 // CK10-NEXT: store ptr null, ptr [[TMP153]], align 8
2119 // CK10-NEXT: [[TMP154:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 8
2120 // CK10-NEXT: store i64 0, ptr [[TMP154]], align 8
2121 // CK10-NEXT: [[TMP155:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 9
2122 // CK10-NEXT: store i64 0, ptr [[TMP155]], align 8
2123 // CK10-NEXT: [[TMP156:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 10
2124 // CK10-NEXT: store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP156]], align 4
2125 // CK10-NEXT: [[TMP157:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 11
2126 // CK10-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP157]], align 4
2127 // CK10-NEXT: [[TMP158:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 12
2128 // CK10-NEXT: store i32 0, ptr [[TMP158]], align 4
2129 // CK10-NEXT: [[TMP159:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1]], i64 -1, i32 -1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l74.region_id, ptr [[KERNEL_ARGS38]])
2130 // CK10-NEXT: [[TMP160:%.*]] = icmp ne i32 [[TMP159]], 0
2131 // CK10-NEXT: br i1 [[TMP160]], label [[OMP_OFFLOAD_FAILED39:%.*]], label [[OMP_OFFLOAD_CONT40:%.*]]
2132 // CK10: omp_offload.failed39:
2133 // CK10-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l74(ptr [[TMP135]], ptr [[TMP137]]) #[[ATTR2]]
2134 // CK10-NEXT: br label [[OMP_OFFLOAD_CONT40]]
2135 // CK10: omp_offload.cont40:
2136 // CK10-NEXT: ret void
2139 // CK10-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l37
2140 // CK10-SAME: (ptr noundef [[G:%.*]]) #[[ATTR1:[0-9]+]] {
2141 // CK10-NEXT: entry:
2142 // CK10-NEXT: [[G_ADDR:%.*]] = alloca ptr, align 8
2143 // CK10-NEXT: store ptr [[G]], ptr [[G_ADDR]], align 8
2144 // CK10-NEXT: [[TMP0:%.*]] = load ptr, ptr [[G_ADDR]], align 8
2145 // CK10-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds double, ptr [[TMP0]], i32 1
2146 // CK10-NEXT: store ptr [[INCDEC_PTR]], ptr [[G_ADDR]], align 8
2147 // CK10-NEXT: ret void
2150 // CK10-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l43
2151 // CK10-SAME: (ptr noundef [[L:%.*]]) #[[ATTR1]] {
2152 // CK10-NEXT: entry:
2153 // CK10-NEXT: [[L_ADDR:%.*]] = alloca ptr, align 8
2154 // CK10-NEXT: store ptr [[L]], ptr [[L_ADDR]], align 8
2155 // CK10-NEXT: [[TMP0:%.*]] = load ptr, ptr [[L_ADDR]], align 8
2156 // CK10-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds float, ptr [[TMP0]], i32 1
2157 // CK10-NEXT: store ptr [[INCDEC_PTR]], ptr [[L_ADDR]], align 8
2158 // CK10-NEXT: ret void
2161 // CK10-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l49
2162 // CK10-SAME: (ptr noundef [[T:%.*]]) #[[ATTR1]] {
2163 // CK10-NEXT: entry:
2164 // CK10-NEXT: [[T_ADDR:%.*]] = alloca ptr, align 8
2165 // CK10-NEXT: store ptr [[T]], ptr [[T_ADDR]], align 8
2166 // CK10-NEXT: [[TMP0:%.*]] = load ptr, ptr [[T_ADDR]], align 8
2167 // CK10-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds i32, ptr [[TMP0]], i32 1
2168 // CK10-NEXT: store ptr [[INCDEC_PTR]], ptr [[T_ADDR]], align 8
2169 // CK10-NEXT: ret void
2172 // CK10-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l55
2173 // CK10-SAME: (ptr noundef [[LR:%.*]]) #[[ATTR1]] {
2174 // CK10-NEXT: entry:
2175 // CK10-NEXT: [[LR_ADDR:%.*]] = alloca ptr, align 8
2176 // CK10-NEXT: [[TMP:%.*]] = alloca ptr, align 8
2177 // CK10-NEXT: store ptr [[LR]], ptr [[LR_ADDR]], align 8
2178 // CK10-NEXT: store ptr [[LR_ADDR]], ptr [[TMP]], align 8
2179 // CK10-NEXT: [[TMP0:%.*]] = load ptr, ptr [[TMP]], align 8
2180 // CK10-NEXT: [[TMP1:%.*]] = load ptr, ptr [[TMP0]], align 8
2181 // CK10-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds float, ptr [[TMP1]], i32 1
2182 // CK10-NEXT: store ptr [[INCDEC_PTR]], ptr [[TMP0]], align 8
2183 // CK10-NEXT: ret void
2186 // CK10-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l61
2187 // CK10-SAME: (ptr noundef [[TR:%.*]]) #[[ATTR1]] {
2188 // CK10-NEXT: entry:
2189 // CK10-NEXT: [[TR_ADDR:%.*]] = alloca ptr, align 8
2190 // CK10-NEXT: [[TMP:%.*]] = alloca ptr, align 8
2191 // CK10-NEXT: store ptr [[TR]], ptr [[TR_ADDR]], align 8
2192 // CK10-NEXT: store ptr [[TR_ADDR]], ptr [[TMP]], align 8
2193 // CK10-NEXT: [[TMP0:%.*]] = load ptr, ptr [[TMP]], align 8
2194 // CK10-NEXT: [[TMP1:%.*]] = load ptr, ptr [[TMP0]], align 8
2195 // CK10-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds i32, ptr [[TMP1]], i32 1
2196 // CK10-NEXT: store ptr [[INCDEC_PTR]], ptr [[TMP0]], align 8
2197 // CK10-NEXT: ret void
2200 // CK10-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l67
2201 // CK10-SAME: (ptr noundef [[TR:%.*]]) #[[ATTR1]] {
2202 // CK10-NEXT: entry:
2203 // CK10-NEXT: [[TR_ADDR:%.*]] = alloca ptr, align 8
2204 // CK10-NEXT: [[TMP:%.*]] = alloca ptr, align 8
2205 // CK10-NEXT: store ptr [[TR]], ptr [[TR_ADDR]], align 8
2206 // CK10-NEXT: store ptr [[TR_ADDR]], ptr [[TMP]], align 8
2207 // CK10-NEXT: [[TMP0:%.*]] = load ptr, ptr [[TMP]], align 8
2208 // CK10-NEXT: [[TMP1:%.*]] = load ptr, ptr [[TMP0]], align 8
2209 // CK10-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds i32, ptr [[TMP1]], i32 1
2210 // CK10-NEXT: store ptr [[INCDEC_PTR]], ptr [[TMP0]], align 8
2211 // CK10-NEXT: ret void
2214 // CK10-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l74
2215 // CK10-SAME: (ptr noundef [[TR:%.*]], ptr noundef [[LR:%.*]]) #[[ATTR1]] {
2216 // CK10-NEXT: entry:
2217 // CK10-NEXT: [[TR_ADDR:%.*]] = alloca ptr, align 8
2218 // CK10-NEXT: [[LR_ADDR:%.*]] = alloca ptr, align 8
2219 // CK10-NEXT: [[TMP:%.*]] = alloca ptr, align 8
2220 // CK10-NEXT: [[_TMP1:%.*]] = alloca ptr, align 8
2221 // CK10-NEXT: store ptr [[TR]], ptr [[TR_ADDR]], align 8
2222 // CK10-NEXT: store ptr [[LR]], ptr [[LR_ADDR]], align 8
2223 // CK10-NEXT: store ptr [[TR_ADDR]], ptr [[TMP]], align 8
2224 // CK10-NEXT: store ptr [[LR_ADDR]], ptr [[_TMP1]], align 8
2225 // CK10-NEXT: [[TMP0:%.*]] = load ptr, ptr [[TMP]], align 8
2226 // CK10-NEXT: [[TMP1:%.*]] = load ptr, ptr [[TMP0]], align 8
2227 // CK10-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds i32, ptr [[TMP1]], i32 1
2228 // CK10-NEXT: store ptr [[INCDEC_PTR]], ptr [[TMP0]], align 8
2229 // CK10-NEXT: [[TMP2:%.*]] = load ptr, ptr [[_TMP1]], align 8
2230 // CK10-NEXT: [[TMP3:%.*]] = load ptr, ptr [[TMP2]], align 8
2231 // CK10-NEXT: [[INCDEC_PTR2:%.*]] = getelementptr inbounds float, ptr [[TMP3]], i32 1
2232 // CK10-NEXT: store ptr [[INCDEC_PTR2]], ptr [[TMP2]], align 8
2233 // CK10-NEXT: ret void
2236 // CK10-LABEL: define {{[^@]+}}@.omp_offloading.requires_reg
2237 // CK10-SAME: () #[[ATTR3:[0-9]+]] {
2238 // CK10-NEXT: entry:
2239 // CK10-NEXT: call void @__tgt_register_requires(i64 1)
2240 // CK10-NEXT: ret void
2243 // CK11-LABEL: define {{[^@]+}}@_Z3barRPfRPi
2244 // CK11-SAME: (ptr noundef nonnull align 8 dereferenceable(8) [[A:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[B:%.*]]) #[[ATTR0:[0-9]+]] {
2245 // CK11-NEXT: entry:
2246 // CK11-NEXT: [[A_ADDR:%.*]] = alloca ptr, align 8
2247 // CK11-NEXT: [[B_ADDR:%.*]] = alloca ptr, align 8
2248 // CK11-NEXT: store ptr [[A]], ptr [[A_ADDR]], align 8
2249 // CK11-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 8
2250 // CK11-NEXT: [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 8
2251 // CK11-NEXT: [[TMP1:%.*]] = load ptr, ptr [[B_ADDR]], align 8
2252 // CK11-NEXT: call void @_Z3fooIiEvRPfRPT_(ptr noundef nonnull align 8 dereferenceable(8) [[TMP0]], ptr noundef nonnull align 8 dereferenceable(8) [[TMP1]])
2253 // CK11-NEXT: ret void
2256 // CK11-LABEL: define {{[^@]+}}@_Z3fooIiEvRPfRPT_
2257 // CK11-SAME: (ptr noundef nonnull align 8 dereferenceable(8) [[LR:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[TR:%.*]]) #[[ATTR0]] comdat {
2258 // CK11-NEXT: entry:
2259 // CK11-NEXT: [[LR_ADDR:%.*]] = alloca ptr, align 8
2260 // CK11-NEXT: [[TR_ADDR:%.*]] = alloca ptr, align 8
2261 // CK11-NEXT: [[L:%.*]] = alloca ptr, align 8
2262 // CK11-NEXT: [[T:%.*]] = alloca ptr, align 8
2263 // CK11-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 8
2264 // CK11-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 8
2265 // CK11-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 8
2266 // CK11-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8
2267 // CK11-NEXT: [[DOTOFFLOAD_BASEPTRS1:%.*]] = alloca [1 x ptr], align 8
2268 // CK11-NEXT: [[DOTOFFLOAD_PTRS2:%.*]] = alloca [1 x ptr], align 8
2269 // CK11-NEXT: [[DOTOFFLOAD_MAPPERS3:%.*]] = alloca [1 x ptr], align 8
2270 // CK11-NEXT: [[KERNEL_ARGS4:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
2271 // CK11-NEXT: [[DOTOFFLOAD_BASEPTRS7:%.*]] = alloca [1 x ptr], align 8
2272 // CK11-NEXT: [[DOTOFFLOAD_PTRS8:%.*]] = alloca [1 x ptr], align 8
2273 // CK11-NEXT: [[DOTOFFLOAD_MAPPERS9:%.*]] = alloca [1 x ptr], align 8
2274 // CK11-NEXT: [[KERNEL_ARGS10:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
2275 // CK11-NEXT: [[TMP:%.*]] = alloca ptr, align 8
2276 // CK11-NEXT: [[DOTOFFLOAD_BASEPTRS13:%.*]] = alloca [1 x ptr], align 8
2277 // CK11-NEXT: [[DOTOFFLOAD_PTRS14:%.*]] = alloca [1 x ptr], align 8
2278 // CK11-NEXT: [[DOTOFFLOAD_MAPPERS15:%.*]] = alloca [1 x ptr], align 8
2279 // CK11-NEXT: [[KERNEL_ARGS16:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
2280 // CK11-NEXT: [[_TMP19:%.*]] = alloca ptr, align 8
2281 // CK11-NEXT: [[DOTOFFLOAD_BASEPTRS20:%.*]] = alloca [1 x ptr], align 8
2282 // CK11-NEXT: [[DOTOFFLOAD_PTRS21:%.*]] = alloca [1 x ptr], align 8
2283 // CK11-NEXT: [[DOTOFFLOAD_MAPPERS22:%.*]] = alloca [1 x ptr], align 8
2284 // CK11-NEXT: [[KERNEL_ARGS23:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
2285 // CK11-NEXT: [[_TMP26:%.*]] = alloca ptr, align 8
2286 // CK11-NEXT: [[DOTOFFLOAD_BASEPTRS27:%.*]] = alloca [1 x ptr], align 8
2287 // CK11-NEXT: [[DOTOFFLOAD_PTRS28:%.*]] = alloca [1 x ptr], align 8
2288 // CK11-NEXT: [[DOTOFFLOAD_MAPPERS29:%.*]] = alloca [1 x ptr], align 8
2289 // CK11-NEXT: [[KERNEL_ARGS30:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
2290 // CK11-NEXT: [[_TMP33:%.*]] = alloca ptr, align 8
2291 // CK11-NEXT: [[_TMP34:%.*]] = alloca ptr, align 8
2292 // CK11-NEXT: [[DOTOFFLOAD_BASEPTRS35:%.*]] = alloca [2 x ptr], align 8
2293 // CK11-NEXT: [[DOTOFFLOAD_PTRS36:%.*]] = alloca [2 x ptr], align 8
2294 // CK11-NEXT: [[DOTOFFLOAD_MAPPERS37:%.*]] = alloca [2 x ptr], align 8
2295 // CK11-NEXT: [[KERNEL_ARGS38:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
2296 // CK11-NEXT: store ptr [[LR]], ptr [[LR_ADDR]], align 8
2297 // CK11-NEXT: store ptr [[TR]], ptr [[TR_ADDR]], align 8
2298 // CK11-NEXT: [[TMP0:%.*]] = load ptr, ptr @g, align 8
2299 // CK11-NEXT: [[TMP1:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
2300 // CK11-NEXT: store ptr [[TMP0]], ptr [[TMP1]], align 8
2301 // CK11-NEXT: [[TMP2:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0
2302 // CK11-NEXT: store ptr [[TMP0]], ptr [[TMP2]], align 8
2303 // CK11-NEXT: [[TMP3:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
2304 // CK11-NEXT: store ptr null, ptr [[TMP3]], align 8
2305 // CK11-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
2306 // CK11-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0
2307 // CK11-NEXT: [[TMP6:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0
2308 // CK11-NEXT: store i32 2, ptr [[TMP6]], align 4
2309 // CK11-NEXT: [[TMP7:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1
2310 // CK11-NEXT: store i32 1, ptr [[TMP7]], align 4
2311 // CK11-NEXT: [[TMP8:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2
2312 // CK11-NEXT: store ptr [[TMP4]], ptr [[TMP8]], align 8
2313 // CK11-NEXT: [[TMP9:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3
2314 // CK11-NEXT: store ptr [[TMP5]], ptr [[TMP9]], align 8
2315 // CK11-NEXT: [[TMP10:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4
2316 // CK11-NEXT: store ptr @.offload_sizes, ptr [[TMP10]], align 8
2317 // CK11-NEXT: [[TMP11:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5
2318 // CK11-NEXT: store ptr @.offload_maptypes, ptr [[TMP11]], align 8
2319 // CK11-NEXT: [[TMP12:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6
2320 // CK11-NEXT: store ptr null, ptr [[TMP12]], align 8
2321 // CK11-NEXT: [[TMP13:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7
2322 // CK11-NEXT: store ptr null, ptr [[TMP13]], align 8
2323 // CK11-NEXT: [[TMP14:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8
2324 // CK11-NEXT: store i64 0, ptr [[TMP14]], align 8
2325 // CK11-NEXT: [[TMP15:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9
2326 // CK11-NEXT: store i64 0, ptr [[TMP15]], align 8
2327 // CK11-NEXT: [[TMP16:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10
2328 // CK11-NEXT: store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP16]], align 4
2329 // CK11-NEXT: [[TMP17:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11
2330 // CK11-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP17]], align 4
2331 // CK11-NEXT: [[TMP18:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12
2332 // CK11-NEXT: store i32 0, ptr [[TMP18]], align 4
2333 // CK11-NEXT: [[TMP19:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1:[0-9]+]], i64 -1, i32 -1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l37.region_id, ptr [[KERNEL_ARGS]])
2334 // CK11-NEXT: [[TMP20:%.*]] = icmp ne i32 [[TMP19]], 0
2335 // CK11-NEXT: br i1 [[TMP20]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
2336 // CK11: omp_offload.failed:
2337 // CK11-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l37(ptr [[TMP0]]) #[[ATTR2:[0-9]+]]
2338 // CK11-NEXT: br label [[OMP_OFFLOAD_CONT]]
2339 // CK11: omp_offload.cont:
2340 // CK11-NEXT: [[TMP21:%.*]] = load ptr, ptr [[L]], align 8
2341 // CK11-NEXT: [[TMP22:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS1]], i32 0, i32 0
2342 // CK11-NEXT: store ptr [[TMP21]], ptr [[TMP22]], align 8
2343 // CK11-NEXT: [[TMP23:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS2]], i32 0, i32 0
2344 // CK11-NEXT: store ptr [[TMP21]], ptr [[TMP23]], align 8
2345 // CK11-NEXT: [[TMP24:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS3]], i64 0, i64 0
2346 // CK11-NEXT: store ptr null, ptr [[TMP24]], align 8
2347 // CK11-NEXT: [[TMP25:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS1]], i32 0, i32 0
2348 // CK11-NEXT: [[TMP26:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS2]], i32 0, i32 0
2349 // CK11-NEXT: [[TMP27:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 0
2350 // CK11-NEXT: store i32 2, ptr [[TMP27]], align 4
2351 // CK11-NEXT: [[TMP28:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 1
2352 // CK11-NEXT: store i32 1, ptr [[TMP28]], align 4
2353 // CK11-NEXT: [[TMP29:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 2
2354 // CK11-NEXT: store ptr [[TMP25]], ptr [[TMP29]], align 8
2355 // CK11-NEXT: [[TMP30:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 3
2356 // CK11-NEXT: store ptr [[TMP26]], ptr [[TMP30]], align 8
2357 // CK11-NEXT: [[TMP31:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 4
2358 // CK11-NEXT: store ptr @.offload_sizes.1, ptr [[TMP31]], align 8
2359 // CK11-NEXT: [[TMP32:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 5
2360 // CK11-NEXT: store ptr @.offload_maptypes.2, ptr [[TMP32]], align 8
2361 // CK11-NEXT: [[TMP33:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 6
2362 // CK11-NEXT: store ptr null, ptr [[TMP33]], align 8
2363 // CK11-NEXT: [[TMP34:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 7
2364 // CK11-NEXT: store ptr null, ptr [[TMP34]], align 8
2365 // CK11-NEXT: [[TMP35:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 8
2366 // CK11-NEXT: store i64 0, ptr [[TMP35]], align 8
2367 // CK11-NEXT: [[TMP36:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 9
2368 // CK11-NEXT: store i64 0, ptr [[TMP36]], align 8
2369 // CK11-NEXT: [[TMP37:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 10
2370 // CK11-NEXT: store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP37]], align 4
2371 // CK11-NEXT: [[TMP38:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 11
2372 // CK11-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP38]], align 4
2373 // CK11-NEXT: [[TMP39:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 12
2374 // CK11-NEXT: store i32 0, ptr [[TMP39]], align 4
2375 // CK11-NEXT: [[TMP40:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1]], i64 -1, i32 -1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l43.region_id, ptr [[KERNEL_ARGS4]])
2376 // CK11-NEXT: [[TMP41:%.*]] = icmp ne i32 [[TMP40]], 0
2377 // CK11-NEXT: br i1 [[TMP41]], label [[OMP_OFFLOAD_FAILED5:%.*]], label [[OMP_OFFLOAD_CONT6:%.*]]
2378 // CK11: omp_offload.failed5:
2379 // CK11-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l43(ptr [[TMP21]]) #[[ATTR2]]
2380 // CK11-NEXT: br label [[OMP_OFFLOAD_CONT6]]
2381 // CK11: omp_offload.cont6:
2382 // CK11-NEXT: [[TMP42:%.*]] = load ptr, ptr [[T]], align 8
2383 // CK11-NEXT: [[TMP43:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS7]], i32 0, i32 0
2384 // CK11-NEXT: store ptr [[TMP42]], ptr [[TMP43]], align 8
2385 // CK11-NEXT: [[TMP44:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS8]], i32 0, i32 0
2386 // CK11-NEXT: store ptr [[TMP42]], ptr [[TMP44]], align 8
2387 // CK11-NEXT: [[TMP45:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS9]], i64 0, i64 0
2388 // CK11-NEXT: store ptr null, ptr [[TMP45]], align 8
2389 // CK11-NEXT: [[TMP46:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS7]], i32 0, i32 0
2390 // CK11-NEXT: [[TMP47:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS8]], i32 0, i32 0
2391 // CK11-NEXT: [[TMP48:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 0
2392 // CK11-NEXT: store i32 2, ptr [[TMP48]], align 4
2393 // CK11-NEXT: [[TMP49:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 1
2394 // CK11-NEXT: store i32 1, ptr [[TMP49]], align 4
2395 // CK11-NEXT: [[TMP50:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 2
2396 // CK11-NEXT: store ptr [[TMP46]], ptr [[TMP50]], align 8
2397 // CK11-NEXT: [[TMP51:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 3
2398 // CK11-NEXT: store ptr [[TMP47]], ptr [[TMP51]], align 8
2399 // CK11-NEXT: [[TMP52:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 4
2400 // CK11-NEXT: store ptr @.offload_sizes.3, ptr [[TMP52]], align 8
2401 // CK11-NEXT: [[TMP53:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 5
2402 // CK11-NEXT: store ptr @.offload_maptypes.4, ptr [[TMP53]], align 8
2403 // CK11-NEXT: [[TMP54:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 6
2404 // CK11-NEXT: store ptr null, ptr [[TMP54]], align 8
2405 // CK11-NEXT: [[TMP55:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 7
2406 // CK11-NEXT: store ptr null, ptr [[TMP55]], align 8
2407 // CK11-NEXT: [[TMP56:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 8
2408 // CK11-NEXT: store i64 0, ptr [[TMP56]], align 8
2409 // CK11-NEXT: [[TMP57:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 9
2410 // CK11-NEXT: store i64 0, ptr [[TMP57]], align 8
2411 // CK11-NEXT: [[TMP58:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 10
2412 // CK11-NEXT: store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP58]], align 4
2413 // CK11-NEXT: [[TMP59:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 11
2414 // CK11-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP59]], align 4
2415 // CK11-NEXT: [[TMP60:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 12
2416 // CK11-NEXT: store i32 0, ptr [[TMP60]], align 4
2417 // CK11-NEXT: [[TMP61:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1]], i64 -1, i32 -1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l49.region_id, ptr [[KERNEL_ARGS10]])
2418 // CK11-NEXT: [[TMP62:%.*]] = icmp ne i32 [[TMP61]], 0
2419 // CK11-NEXT: br i1 [[TMP62]], label [[OMP_OFFLOAD_FAILED11:%.*]], label [[OMP_OFFLOAD_CONT12:%.*]]
2420 // CK11: omp_offload.failed11:
2421 // CK11-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l49(ptr [[TMP42]]) #[[ATTR2]]
2422 // CK11-NEXT: br label [[OMP_OFFLOAD_CONT12]]
2423 // CK11: omp_offload.cont12:
2424 // CK11-NEXT: [[TMP63:%.*]] = load ptr, ptr [[LR_ADDR]], align 8
2425 // CK11-NEXT: store ptr [[TMP63]], ptr [[TMP]], align 8
2426 // CK11-NEXT: [[TMP64:%.*]] = load ptr, ptr [[TMP]], align 8
2427 // CK11-NEXT: [[TMP65:%.*]] = load ptr, ptr [[TMP64]], align 8
2428 // CK11-NEXT: [[TMP66:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS13]], i32 0, i32 0
2429 // CK11-NEXT: store ptr [[TMP65]], ptr [[TMP66]], align 8
2430 // CK11-NEXT: [[TMP67:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS14]], i32 0, i32 0
2431 // CK11-NEXT: store ptr [[TMP65]], ptr [[TMP67]], align 8
2432 // CK11-NEXT: [[TMP68:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS15]], i64 0, i64 0
2433 // CK11-NEXT: store ptr null, ptr [[TMP68]], align 8
2434 // CK11-NEXT: [[TMP69:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS13]], i32 0, i32 0
2435 // CK11-NEXT: [[TMP70:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS14]], i32 0, i32 0
2436 // CK11-NEXT: [[TMP71:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 0
2437 // CK11-NEXT: store i32 2, ptr [[TMP71]], align 4
2438 // CK11-NEXT: [[TMP72:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 1
2439 // CK11-NEXT: store i32 1, ptr [[TMP72]], align 4
2440 // CK11-NEXT: [[TMP73:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 2
2441 // CK11-NEXT: store ptr [[TMP69]], ptr [[TMP73]], align 8
2442 // CK11-NEXT: [[TMP74:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 3
2443 // CK11-NEXT: store ptr [[TMP70]], ptr [[TMP74]], align 8
2444 // CK11-NEXT: [[TMP75:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 4
2445 // CK11-NEXT: store ptr @.offload_sizes.5, ptr [[TMP75]], align 8
2446 // CK11-NEXT: [[TMP76:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 5
2447 // CK11-NEXT: store ptr @.offload_maptypes.6, ptr [[TMP76]], align 8
2448 // CK11-NEXT: [[TMP77:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 6
2449 // CK11-NEXT: store ptr null, ptr [[TMP77]], align 8
2450 // CK11-NEXT: [[TMP78:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 7
2451 // CK11-NEXT: store ptr null, ptr [[TMP78]], align 8
2452 // CK11-NEXT: [[TMP79:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 8
2453 // CK11-NEXT: store i64 0, ptr [[TMP79]], align 8
2454 // CK11-NEXT: [[TMP80:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 9
2455 // CK11-NEXT: store i64 0, ptr [[TMP80]], align 8
2456 // CK11-NEXT: [[TMP81:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 10
2457 // CK11-NEXT: store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP81]], align 4
2458 // CK11-NEXT: [[TMP82:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 11
2459 // CK11-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP82]], align 4
2460 // CK11-NEXT: [[TMP83:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 12
2461 // CK11-NEXT: store i32 0, ptr [[TMP83]], align 4
2462 // CK11-NEXT: [[TMP84:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1]], i64 -1, i32 -1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l55.region_id, ptr [[KERNEL_ARGS16]])
2463 // CK11-NEXT: [[TMP85:%.*]] = icmp ne i32 [[TMP84]], 0
2464 // CK11-NEXT: br i1 [[TMP85]], label [[OMP_OFFLOAD_FAILED17:%.*]], label [[OMP_OFFLOAD_CONT18:%.*]]
2465 // CK11: omp_offload.failed17:
2466 // CK11-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l55(ptr [[TMP65]]) #[[ATTR2]]
2467 // CK11-NEXT: br label [[OMP_OFFLOAD_CONT18]]
2468 // CK11: omp_offload.cont18:
2469 // CK11-NEXT: [[TMP86:%.*]] = load ptr, ptr [[TR_ADDR]], align 8
2470 // CK11-NEXT: store ptr [[TMP86]], ptr [[_TMP19]], align 8
2471 // CK11-NEXT: [[TMP87:%.*]] = load ptr, ptr [[_TMP19]], align 8
2472 // CK11-NEXT: [[TMP88:%.*]] = load ptr, ptr [[TMP87]], align 8
2473 // CK11-NEXT: [[TMP89:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS20]], i32 0, i32 0
2474 // CK11-NEXT: store ptr [[TMP88]], ptr [[TMP89]], align 8
2475 // CK11-NEXT: [[TMP90:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS21]], i32 0, i32 0
2476 // CK11-NEXT: store ptr [[TMP88]], ptr [[TMP90]], align 8
2477 // CK11-NEXT: [[TMP91:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS22]], i64 0, i64 0
2478 // CK11-NEXT: store ptr null, ptr [[TMP91]], align 8
2479 // CK11-NEXT: [[TMP92:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS20]], i32 0, i32 0
2480 // CK11-NEXT: [[TMP93:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS21]], i32 0, i32 0
2481 // CK11-NEXT: [[TMP94:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 0
2482 // CK11-NEXT: store i32 2, ptr [[TMP94]], align 4
2483 // CK11-NEXT: [[TMP95:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 1
2484 // CK11-NEXT: store i32 1, ptr [[TMP95]], align 4
2485 // CK11-NEXT: [[TMP96:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 2
2486 // CK11-NEXT: store ptr [[TMP92]], ptr [[TMP96]], align 8
2487 // CK11-NEXT: [[TMP97:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 3
2488 // CK11-NEXT: store ptr [[TMP93]], ptr [[TMP97]], align 8
2489 // CK11-NEXT: [[TMP98:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 4
2490 // CK11-NEXT: store ptr @.offload_sizes.7, ptr [[TMP98]], align 8
2491 // CK11-NEXT: [[TMP99:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 5
2492 // CK11-NEXT: store ptr @.offload_maptypes.8, ptr [[TMP99]], align 8
2493 // CK11-NEXT: [[TMP100:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 6
2494 // CK11-NEXT: store ptr null, ptr [[TMP100]], align 8
2495 // CK11-NEXT: [[TMP101:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 7
2496 // CK11-NEXT: store ptr null, ptr [[TMP101]], align 8
2497 // CK11-NEXT: [[TMP102:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 8
2498 // CK11-NEXT: store i64 0, ptr [[TMP102]], align 8
2499 // CK11-NEXT: [[TMP103:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 9
2500 // CK11-NEXT: store i64 0, ptr [[TMP103]], align 8
2501 // CK11-NEXT: [[TMP104:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 10
2502 // CK11-NEXT: store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP104]], align 4
2503 // CK11-NEXT: [[TMP105:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 11
2504 // CK11-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP105]], align 4
2505 // CK11-NEXT: [[TMP106:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 12
2506 // CK11-NEXT: store i32 0, ptr [[TMP106]], align 4
2507 // CK11-NEXT: [[TMP107:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1]], i64 -1, i32 -1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l61.region_id, ptr [[KERNEL_ARGS23]])
2508 // CK11-NEXT: [[TMP108:%.*]] = icmp ne i32 [[TMP107]], 0
2509 // CK11-NEXT: br i1 [[TMP108]], label [[OMP_OFFLOAD_FAILED24:%.*]], label [[OMP_OFFLOAD_CONT25:%.*]]
2510 // CK11: omp_offload.failed24:
2511 // CK11-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l61(ptr [[TMP88]]) #[[ATTR2]]
2512 // CK11-NEXT: br label [[OMP_OFFLOAD_CONT25]]
2513 // CK11: omp_offload.cont25:
2514 // CK11-NEXT: [[TMP109:%.*]] = load ptr, ptr [[TR_ADDR]], align 8
2515 // CK11-NEXT: store ptr [[TMP109]], ptr [[_TMP26]], align 8
2516 // CK11-NEXT: [[TMP110:%.*]] = load ptr, ptr [[_TMP26]], align 8
2517 // CK11-NEXT: [[TMP111:%.*]] = load ptr, ptr [[TMP110]], align 8
2518 // CK11-NEXT: [[TMP112:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS27]], i32 0, i32 0
2519 // CK11-NEXT: store ptr [[TMP111]], ptr [[TMP112]], align 8
2520 // CK11-NEXT: [[TMP113:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS28]], i32 0, i32 0
2521 // CK11-NEXT: store ptr [[TMP111]], ptr [[TMP113]], align 8
2522 // CK11-NEXT: [[TMP114:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS29]], i64 0, i64 0
2523 // CK11-NEXT: store ptr null, ptr [[TMP114]], align 8
2524 // CK11-NEXT: [[TMP115:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS27]], i32 0, i32 0
2525 // CK11-NEXT: [[TMP116:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS28]], i32 0, i32 0
2526 // CK11-NEXT: [[TMP117:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 0
2527 // CK11-NEXT: store i32 2, ptr [[TMP117]], align 4
2528 // CK11-NEXT: [[TMP118:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 1
2529 // CK11-NEXT: store i32 1, ptr [[TMP118]], align 4
2530 // CK11-NEXT: [[TMP119:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 2
2531 // CK11-NEXT: store ptr [[TMP115]], ptr [[TMP119]], align 8
2532 // CK11-NEXT: [[TMP120:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 3
2533 // CK11-NEXT: store ptr [[TMP116]], ptr [[TMP120]], align 8
2534 // CK11-NEXT: [[TMP121:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 4
2535 // CK11-NEXT: store ptr @.offload_sizes.9, ptr [[TMP121]], align 8
2536 // CK11-NEXT: [[TMP122:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 5
2537 // CK11-NEXT: store ptr @.offload_maptypes.10, ptr [[TMP122]], align 8
2538 // CK11-NEXT: [[TMP123:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 6
2539 // CK11-NEXT: store ptr null, ptr [[TMP123]], align 8
2540 // CK11-NEXT: [[TMP124:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 7
2541 // CK11-NEXT: store ptr null, ptr [[TMP124]], align 8
2542 // CK11-NEXT: [[TMP125:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 8
2543 // CK11-NEXT: store i64 0, ptr [[TMP125]], align 8
2544 // CK11-NEXT: [[TMP126:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 9
2545 // CK11-NEXT: store i64 0, ptr [[TMP126]], align 8
2546 // CK11-NEXT: [[TMP127:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 10
2547 // CK11-NEXT: store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP127]], align 4
2548 // CK11-NEXT: [[TMP128:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 11
2549 // CK11-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP128]], align 4
2550 // CK11-NEXT: [[TMP129:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 12
2551 // CK11-NEXT: store i32 0, ptr [[TMP129]], align 4
2552 // CK11-NEXT: [[TMP130:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1]], i64 -1, i32 -1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l67.region_id, ptr [[KERNEL_ARGS30]])
2553 // CK11-NEXT: [[TMP131:%.*]] = icmp ne i32 [[TMP130]], 0
2554 // CK11-NEXT: br i1 [[TMP131]], label [[OMP_OFFLOAD_FAILED31:%.*]], label [[OMP_OFFLOAD_CONT32:%.*]]
2555 // CK11: omp_offload.failed31:
2556 // CK11-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l67(ptr [[TMP111]]) #[[ATTR2]]
2557 // CK11-NEXT: br label [[OMP_OFFLOAD_CONT32]]
2558 // CK11: omp_offload.cont32:
2559 // CK11-NEXT: [[TMP132:%.*]] = load ptr, ptr [[TR_ADDR]], align 8
2560 // CK11-NEXT: store ptr [[TMP132]], ptr [[_TMP33]], align 8
2561 // CK11-NEXT: [[TMP133:%.*]] = load ptr, ptr [[LR_ADDR]], align 8
2562 // CK11-NEXT: store ptr [[TMP133]], ptr [[_TMP34]], align 8
2563 // CK11-NEXT: [[TMP134:%.*]] = load ptr, ptr [[_TMP33]], align 8
2564 // CK11-NEXT: [[TMP135:%.*]] = load ptr, ptr [[TMP134]], align 8
2565 // CK11-NEXT: [[TMP136:%.*]] = load ptr, ptr [[_TMP34]], align 8
2566 // CK11-NEXT: [[TMP137:%.*]] = load ptr, ptr [[TMP136]], align 8
2567 // CK11-NEXT: [[TMP138:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS35]], i32 0, i32 0
2568 // CK11-NEXT: store ptr [[TMP135]], ptr [[TMP138]], align 8
2569 // CK11-NEXT: [[TMP139:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS36]], i32 0, i32 0
2570 // CK11-NEXT: store ptr [[TMP135]], ptr [[TMP139]], align 8
2571 // CK11-NEXT: [[TMP140:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_MAPPERS37]], i64 0, i64 0
2572 // CK11-NEXT: store ptr null, ptr [[TMP140]], align 8
2573 // CK11-NEXT: [[TMP141:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS35]], i32 0, i32 1
2574 // CK11-NEXT: store ptr [[TMP137]], ptr [[TMP141]], align 8
2575 // CK11-NEXT: [[TMP142:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS36]], i32 0, i32 1
2576 // CK11-NEXT: store ptr [[TMP137]], ptr [[TMP142]], align 8
2577 // CK11-NEXT: [[TMP143:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_MAPPERS37]], i64 0, i64 1
2578 // CK11-NEXT: store ptr null, ptr [[TMP143]], align 8
2579 // CK11-NEXT: [[TMP144:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS35]], i32 0, i32 0
2580 // CK11-NEXT: [[TMP145:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS36]], i32 0, i32 0
2581 // CK11-NEXT: [[TMP146:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 0
2582 // CK11-NEXT: store i32 2, ptr [[TMP146]], align 4
2583 // CK11-NEXT: [[TMP147:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 1
2584 // CK11-NEXT: store i32 2, ptr [[TMP147]], align 4
2585 // CK11-NEXT: [[TMP148:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 2
2586 // CK11-NEXT: store ptr [[TMP144]], ptr [[TMP148]], align 8
2587 // CK11-NEXT: [[TMP149:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 3
2588 // CK11-NEXT: store ptr [[TMP145]], ptr [[TMP149]], align 8
2589 // CK11-NEXT: [[TMP150:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 4
2590 // CK11-NEXT: store ptr @.offload_sizes.11, ptr [[TMP150]], align 8
2591 // CK11-NEXT: [[TMP151:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 5
2592 // CK11-NEXT: store ptr @.offload_maptypes.12, ptr [[TMP151]], align 8
2593 // CK11-NEXT: [[TMP152:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 6
2594 // CK11-NEXT: store ptr null, ptr [[TMP152]], align 8
2595 // CK11-NEXT: [[TMP153:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 7
2596 // CK11-NEXT: store ptr null, ptr [[TMP153]], align 8
2597 // CK11-NEXT: [[TMP154:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 8
2598 // CK11-NEXT: store i64 0, ptr [[TMP154]], align 8
2599 // CK11-NEXT: [[TMP155:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 9
2600 // CK11-NEXT: store i64 0, ptr [[TMP155]], align 8
2601 // CK11-NEXT: [[TMP156:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 10
2602 // CK11-NEXT: store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP156]], align 4
2603 // CK11-NEXT: [[TMP157:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 11
2604 // CK11-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP157]], align 4
2605 // CK11-NEXT: [[TMP158:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 12
2606 // CK11-NEXT: store i32 0, ptr [[TMP158]], align 4
2607 // CK11-NEXT: [[TMP159:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1]], i64 -1, i32 -1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l74.region_id, ptr [[KERNEL_ARGS38]])
2608 // CK11-NEXT: [[TMP160:%.*]] = icmp ne i32 [[TMP159]], 0
2609 // CK11-NEXT: br i1 [[TMP160]], label [[OMP_OFFLOAD_FAILED39:%.*]], label [[OMP_OFFLOAD_CONT40:%.*]]
2610 // CK11: omp_offload.failed39:
2611 // CK11-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l74(ptr [[TMP135]], ptr [[TMP137]]) #[[ATTR2]]
2612 // CK11-NEXT: br label [[OMP_OFFLOAD_CONT40]]
2613 // CK11: omp_offload.cont40:
2614 // CK11-NEXT: ret void
2617 // CK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l37
2618 // CK11-SAME: (ptr noundef [[G:%.*]]) #[[ATTR1:[0-9]+]] {
2619 // CK11-NEXT: entry:
2620 // CK11-NEXT: [[G_ADDR:%.*]] = alloca ptr, align 8
2621 // CK11-NEXT: store ptr [[G]], ptr [[G_ADDR]], align 8
2622 // CK11-NEXT: [[TMP0:%.*]] = load ptr, ptr [[G_ADDR]], align 8
2623 // CK11-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds double, ptr [[TMP0]], i32 1
2624 // CK11-NEXT: store ptr [[INCDEC_PTR]], ptr [[G_ADDR]], align 8
2625 // CK11-NEXT: ret void
2628 // CK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l43
2629 // CK11-SAME: (ptr noundef [[L:%.*]]) #[[ATTR1]] {
2630 // CK11-NEXT: entry:
2631 // CK11-NEXT: [[L_ADDR:%.*]] = alloca ptr, align 8
2632 // CK11-NEXT: store ptr [[L]], ptr [[L_ADDR]], align 8
2633 // CK11-NEXT: [[TMP0:%.*]] = load ptr, ptr [[L_ADDR]], align 8
2634 // CK11-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds float, ptr [[TMP0]], i32 1
2635 // CK11-NEXT: store ptr [[INCDEC_PTR]], ptr [[L_ADDR]], align 8
2636 // CK11-NEXT: ret void
2639 // CK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l49
2640 // CK11-SAME: (ptr noundef [[T:%.*]]) #[[ATTR1]] {
2641 // CK11-NEXT: entry:
2642 // CK11-NEXT: [[T_ADDR:%.*]] = alloca ptr, align 8
2643 // CK11-NEXT: store ptr [[T]], ptr [[T_ADDR]], align 8
2644 // CK11-NEXT: [[TMP0:%.*]] = load ptr, ptr [[T_ADDR]], align 8
2645 // CK11-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds i32, ptr [[TMP0]], i32 1
2646 // CK11-NEXT: store ptr [[INCDEC_PTR]], ptr [[T_ADDR]], align 8
2647 // CK11-NEXT: ret void
2650 // CK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l55
2651 // CK11-SAME: (ptr noundef [[LR:%.*]]) #[[ATTR1]] {
2652 // CK11-NEXT: entry:
2653 // CK11-NEXT: [[LR_ADDR:%.*]] = alloca ptr, align 8
2654 // CK11-NEXT: [[TMP:%.*]] = alloca ptr, align 8
2655 // CK11-NEXT: store ptr [[LR]], ptr [[LR_ADDR]], align 8
2656 // CK11-NEXT: store ptr [[LR_ADDR]], ptr [[TMP]], align 8
2657 // CK11-NEXT: [[TMP0:%.*]] = load ptr, ptr [[TMP]], align 8
2658 // CK11-NEXT: [[TMP1:%.*]] = load ptr, ptr [[TMP0]], align 8
2659 // CK11-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds float, ptr [[TMP1]], i32 1
2660 // CK11-NEXT: store ptr [[INCDEC_PTR]], ptr [[TMP0]], align 8
2661 // CK11-NEXT: ret void
2664 // CK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l61
2665 // CK11-SAME: (ptr noundef [[TR:%.*]]) #[[ATTR1]] {
2666 // CK11-NEXT: entry:
2667 // CK11-NEXT: [[TR_ADDR:%.*]] = alloca ptr, align 8
2668 // CK11-NEXT: [[TMP:%.*]] = alloca ptr, align 8
2669 // CK11-NEXT: store ptr [[TR]], ptr [[TR_ADDR]], align 8
2670 // CK11-NEXT: store ptr [[TR_ADDR]], ptr [[TMP]], align 8
2671 // CK11-NEXT: [[TMP0:%.*]] = load ptr, ptr [[TMP]], align 8
2672 // CK11-NEXT: [[TMP1:%.*]] = load ptr, ptr [[TMP0]], align 8
2673 // CK11-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds i32, ptr [[TMP1]], i32 1
2674 // CK11-NEXT: store ptr [[INCDEC_PTR]], ptr [[TMP0]], align 8
2675 // CK11-NEXT: ret void
2678 // CK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l67
2679 // CK11-SAME: (ptr noundef [[TR:%.*]]) #[[ATTR1]] {
2680 // CK11-NEXT: entry:
2681 // CK11-NEXT: [[TR_ADDR:%.*]] = alloca ptr, align 8
2682 // CK11-NEXT: [[TMP:%.*]] = alloca ptr, align 8
2683 // CK11-NEXT: store ptr [[TR]], ptr [[TR_ADDR]], align 8
2684 // CK11-NEXT: store ptr [[TR_ADDR]], ptr [[TMP]], align 8
2685 // CK11-NEXT: [[TMP0:%.*]] = load ptr, ptr [[TMP]], align 8
2686 // CK11-NEXT: [[TMP1:%.*]] = load ptr, ptr [[TMP0]], align 8
2687 // CK11-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds i32, ptr [[TMP1]], i32 1
2688 // CK11-NEXT: store ptr [[INCDEC_PTR]], ptr [[TMP0]], align 8
2689 // CK11-NEXT: ret void
2692 // CK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l74
2693 // CK11-SAME: (ptr noundef [[TR:%.*]], ptr noundef [[LR:%.*]]) #[[ATTR1]] {
2694 // CK11-NEXT: entry:
2695 // CK11-NEXT: [[TR_ADDR:%.*]] = alloca ptr, align 8
2696 // CK11-NEXT: [[LR_ADDR:%.*]] = alloca ptr, align 8
2697 // CK11-NEXT: [[TMP:%.*]] = alloca ptr, align 8
2698 // CK11-NEXT: [[_TMP1:%.*]] = alloca ptr, align 8
2699 // CK11-NEXT: store ptr [[TR]], ptr [[TR_ADDR]], align 8
2700 // CK11-NEXT: store ptr [[LR]], ptr [[LR_ADDR]], align 8
2701 // CK11-NEXT: store ptr [[TR_ADDR]], ptr [[TMP]], align 8
2702 // CK11-NEXT: store ptr [[LR_ADDR]], ptr [[_TMP1]], align 8
2703 // CK11-NEXT: [[TMP0:%.*]] = load ptr, ptr [[TMP]], align 8
2704 // CK11-NEXT: [[TMP1:%.*]] = load ptr, ptr [[TMP0]], align 8
2705 // CK11-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds i32, ptr [[TMP1]], i32 1
2706 // CK11-NEXT: store ptr [[INCDEC_PTR]], ptr [[TMP0]], align 8
2707 // CK11-NEXT: [[TMP2:%.*]] = load ptr, ptr [[_TMP1]], align 8
2708 // CK11-NEXT: [[TMP3:%.*]] = load ptr, ptr [[TMP2]], align 8
2709 // CK11-NEXT: [[INCDEC_PTR2:%.*]] = getelementptr inbounds float, ptr [[TMP3]], i32 1
2710 // CK11-NEXT: store ptr [[INCDEC_PTR2]], ptr [[TMP2]], align 8
2711 // CK11-NEXT: ret void
2714 // CK11-LABEL: define {{[^@]+}}@.omp_offloading.requires_reg
2715 // CK11-SAME: () #[[ATTR3:[0-9]+]] {
2716 // CK11-NEXT: entry:
2717 // CK11-NEXT: call void @__tgt_register_requires(i64 1)
2718 // CK11-NEXT: ret void
2721 // CK12-LABEL: define {{[^@]+}}@_Z3barRPfRPi
2722 // CK12-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[A:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[B:%.*]]) #[[ATTR0:[0-9]+]] {
2723 // CK12-NEXT: entry:
2724 // CK12-NEXT: [[A_ADDR:%.*]] = alloca ptr, align 4
2725 // CK12-NEXT: [[B_ADDR:%.*]] = alloca ptr, align 4
2726 // CK12-NEXT: store ptr [[A]], ptr [[A_ADDR]], align 4
2727 // CK12-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 4
2728 // CK12-NEXT: [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 4
2729 // CK12-NEXT: [[TMP1:%.*]] = load ptr, ptr [[B_ADDR]], align 4
2730 // CK12-NEXT: call void @_Z3fooIiEvRPfRPT_(ptr noundef nonnull align 4 dereferenceable(4) [[TMP0]], ptr noundef nonnull align 4 dereferenceable(4) [[TMP1]])
2731 // CK12-NEXT: ret void
2734 // CK12-LABEL: define {{[^@]+}}@_Z3fooIiEvRPfRPT_
2735 // CK12-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[LR:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[TR:%.*]]) #[[ATTR0]] comdat {
2736 // CK12-NEXT: entry:
2737 // CK12-NEXT: [[LR_ADDR:%.*]] = alloca ptr, align 4
2738 // CK12-NEXT: [[TR_ADDR:%.*]] = alloca ptr, align 4
2739 // CK12-NEXT: [[L:%.*]] = alloca ptr, align 4
2740 // CK12-NEXT: [[T:%.*]] = alloca ptr, align 4
2741 // CK12-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 4
2742 // CK12-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 4
2743 // CK12-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 4
2744 // CK12-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8
2745 // CK12-NEXT: [[DOTOFFLOAD_BASEPTRS1:%.*]] = alloca [1 x ptr], align 4
2746 // CK12-NEXT: [[DOTOFFLOAD_PTRS2:%.*]] = alloca [1 x ptr], align 4
2747 // CK12-NEXT: [[DOTOFFLOAD_MAPPERS3:%.*]] = alloca [1 x ptr], align 4
2748 // CK12-NEXT: [[KERNEL_ARGS4:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
2749 // CK12-NEXT: [[DOTOFFLOAD_BASEPTRS7:%.*]] = alloca [1 x ptr], align 4
2750 // CK12-NEXT: [[DOTOFFLOAD_PTRS8:%.*]] = alloca [1 x ptr], align 4
2751 // CK12-NEXT: [[DOTOFFLOAD_MAPPERS9:%.*]] = alloca [1 x ptr], align 4
2752 // CK12-NEXT: [[KERNEL_ARGS10:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
2753 // CK12-NEXT: [[TMP:%.*]] = alloca ptr, align 4
2754 // CK12-NEXT: [[DOTOFFLOAD_BASEPTRS13:%.*]] = alloca [1 x ptr], align 4
2755 // CK12-NEXT: [[DOTOFFLOAD_PTRS14:%.*]] = alloca [1 x ptr], align 4
2756 // CK12-NEXT: [[DOTOFFLOAD_MAPPERS15:%.*]] = alloca [1 x ptr], align 4
2757 // CK12-NEXT: [[KERNEL_ARGS16:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
2758 // CK12-NEXT: [[_TMP19:%.*]] = alloca ptr, align 4
2759 // CK12-NEXT: [[DOTOFFLOAD_BASEPTRS20:%.*]] = alloca [1 x ptr], align 4
2760 // CK12-NEXT: [[DOTOFFLOAD_PTRS21:%.*]] = alloca [1 x ptr], align 4
2761 // CK12-NEXT: [[DOTOFFLOAD_MAPPERS22:%.*]] = alloca [1 x ptr], align 4
2762 // CK12-NEXT: [[KERNEL_ARGS23:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
2763 // CK12-NEXT: [[_TMP26:%.*]] = alloca ptr, align 4
2764 // CK12-NEXT: [[DOTOFFLOAD_BASEPTRS27:%.*]] = alloca [1 x ptr], align 4
2765 // CK12-NEXT: [[DOTOFFLOAD_PTRS28:%.*]] = alloca [1 x ptr], align 4
2766 // CK12-NEXT: [[DOTOFFLOAD_MAPPERS29:%.*]] = alloca [1 x ptr], align 4
2767 // CK12-NEXT: [[KERNEL_ARGS30:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
2768 // CK12-NEXT: [[_TMP33:%.*]] = alloca ptr, align 4
2769 // CK12-NEXT: [[_TMP34:%.*]] = alloca ptr, align 4
2770 // CK12-NEXT: [[DOTOFFLOAD_BASEPTRS35:%.*]] = alloca [2 x ptr], align 4
2771 // CK12-NEXT: [[DOTOFFLOAD_PTRS36:%.*]] = alloca [2 x ptr], align 4
2772 // CK12-NEXT: [[DOTOFFLOAD_MAPPERS37:%.*]] = alloca [2 x ptr], align 4
2773 // CK12-NEXT: [[KERNEL_ARGS38:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
2774 // CK12-NEXT: store ptr [[LR]], ptr [[LR_ADDR]], align 4
2775 // CK12-NEXT: store ptr [[TR]], ptr [[TR_ADDR]], align 4
2776 // CK12-NEXT: [[TMP0:%.*]] = load ptr, ptr @g, align 4
2777 // CK12-NEXT: [[TMP1:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
2778 // CK12-NEXT: store ptr [[TMP0]], ptr [[TMP1]], align 4
2779 // CK12-NEXT: [[TMP2:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0
2780 // CK12-NEXT: store ptr [[TMP0]], ptr [[TMP2]], align 4
2781 // CK12-NEXT: [[TMP3:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
2782 // CK12-NEXT: store ptr null, ptr [[TMP3]], align 4
2783 // CK12-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
2784 // CK12-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0
2785 // CK12-NEXT: [[TMP6:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0
2786 // CK12-NEXT: store i32 2, ptr [[TMP6]], align 4
2787 // CK12-NEXT: [[TMP7:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1
2788 // CK12-NEXT: store i32 1, ptr [[TMP7]], align 4
2789 // CK12-NEXT: [[TMP8:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2
2790 // CK12-NEXT: store ptr [[TMP4]], ptr [[TMP8]], align 4
2791 // CK12-NEXT: [[TMP9:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3
2792 // CK12-NEXT: store ptr [[TMP5]], ptr [[TMP9]], align 4
2793 // CK12-NEXT: [[TMP10:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4
2794 // CK12-NEXT: store ptr @.offload_sizes, ptr [[TMP10]], align 4
2795 // CK12-NEXT: [[TMP11:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5
2796 // CK12-NEXT: store ptr @.offload_maptypes, ptr [[TMP11]], align 4
2797 // CK12-NEXT: [[TMP12:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6
2798 // CK12-NEXT: store ptr null, ptr [[TMP12]], align 4
2799 // CK12-NEXT: [[TMP13:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7
2800 // CK12-NEXT: store ptr null, ptr [[TMP13]], align 4
2801 // CK12-NEXT: [[TMP14:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8
2802 // CK12-NEXT: store i64 0, ptr [[TMP14]], align 8
2803 // CK12-NEXT: [[TMP15:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9
2804 // CK12-NEXT: store i64 0, ptr [[TMP15]], align 8
2805 // CK12-NEXT: [[TMP16:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10
2806 // CK12-NEXT: store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP16]], align 4
2807 // CK12-NEXT: [[TMP17:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11
2808 // CK12-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP17]], align 4
2809 // CK12-NEXT: [[TMP18:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12
2810 // CK12-NEXT: store i32 0, ptr [[TMP18]], align 4
2811 // CK12-NEXT: [[TMP19:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1:[0-9]+]], i64 -1, i32 -1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l37.region_id, ptr [[KERNEL_ARGS]])
2812 // CK12-NEXT: [[TMP20:%.*]] = icmp ne i32 [[TMP19]], 0
2813 // CK12-NEXT: br i1 [[TMP20]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
2814 // CK12: omp_offload.failed:
2815 // CK12-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l37(ptr [[TMP0]]) #[[ATTR2:[0-9]+]]
2816 // CK12-NEXT: br label [[OMP_OFFLOAD_CONT]]
2817 // CK12: omp_offload.cont:
2818 // CK12-NEXT: [[TMP21:%.*]] = load ptr, ptr [[L]], align 4
2819 // CK12-NEXT: [[TMP22:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS1]], i32 0, i32 0
2820 // CK12-NEXT: store ptr [[TMP21]], ptr [[TMP22]], align 4
2821 // CK12-NEXT: [[TMP23:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS2]], i32 0, i32 0
2822 // CK12-NEXT: store ptr [[TMP21]], ptr [[TMP23]], align 4
2823 // CK12-NEXT: [[TMP24:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS3]], i32 0, i32 0
2824 // CK12-NEXT: store ptr null, ptr [[TMP24]], align 4
2825 // CK12-NEXT: [[TMP25:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS1]], i32 0, i32 0
2826 // CK12-NEXT: [[TMP26:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS2]], i32 0, i32 0
2827 // CK12-NEXT: [[TMP27:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 0
2828 // CK12-NEXT: store i32 2, ptr [[TMP27]], align 4
2829 // CK12-NEXT: [[TMP28:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 1
2830 // CK12-NEXT: store i32 1, ptr [[TMP28]], align 4
2831 // CK12-NEXT: [[TMP29:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 2
2832 // CK12-NEXT: store ptr [[TMP25]], ptr [[TMP29]], align 4
2833 // CK12-NEXT: [[TMP30:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 3
2834 // CK12-NEXT: store ptr [[TMP26]], ptr [[TMP30]], align 4
2835 // CK12-NEXT: [[TMP31:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 4
2836 // CK12-NEXT: store ptr @.offload_sizes.1, ptr [[TMP31]], align 4
2837 // CK12-NEXT: [[TMP32:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 5
2838 // CK12-NEXT: store ptr @.offload_maptypes.2, ptr [[TMP32]], align 4
2839 // CK12-NEXT: [[TMP33:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 6
2840 // CK12-NEXT: store ptr null, ptr [[TMP33]], align 4
2841 // CK12-NEXT: [[TMP34:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 7
2842 // CK12-NEXT: store ptr null, ptr [[TMP34]], align 4
2843 // CK12-NEXT: [[TMP35:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 8
2844 // CK12-NEXT: store i64 0, ptr [[TMP35]], align 8
2845 // CK12-NEXT: [[TMP36:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 9
2846 // CK12-NEXT: store i64 0, ptr [[TMP36]], align 8
2847 // CK12-NEXT: [[TMP37:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 10
2848 // CK12-NEXT: store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP37]], align 4
2849 // CK12-NEXT: [[TMP38:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 11
2850 // CK12-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP38]], align 4
2851 // CK12-NEXT: [[TMP39:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 12
2852 // CK12-NEXT: store i32 0, ptr [[TMP39]], align 4
2853 // CK12-NEXT: [[TMP40:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1]], i64 -1, i32 -1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l43.region_id, ptr [[KERNEL_ARGS4]])
2854 // CK12-NEXT: [[TMP41:%.*]] = icmp ne i32 [[TMP40]], 0
2855 // CK12-NEXT: br i1 [[TMP41]], label [[OMP_OFFLOAD_FAILED5:%.*]], label [[OMP_OFFLOAD_CONT6:%.*]]
2856 // CK12: omp_offload.failed5:
2857 // CK12-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l43(ptr [[TMP21]]) #[[ATTR2]]
2858 // CK12-NEXT: br label [[OMP_OFFLOAD_CONT6]]
2859 // CK12: omp_offload.cont6:
2860 // CK12-NEXT: [[TMP42:%.*]] = load ptr, ptr [[T]], align 4
2861 // CK12-NEXT: [[TMP43:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS7]], i32 0, i32 0
2862 // CK12-NEXT: store ptr [[TMP42]], ptr [[TMP43]], align 4
2863 // CK12-NEXT: [[TMP44:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS8]], i32 0, i32 0
2864 // CK12-NEXT: store ptr [[TMP42]], ptr [[TMP44]], align 4
2865 // CK12-NEXT: [[TMP45:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS9]], i32 0, i32 0
2866 // CK12-NEXT: store ptr null, ptr [[TMP45]], align 4
2867 // CK12-NEXT: [[TMP46:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS7]], i32 0, i32 0
2868 // CK12-NEXT: [[TMP47:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS8]], i32 0, i32 0
2869 // CK12-NEXT: [[TMP48:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 0
2870 // CK12-NEXT: store i32 2, ptr [[TMP48]], align 4
2871 // CK12-NEXT: [[TMP49:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 1
2872 // CK12-NEXT: store i32 1, ptr [[TMP49]], align 4
2873 // CK12-NEXT: [[TMP50:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 2
2874 // CK12-NEXT: store ptr [[TMP46]], ptr [[TMP50]], align 4
2875 // CK12-NEXT: [[TMP51:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 3
2876 // CK12-NEXT: store ptr [[TMP47]], ptr [[TMP51]], align 4
2877 // CK12-NEXT: [[TMP52:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 4
2878 // CK12-NEXT: store ptr @.offload_sizes.3, ptr [[TMP52]], align 4
2879 // CK12-NEXT: [[TMP53:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 5
2880 // CK12-NEXT: store ptr @.offload_maptypes.4, ptr [[TMP53]], align 4
2881 // CK12-NEXT: [[TMP54:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 6
2882 // CK12-NEXT: store ptr null, ptr [[TMP54]], align 4
2883 // CK12-NEXT: [[TMP55:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 7
2884 // CK12-NEXT: store ptr null, ptr [[TMP55]], align 4
2885 // CK12-NEXT: [[TMP56:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 8
2886 // CK12-NEXT: store i64 0, ptr [[TMP56]], align 8
2887 // CK12-NEXT: [[TMP57:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 9
2888 // CK12-NEXT: store i64 0, ptr [[TMP57]], align 8
2889 // CK12-NEXT: [[TMP58:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 10
2890 // CK12-NEXT: store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP58]], align 4
2891 // CK12-NEXT: [[TMP59:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 11
2892 // CK12-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP59]], align 4
2893 // CK12-NEXT: [[TMP60:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 12
2894 // CK12-NEXT: store i32 0, ptr [[TMP60]], align 4
2895 // CK12-NEXT: [[TMP61:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1]], i64 -1, i32 -1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l49.region_id, ptr [[KERNEL_ARGS10]])
2896 // CK12-NEXT: [[TMP62:%.*]] = icmp ne i32 [[TMP61]], 0
2897 // CK12-NEXT: br i1 [[TMP62]], label [[OMP_OFFLOAD_FAILED11:%.*]], label [[OMP_OFFLOAD_CONT12:%.*]]
2898 // CK12: omp_offload.failed11:
2899 // CK12-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l49(ptr [[TMP42]]) #[[ATTR2]]
2900 // CK12-NEXT: br label [[OMP_OFFLOAD_CONT12]]
2901 // CK12: omp_offload.cont12:
2902 // CK12-NEXT: [[TMP63:%.*]] = load ptr, ptr [[LR_ADDR]], align 4
2903 // CK12-NEXT: store ptr [[TMP63]], ptr [[TMP]], align 4
2904 // CK12-NEXT: [[TMP64:%.*]] = load ptr, ptr [[TMP]], align 4
2905 // CK12-NEXT: [[TMP65:%.*]] = load ptr, ptr [[TMP64]], align 4
2906 // CK12-NEXT: [[TMP66:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS13]], i32 0, i32 0
2907 // CK12-NEXT: store ptr [[TMP65]], ptr [[TMP66]], align 4
2908 // CK12-NEXT: [[TMP67:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS14]], i32 0, i32 0
2909 // CK12-NEXT: store ptr [[TMP65]], ptr [[TMP67]], align 4
2910 // CK12-NEXT: [[TMP68:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS15]], i32 0, i32 0
2911 // CK12-NEXT: store ptr null, ptr [[TMP68]], align 4
2912 // CK12-NEXT: [[TMP69:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS13]], i32 0, i32 0
2913 // CK12-NEXT: [[TMP70:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS14]], i32 0, i32 0
2914 // CK12-NEXT: [[TMP71:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 0
2915 // CK12-NEXT: store i32 2, ptr [[TMP71]], align 4
2916 // CK12-NEXT: [[TMP72:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 1
2917 // CK12-NEXT: store i32 1, ptr [[TMP72]], align 4
2918 // CK12-NEXT: [[TMP73:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 2
2919 // CK12-NEXT: store ptr [[TMP69]], ptr [[TMP73]], align 4
2920 // CK12-NEXT: [[TMP74:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 3
2921 // CK12-NEXT: store ptr [[TMP70]], ptr [[TMP74]], align 4
2922 // CK12-NEXT: [[TMP75:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 4
2923 // CK12-NEXT: store ptr @.offload_sizes.5, ptr [[TMP75]], align 4
2924 // CK12-NEXT: [[TMP76:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 5
2925 // CK12-NEXT: store ptr @.offload_maptypes.6, ptr [[TMP76]], align 4
2926 // CK12-NEXT: [[TMP77:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 6
2927 // CK12-NEXT: store ptr null, ptr [[TMP77]], align 4
2928 // CK12-NEXT: [[TMP78:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 7
2929 // CK12-NEXT: store ptr null, ptr [[TMP78]], align 4
2930 // CK12-NEXT: [[TMP79:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 8
2931 // CK12-NEXT: store i64 0, ptr [[TMP79]], align 8
2932 // CK12-NEXT: [[TMP80:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 9
2933 // CK12-NEXT: store i64 0, ptr [[TMP80]], align 8
2934 // CK12-NEXT: [[TMP81:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 10
2935 // CK12-NEXT: store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP81]], align 4
2936 // CK12-NEXT: [[TMP82:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 11
2937 // CK12-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP82]], align 4
2938 // CK12-NEXT: [[TMP83:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 12
2939 // CK12-NEXT: store i32 0, ptr [[TMP83]], align 4
2940 // CK12-NEXT: [[TMP84:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1]], i64 -1, i32 -1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l55.region_id, ptr [[KERNEL_ARGS16]])
2941 // CK12-NEXT: [[TMP85:%.*]] = icmp ne i32 [[TMP84]], 0
2942 // CK12-NEXT: br i1 [[TMP85]], label [[OMP_OFFLOAD_FAILED17:%.*]], label [[OMP_OFFLOAD_CONT18:%.*]]
2943 // CK12: omp_offload.failed17:
2944 // CK12-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l55(ptr [[TMP65]]) #[[ATTR2]]
2945 // CK12-NEXT: br label [[OMP_OFFLOAD_CONT18]]
2946 // CK12: omp_offload.cont18:
2947 // CK12-NEXT: [[TMP86:%.*]] = load ptr, ptr [[TR_ADDR]], align 4
2948 // CK12-NEXT: store ptr [[TMP86]], ptr [[_TMP19]], align 4
2949 // CK12-NEXT: [[TMP87:%.*]] = load ptr, ptr [[_TMP19]], align 4
2950 // CK12-NEXT: [[TMP88:%.*]] = load ptr, ptr [[TMP87]], align 4
2951 // CK12-NEXT: [[TMP89:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS20]], i32 0, i32 0
2952 // CK12-NEXT: store ptr [[TMP88]], ptr [[TMP89]], align 4
2953 // CK12-NEXT: [[TMP90:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS21]], i32 0, i32 0
2954 // CK12-NEXT: store ptr [[TMP88]], ptr [[TMP90]], align 4
2955 // CK12-NEXT: [[TMP91:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS22]], i32 0, i32 0
2956 // CK12-NEXT: store ptr null, ptr [[TMP91]], align 4
2957 // CK12-NEXT: [[TMP92:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS20]], i32 0, i32 0
2958 // CK12-NEXT: [[TMP93:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS21]], i32 0, i32 0
2959 // CK12-NEXT: [[TMP94:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 0
2960 // CK12-NEXT: store i32 2, ptr [[TMP94]], align 4
2961 // CK12-NEXT: [[TMP95:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 1
2962 // CK12-NEXT: store i32 1, ptr [[TMP95]], align 4
2963 // CK12-NEXT: [[TMP96:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 2
2964 // CK12-NEXT: store ptr [[TMP92]], ptr [[TMP96]], align 4
2965 // CK12-NEXT: [[TMP97:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 3
2966 // CK12-NEXT: store ptr [[TMP93]], ptr [[TMP97]], align 4
2967 // CK12-NEXT: [[TMP98:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 4
2968 // CK12-NEXT: store ptr @.offload_sizes.7, ptr [[TMP98]], align 4
2969 // CK12-NEXT: [[TMP99:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 5
2970 // CK12-NEXT: store ptr @.offload_maptypes.8, ptr [[TMP99]], align 4
2971 // CK12-NEXT: [[TMP100:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 6
2972 // CK12-NEXT: store ptr null, ptr [[TMP100]], align 4
2973 // CK12-NEXT: [[TMP101:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 7
2974 // CK12-NEXT: store ptr null, ptr [[TMP101]], align 4
2975 // CK12-NEXT: [[TMP102:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 8
2976 // CK12-NEXT: store i64 0, ptr [[TMP102]], align 8
2977 // CK12-NEXT: [[TMP103:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 9
2978 // CK12-NEXT: store i64 0, ptr [[TMP103]], align 8
2979 // CK12-NEXT: [[TMP104:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 10
2980 // CK12-NEXT: store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP104]], align 4
2981 // CK12-NEXT: [[TMP105:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 11
2982 // CK12-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP105]], align 4
2983 // CK12-NEXT: [[TMP106:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 12
2984 // CK12-NEXT: store i32 0, ptr [[TMP106]], align 4
2985 // CK12-NEXT: [[TMP107:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1]], i64 -1, i32 -1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l61.region_id, ptr [[KERNEL_ARGS23]])
2986 // CK12-NEXT: [[TMP108:%.*]] = icmp ne i32 [[TMP107]], 0
2987 // CK12-NEXT: br i1 [[TMP108]], label [[OMP_OFFLOAD_FAILED24:%.*]], label [[OMP_OFFLOAD_CONT25:%.*]]
2988 // CK12: omp_offload.failed24:
2989 // CK12-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l61(ptr [[TMP88]]) #[[ATTR2]]
2990 // CK12-NEXT: br label [[OMP_OFFLOAD_CONT25]]
2991 // CK12: omp_offload.cont25:
2992 // CK12-NEXT: [[TMP109:%.*]] = load ptr, ptr [[TR_ADDR]], align 4
2993 // CK12-NEXT: store ptr [[TMP109]], ptr [[_TMP26]], align 4
2994 // CK12-NEXT: [[TMP110:%.*]] = load ptr, ptr [[_TMP26]], align 4
2995 // CK12-NEXT: [[TMP111:%.*]] = load ptr, ptr [[TMP110]], align 4
2996 // CK12-NEXT: [[TMP112:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS27]], i32 0, i32 0
2997 // CK12-NEXT: store ptr [[TMP111]], ptr [[TMP112]], align 4
2998 // CK12-NEXT: [[TMP113:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS28]], i32 0, i32 0
2999 // CK12-NEXT: store ptr [[TMP111]], ptr [[TMP113]], align 4
3000 // CK12-NEXT: [[TMP114:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS29]], i32 0, i32 0
3001 // CK12-NEXT: store ptr null, ptr [[TMP114]], align 4
3002 // CK12-NEXT: [[TMP115:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS27]], i32 0, i32 0
3003 // CK12-NEXT: [[TMP116:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS28]], i32 0, i32 0
3004 // CK12-NEXT: [[TMP117:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 0
3005 // CK12-NEXT: store i32 2, ptr [[TMP117]], align 4
3006 // CK12-NEXT: [[TMP118:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 1
3007 // CK12-NEXT: store i32 1, ptr [[TMP118]], align 4
3008 // CK12-NEXT: [[TMP119:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 2
3009 // CK12-NEXT: store ptr [[TMP115]], ptr [[TMP119]], align 4
3010 // CK12-NEXT: [[TMP120:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 3
3011 // CK12-NEXT: store ptr [[TMP116]], ptr [[TMP120]], align 4
3012 // CK12-NEXT: [[TMP121:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 4
3013 // CK12-NEXT: store ptr @.offload_sizes.9, ptr [[TMP121]], align 4
3014 // CK12-NEXT: [[TMP122:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 5
3015 // CK12-NEXT: store ptr @.offload_maptypes.10, ptr [[TMP122]], align 4
3016 // CK12-NEXT: [[TMP123:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 6
3017 // CK12-NEXT: store ptr null, ptr [[TMP123]], align 4
3018 // CK12-NEXT: [[TMP124:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 7
3019 // CK12-NEXT: store ptr null, ptr [[TMP124]], align 4
3020 // CK12-NEXT: [[TMP125:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 8
3021 // CK12-NEXT: store i64 0, ptr [[TMP125]], align 8
3022 // CK12-NEXT: [[TMP126:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 9
3023 // CK12-NEXT: store i64 0, ptr [[TMP126]], align 8
3024 // CK12-NEXT: [[TMP127:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 10
3025 // CK12-NEXT: store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP127]], align 4
3026 // CK12-NEXT: [[TMP128:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 11
3027 // CK12-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP128]], align 4
3028 // CK12-NEXT: [[TMP129:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 12
3029 // CK12-NEXT: store i32 0, ptr [[TMP129]], align 4
3030 // CK12-NEXT: [[TMP130:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1]], i64 -1, i32 -1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l67.region_id, ptr [[KERNEL_ARGS30]])
3031 // CK12-NEXT: [[TMP131:%.*]] = icmp ne i32 [[TMP130]], 0
3032 // CK12-NEXT: br i1 [[TMP131]], label [[OMP_OFFLOAD_FAILED31:%.*]], label [[OMP_OFFLOAD_CONT32:%.*]]
3033 // CK12: omp_offload.failed31:
3034 // CK12-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l67(ptr [[TMP111]]) #[[ATTR2]]
3035 // CK12-NEXT: br label [[OMP_OFFLOAD_CONT32]]
3036 // CK12: omp_offload.cont32:
3037 // CK12-NEXT: [[TMP132:%.*]] = load ptr, ptr [[TR_ADDR]], align 4
3038 // CK12-NEXT: store ptr [[TMP132]], ptr [[_TMP33]], align 4
3039 // CK12-NEXT: [[TMP133:%.*]] = load ptr, ptr [[LR_ADDR]], align 4
3040 // CK12-NEXT: store ptr [[TMP133]], ptr [[_TMP34]], align 4
3041 // CK12-NEXT: [[TMP134:%.*]] = load ptr, ptr [[_TMP33]], align 4
3042 // CK12-NEXT: [[TMP135:%.*]] = load ptr, ptr [[TMP134]], align 4
3043 // CK12-NEXT: [[TMP136:%.*]] = load ptr, ptr [[_TMP34]], align 4
3044 // CK12-NEXT: [[TMP137:%.*]] = load ptr, ptr [[TMP136]], align 4
3045 // CK12-NEXT: [[TMP138:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS35]], i32 0, i32 0
3046 // CK12-NEXT: store ptr [[TMP135]], ptr [[TMP138]], align 4
3047 // CK12-NEXT: [[TMP139:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS36]], i32 0, i32 0
3048 // CK12-NEXT: store ptr [[TMP135]], ptr [[TMP139]], align 4
3049 // CK12-NEXT: [[TMP140:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_MAPPERS37]], i32 0, i32 0
3050 // CK12-NEXT: store ptr null, ptr [[TMP140]], align 4
3051 // CK12-NEXT: [[TMP141:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS35]], i32 0, i32 1
3052 // CK12-NEXT: store ptr [[TMP137]], ptr [[TMP141]], align 4
3053 // CK12-NEXT: [[TMP142:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS36]], i32 0, i32 1
3054 // CK12-NEXT: store ptr [[TMP137]], ptr [[TMP142]], align 4
3055 // CK12-NEXT: [[TMP143:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_MAPPERS37]], i32 0, i32 1
3056 // CK12-NEXT: store ptr null, ptr [[TMP143]], align 4
3057 // CK12-NEXT: [[TMP144:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS35]], i32 0, i32 0
3058 // CK12-NEXT: [[TMP145:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS36]], i32 0, i32 0
3059 // CK12-NEXT: [[TMP146:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 0
3060 // CK12-NEXT: store i32 2, ptr [[TMP146]], align 4
3061 // CK12-NEXT: [[TMP147:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 1
3062 // CK12-NEXT: store i32 2, ptr [[TMP147]], align 4
3063 // CK12-NEXT: [[TMP148:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 2
3064 // CK12-NEXT: store ptr [[TMP144]], ptr [[TMP148]], align 4
3065 // CK12-NEXT: [[TMP149:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 3
3066 // CK12-NEXT: store ptr [[TMP145]], ptr [[TMP149]], align 4
3067 // CK12-NEXT: [[TMP150:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 4
3068 // CK12-NEXT: store ptr @.offload_sizes.11, ptr [[TMP150]], align 4
3069 // CK12-NEXT: [[TMP151:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 5
3070 // CK12-NEXT: store ptr @.offload_maptypes.12, ptr [[TMP151]], align 4
3071 // CK12-NEXT: [[TMP152:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 6
3072 // CK12-NEXT: store ptr null, ptr [[TMP152]], align 4
3073 // CK12-NEXT: [[TMP153:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 7
3074 // CK12-NEXT: store ptr null, ptr [[TMP153]], align 4
3075 // CK12-NEXT: [[TMP154:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 8
3076 // CK12-NEXT: store i64 0, ptr [[TMP154]], align 8
3077 // CK12-NEXT: [[TMP155:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 9
3078 // CK12-NEXT: store i64 0, ptr [[TMP155]], align 8
3079 // CK12-NEXT: [[TMP156:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 10
3080 // CK12-NEXT: store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP156]], align 4
3081 // CK12-NEXT: [[TMP157:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 11
3082 // CK12-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP157]], align 4
3083 // CK12-NEXT: [[TMP158:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 12
3084 // CK12-NEXT: store i32 0, ptr [[TMP158]], align 4
3085 // CK12-NEXT: [[TMP159:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1]], i64 -1, i32 -1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l74.region_id, ptr [[KERNEL_ARGS38]])
3086 // CK12-NEXT: [[TMP160:%.*]] = icmp ne i32 [[TMP159]], 0
3087 // CK12-NEXT: br i1 [[TMP160]], label [[OMP_OFFLOAD_FAILED39:%.*]], label [[OMP_OFFLOAD_CONT40:%.*]]
3088 // CK12: omp_offload.failed39:
3089 // CK12-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l74(ptr [[TMP135]], ptr [[TMP137]]) #[[ATTR2]]
3090 // CK12-NEXT: br label [[OMP_OFFLOAD_CONT40]]
3091 // CK12: omp_offload.cont40:
3092 // CK12-NEXT: ret void
3095 // CK12-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l37
3096 // CK12-SAME: (ptr noundef [[G:%.*]]) #[[ATTR1:[0-9]+]] {
3097 // CK12-NEXT: entry:
3098 // CK12-NEXT: [[G_ADDR:%.*]] = alloca ptr, align 4
3099 // CK12-NEXT: store ptr [[G]], ptr [[G_ADDR]], align 4
3100 // CK12-NEXT: [[TMP0:%.*]] = load ptr, ptr [[G_ADDR]], align 4
3101 // CK12-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds double, ptr [[TMP0]], i32 1
3102 // CK12-NEXT: store ptr [[INCDEC_PTR]], ptr [[G_ADDR]], align 4
3103 // CK12-NEXT: ret void
3106 // CK12-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l43
3107 // CK12-SAME: (ptr noundef [[L:%.*]]) #[[ATTR1]] {
3108 // CK12-NEXT: entry:
3109 // CK12-NEXT: [[L_ADDR:%.*]] = alloca ptr, align 4
3110 // CK12-NEXT: store ptr [[L]], ptr [[L_ADDR]], align 4
3111 // CK12-NEXT: [[TMP0:%.*]] = load ptr, ptr [[L_ADDR]], align 4
3112 // CK12-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds float, ptr [[TMP0]], i32 1
3113 // CK12-NEXT: store ptr [[INCDEC_PTR]], ptr [[L_ADDR]], align 4
3114 // CK12-NEXT: ret void
3117 // CK12-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l49
3118 // CK12-SAME: (ptr noundef [[T:%.*]]) #[[ATTR1]] {
3119 // CK12-NEXT: entry:
3120 // CK12-NEXT: [[T_ADDR:%.*]] = alloca ptr, align 4
3121 // CK12-NEXT: store ptr [[T]], ptr [[T_ADDR]], align 4
3122 // CK12-NEXT: [[TMP0:%.*]] = load ptr, ptr [[T_ADDR]], align 4
3123 // CK12-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds i32, ptr [[TMP0]], i32 1
3124 // CK12-NEXT: store ptr [[INCDEC_PTR]], ptr [[T_ADDR]], align 4
3125 // CK12-NEXT: ret void
3128 // CK12-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l55
3129 // CK12-SAME: (ptr noundef [[LR:%.*]]) #[[ATTR1]] {
3130 // CK12-NEXT: entry:
3131 // CK12-NEXT: [[LR_ADDR:%.*]] = alloca ptr, align 4
3132 // CK12-NEXT: [[TMP:%.*]] = alloca ptr, align 4
3133 // CK12-NEXT: store ptr [[LR]], ptr [[LR_ADDR]], align 4
3134 // CK12-NEXT: store ptr [[LR_ADDR]], ptr [[TMP]], align 4
3135 // CK12-NEXT: [[TMP0:%.*]] = load ptr, ptr [[TMP]], align 4
3136 // CK12-NEXT: [[TMP1:%.*]] = load ptr, ptr [[TMP0]], align 4
3137 // CK12-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds float, ptr [[TMP1]], i32 1
3138 // CK12-NEXT: store ptr [[INCDEC_PTR]], ptr [[TMP0]], align 4
3139 // CK12-NEXT: ret void
3142 // CK12-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l61
3143 // CK12-SAME: (ptr noundef [[TR:%.*]]) #[[ATTR1]] {
3144 // CK12-NEXT: entry:
3145 // CK12-NEXT: [[TR_ADDR:%.*]] = alloca ptr, align 4
3146 // CK12-NEXT: [[TMP:%.*]] = alloca ptr, align 4
3147 // CK12-NEXT: store ptr [[TR]], ptr [[TR_ADDR]], align 4
3148 // CK12-NEXT: store ptr [[TR_ADDR]], ptr [[TMP]], align 4
3149 // CK12-NEXT: [[TMP0:%.*]] = load ptr, ptr [[TMP]], align 4
3150 // CK12-NEXT: [[TMP1:%.*]] = load ptr, ptr [[TMP0]], align 4
3151 // CK12-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds i32, ptr [[TMP1]], i32 1
3152 // CK12-NEXT: store ptr [[INCDEC_PTR]], ptr [[TMP0]], align 4
3153 // CK12-NEXT: ret void
3156 // CK12-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l67
3157 // CK12-SAME: (ptr noundef [[TR:%.*]]) #[[ATTR1]] {
3158 // CK12-NEXT: entry:
3159 // CK12-NEXT: [[TR_ADDR:%.*]] = alloca ptr, align 4
3160 // CK12-NEXT: [[TMP:%.*]] = alloca ptr, align 4
3161 // CK12-NEXT: store ptr [[TR]], ptr [[TR_ADDR]], align 4
3162 // CK12-NEXT: store ptr [[TR_ADDR]], ptr [[TMP]], align 4
3163 // CK12-NEXT: [[TMP0:%.*]] = load ptr, ptr [[TMP]], align 4
3164 // CK12-NEXT: [[TMP1:%.*]] = load ptr, ptr [[TMP0]], align 4
3165 // CK12-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds i32, ptr [[TMP1]], i32 1
3166 // CK12-NEXT: store ptr [[INCDEC_PTR]], ptr [[TMP0]], align 4
3167 // CK12-NEXT: ret void
3170 // CK12-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l74
3171 // CK12-SAME: (ptr noundef [[TR:%.*]], ptr noundef [[LR:%.*]]) #[[ATTR1]] {
3172 // CK12-NEXT: entry:
3173 // CK12-NEXT: [[TR_ADDR:%.*]] = alloca ptr, align 4
3174 // CK12-NEXT: [[LR_ADDR:%.*]] = alloca ptr, align 4
3175 // CK12-NEXT: [[TMP:%.*]] = alloca ptr, align 4
3176 // CK12-NEXT: [[_TMP1:%.*]] = alloca ptr, align 4
3177 // CK12-NEXT: store ptr [[TR]], ptr [[TR_ADDR]], align 4
3178 // CK12-NEXT: store ptr [[LR]], ptr [[LR_ADDR]], align 4
3179 // CK12-NEXT: store ptr [[TR_ADDR]], ptr [[TMP]], align 4
3180 // CK12-NEXT: store ptr [[LR_ADDR]], ptr [[_TMP1]], align 4
3181 // CK12-NEXT: [[TMP0:%.*]] = load ptr, ptr [[TMP]], align 4
3182 // CK12-NEXT: [[TMP1:%.*]] = load ptr, ptr [[TMP0]], align 4
3183 // CK12-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds i32, ptr [[TMP1]], i32 1
3184 // CK12-NEXT: store ptr [[INCDEC_PTR]], ptr [[TMP0]], align 4
3185 // CK12-NEXT: [[TMP2:%.*]] = load ptr, ptr [[_TMP1]], align 4
3186 // CK12-NEXT: [[TMP3:%.*]] = load ptr, ptr [[TMP2]], align 4
3187 // CK12-NEXT: [[INCDEC_PTR2:%.*]] = getelementptr inbounds float, ptr [[TMP3]], i32 1
3188 // CK12-NEXT: store ptr [[INCDEC_PTR2]], ptr [[TMP2]], align 4
3189 // CK12-NEXT: ret void
3192 // CK12-LABEL: define {{[^@]+}}@.omp_offloading.requires_reg
3193 // CK12-SAME: () #[[ATTR3:[0-9]+]] {
3194 // CK12-NEXT: entry:
3195 // CK12-NEXT: call void @__tgt_register_requires(i64 1)
3196 // CK12-NEXT: ret void
3199 // CK13-LABEL: define {{[^@]+}}@_Z3barRPfRPi
3200 // CK13-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[A:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[B:%.*]]) #[[ATTR0:[0-9]+]] {
3201 // CK13-NEXT: entry:
3202 // CK13-NEXT: [[A_ADDR:%.*]] = alloca ptr, align 4
3203 // CK13-NEXT: [[B_ADDR:%.*]] = alloca ptr, align 4
3204 // CK13-NEXT: store ptr [[A]], ptr [[A_ADDR]], align 4
3205 // CK13-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 4
3206 // CK13-NEXT: [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 4
3207 // CK13-NEXT: [[TMP1:%.*]] = load ptr, ptr [[B_ADDR]], align 4
3208 // CK13-NEXT: call void @_Z3fooIiEvRPfRPT_(ptr noundef nonnull align 4 dereferenceable(4) [[TMP0]], ptr noundef nonnull align 4 dereferenceable(4) [[TMP1]])
3209 // CK13-NEXT: ret void
3212 // CK13-LABEL: define {{[^@]+}}@_Z3fooIiEvRPfRPT_
3213 // CK13-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[LR:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[TR:%.*]]) #[[ATTR0]] comdat {
3214 // CK13-NEXT: entry:
3215 // CK13-NEXT: [[LR_ADDR:%.*]] = alloca ptr, align 4
3216 // CK13-NEXT: [[TR_ADDR:%.*]] = alloca ptr, align 4
3217 // CK13-NEXT: [[L:%.*]] = alloca ptr, align 4
3218 // CK13-NEXT: [[T:%.*]] = alloca ptr, align 4
3219 // CK13-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 4
3220 // CK13-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 4
3221 // CK13-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 4
3222 // CK13-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8
3223 // CK13-NEXT: [[DOTOFFLOAD_BASEPTRS1:%.*]] = alloca [1 x ptr], align 4
3224 // CK13-NEXT: [[DOTOFFLOAD_PTRS2:%.*]] = alloca [1 x ptr], align 4
3225 // CK13-NEXT: [[DOTOFFLOAD_MAPPERS3:%.*]] = alloca [1 x ptr], align 4
3226 // CK13-NEXT: [[KERNEL_ARGS4:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
3227 // CK13-NEXT: [[DOTOFFLOAD_BASEPTRS7:%.*]] = alloca [1 x ptr], align 4
3228 // CK13-NEXT: [[DOTOFFLOAD_PTRS8:%.*]] = alloca [1 x ptr], align 4
3229 // CK13-NEXT: [[DOTOFFLOAD_MAPPERS9:%.*]] = alloca [1 x ptr], align 4
3230 // CK13-NEXT: [[KERNEL_ARGS10:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
3231 // CK13-NEXT: [[TMP:%.*]] = alloca ptr, align 4
3232 // CK13-NEXT: [[DOTOFFLOAD_BASEPTRS13:%.*]] = alloca [1 x ptr], align 4
3233 // CK13-NEXT: [[DOTOFFLOAD_PTRS14:%.*]] = alloca [1 x ptr], align 4
3234 // CK13-NEXT: [[DOTOFFLOAD_MAPPERS15:%.*]] = alloca [1 x ptr], align 4
3235 // CK13-NEXT: [[KERNEL_ARGS16:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
3236 // CK13-NEXT: [[_TMP19:%.*]] = alloca ptr, align 4
3237 // CK13-NEXT: [[DOTOFFLOAD_BASEPTRS20:%.*]] = alloca [1 x ptr], align 4
3238 // CK13-NEXT: [[DOTOFFLOAD_PTRS21:%.*]] = alloca [1 x ptr], align 4
3239 // CK13-NEXT: [[DOTOFFLOAD_MAPPERS22:%.*]] = alloca [1 x ptr], align 4
3240 // CK13-NEXT: [[KERNEL_ARGS23:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
3241 // CK13-NEXT: [[_TMP26:%.*]] = alloca ptr, align 4
3242 // CK13-NEXT: [[DOTOFFLOAD_BASEPTRS27:%.*]] = alloca [1 x ptr], align 4
3243 // CK13-NEXT: [[DOTOFFLOAD_PTRS28:%.*]] = alloca [1 x ptr], align 4
3244 // CK13-NEXT: [[DOTOFFLOAD_MAPPERS29:%.*]] = alloca [1 x ptr], align 4
3245 // CK13-NEXT: [[KERNEL_ARGS30:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
3246 // CK13-NEXT: [[_TMP33:%.*]] = alloca ptr, align 4
3247 // CK13-NEXT: [[_TMP34:%.*]] = alloca ptr, align 4
3248 // CK13-NEXT: [[DOTOFFLOAD_BASEPTRS35:%.*]] = alloca [2 x ptr], align 4
3249 // CK13-NEXT: [[DOTOFFLOAD_PTRS36:%.*]] = alloca [2 x ptr], align 4
3250 // CK13-NEXT: [[DOTOFFLOAD_MAPPERS37:%.*]] = alloca [2 x ptr], align 4
3251 // CK13-NEXT: [[KERNEL_ARGS38:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
3252 // CK13-NEXT: store ptr [[LR]], ptr [[LR_ADDR]], align 4
3253 // CK13-NEXT: store ptr [[TR]], ptr [[TR_ADDR]], align 4
3254 // CK13-NEXT: [[TMP0:%.*]] = load ptr, ptr @g, align 4
3255 // CK13-NEXT: [[TMP1:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
3256 // CK13-NEXT: store ptr [[TMP0]], ptr [[TMP1]], align 4
3257 // CK13-NEXT: [[TMP2:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0
3258 // CK13-NEXT: store ptr [[TMP0]], ptr [[TMP2]], align 4
3259 // CK13-NEXT: [[TMP3:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
3260 // CK13-NEXT: store ptr null, ptr [[TMP3]], align 4
3261 // CK13-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
3262 // CK13-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0
3263 // CK13-NEXT: [[TMP6:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0
3264 // CK13-NEXT: store i32 2, ptr [[TMP6]], align 4
3265 // CK13-NEXT: [[TMP7:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1
3266 // CK13-NEXT: store i32 1, ptr [[TMP7]], align 4
3267 // CK13-NEXT: [[TMP8:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2
3268 // CK13-NEXT: store ptr [[TMP4]], ptr [[TMP8]], align 4
3269 // CK13-NEXT: [[TMP9:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3
3270 // CK13-NEXT: store ptr [[TMP5]], ptr [[TMP9]], align 4
3271 // CK13-NEXT: [[TMP10:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4
3272 // CK13-NEXT: store ptr @.offload_sizes, ptr [[TMP10]], align 4
3273 // CK13-NEXT: [[TMP11:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5
3274 // CK13-NEXT: store ptr @.offload_maptypes, ptr [[TMP11]], align 4
3275 // CK13-NEXT: [[TMP12:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6
3276 // CK13-NEXT: store ptr null, ptr [[TMP12]], align 4
3277 // CK13-NEXT: [[TMP13:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7
3278 // CK13-NEXT: store ptr null, ptr [[TMP13]], align 4
3279 // CK13-NEXT: [[TMP14:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8
3280 // CK13-NEXT: store i64 0, ptr [[TMP14]], align 8
3281 // CK13-NEXT: [[TMP15:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9
3282 // CK13-NEXT: store i64 0, ptr [[TMP15]], align 8
3283 // CK13-NEXT: [[TMP16:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10
3284 // CK13-NEXT: store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP16]], align 4
3285 // CK13-NEXT: [[TMP17:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11
3286 // CK13-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP17]], align 4
3287 // CK13-NEXT: [[TMP18:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12
3288 // CK13-NEXT: store i32 0, ptr [[TMP18]], align 4
3289 // CK13-NEXT: [[TMP19:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1:[0-9]+]], i64 -1, i32 -1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l37.region_id, ptr [[KERNEL_ARGS]])
3290 // CK13-NEXT: [[TMP20:%.*]] = icmp ne i32 [[TMP19]], 0
3291 // CK13-NEXT: br i1 [[TMP20]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
3292 // CK13: omp_offload.failed:
3293 // CK13-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l37(ptr [[TMP0]]) #[[ATTR2:[0-9]+]]
3294 // CK13-NEXT: br label [[OMP_OFFLOAD_CONT]]
3295 // CK13: omp_offload.cont:
3296 // CK13-NEXT: [[TMP21:%.*]] = load ptr, ptr [[L]], align 4
3297 // CK13-NEXT: [[TMP22:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS1]], i32 0, i32 0
3298 // CK13-NEXT: store ptr [[TMP21]], ptr [[TMP22]], align 4
3299 // CK13-NEXT: [[TMP23:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS2]], i32 0, i32 0
3300 // CK13-NEXT: store ptr [[TMP21]], ptr [[TMP23]], align 4
3301 // CK13-NEXT: [[TMP24:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS3]], i32 0, i32 0
3302 // CK13-NEXT: store ptr null, ptr [[TMP24]], align 4
3303 // CK13-NEXT: [[TMP25:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS1]], i32 0, i32 0
3304 // CK13-NEXT: [[TMP26:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS2]], i32 0, i32 0
3305 // CK13-NEXT: [[TMP27:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 0
3306 // CK13-NEXT: store i32 2, ptr [[TMP27]], align 4
3307 // CK13-NEXT: [[TMP28:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 1
3308 // CK13-NEXT: store i32 1, ptr [[TMP28]], align 4
3309 // CK13-NEXT: [[TMP29:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 2
3310 // CK13-NEXT: store ptr [[TMP25]], ptr [[TMP29]], align 4
3311 // CK13-NEXT: [[TMP30:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 3
3312 // CK13-NEXT: store ptr [[TMP26]], ptr [[TMP30]], align 4
3313 // CK13-NEXT: [[TMP31:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 4
3314 // CK13-NEXT: store ptr @.offload_sizes.1, ptr [[TMP31]], align 4
3315 // CK13-NEXT: [[TMP32:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 5
3316 // CK13-NEXT: store ptr @.offload_maptypes.2, ptr [[TMP32]], align 4
3317 // CK13-NEXT: [[TMP33:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 6
3318 // CK13-NEXT: store ptr null, ptr [[TMP33]], align 4
3319 // CK13-NEXT: [[TMP34:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 7
3320 // CK13-NEXT: store ptr null, ptr [[TMP34]], align 4
3321 // CK13-NEXT: [[TMP35:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 8
3322 // CK13-NEXT: store i64 0, ptr [[TMP35]], align 8
3323 // CK13-NEXT: [[TMP36:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 9
3324 // CK13-NEXT: store i64 0, ptr [[TMP36]], align 8
3325 // CK13-NEXT: [[TMP37:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 10
3326 // CK13-NEXT: store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP37]], align 4
3327 // CK13-NEXT: [[TMP38:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 11
3328 // CK13-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP38]], align 4
3329 // CK13-NEXT: [[TMP39:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 12
3330 // CK13-NEXT: store i32 0, ptr [[TMP39]], align 4
3331 // CK13-NEXT: [[TMP40:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1]], i64 -1, i32 -1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l43.region_id, ptr [[KERNEL_ARGS4]])
3332 // CK13-NEXT: [[TMP41:%.*]] = icmp ne i32 [[TMP40]], 0
3333 // CK13-NEXT: br i1 [[TMP41]], label [[OMP_OFFLOAD_FAILED5:%.*]], label [[OMP_OFFLOAD_CONT6:%.*]]
3334 // CK13: omp_offload.failed5:
3335 // CK13-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l43(ptr [[TMP21]]) #[[ATTR2]]
3336 // CK13-NEXT: br label [[OMP_OFFLOAD_CONT6]]
3337 // CK13: omp_offload.cont6:
3338 // CK13-NEXT: [[TMP42:%.*]] = load ptr, ptr [[T]], align 4
3339 // CK13-NEXT: [[TMP43:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS7]], i32 0, i32 0
3340 // CK13-NEXT: store ptr [[TMP42]], ptr [[TMP43]], align 4
3341 // CK13-NEXT: [[TMP44:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS8]], i32 0, i32 0
3342 // CK13-NEXT: store ptr [[TMP42]], ptr [[TMP44]], align 4
3343 // CK13-NEXT: [[TMP45:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS9]], i32 0, i32 0
3344 // CK13-NEXT: store ptr null, ptr [[TMP45]], align 4
3345 // CK13-NEXT: [[TMP46:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS7]], i32 0, i32 0
3346 // CK13-NEXT: [[TMP47:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS8]], i32 0, i32 0
3347 // CK13-NEXT: [[TMP48:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 0
3348 // CK13-NEXT: store i32 2, ptr [[TMP48]], align 4
3349 // CK13-NEXT: [[TMP49:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 1
3350 // CK13-NEXT: store i32 1, ptr [[TMP49]], align 4
3351 // CK13-NEXT: [[TMP50:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 2
3352 // CK13-NEXT: store ptr [[TMP46]], ptr [[TMP50]], align 4
3353 // CK13-NEXT: [[TMP51:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 3
3354 // CK13-NEXT: store ptr [[TMP47]], ptr [[TMP51]], align 4
3355 // CK13-NEXT: [[TMP52:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 4
3356 // CK13-NEXT: store ptr @.offload_sizes.3, ptr [[TMP52]], align 4
3357 // CK13-NEXT: [[TMP53:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 5
3358 // CK13-NEXT: store ptr @.offload_maptypes.4, ptr [[TMP53]], align 4
3359 // CK13-NEXT: [[TMP54:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 6
3360 // CK13-NEXT: store ptr null, ptr [[TMP54]], align 4
3361 // CK13-NEXT: [[TMP55:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 7
3362 // CK13-NEXT: store ptr null, ptr [[TMP55]], align 4
3363 // CK13-NEXT: [[TMP56:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 8
3364 // CK13-NEXT: store i64 0, ptr [[TMP56]], align 8
3365 // CK13-NEXT: [[TMP57:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 9
3366 // CK13-NEXT: store i64 0, ptr [[TMP57]], align 8
3367 // CK13-NEXT: [[TMP58:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 10
3368 // CK13-NEXT: store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP58]], align 4
3369 // CK13-NEXT: [[TMP59:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 11
3370 // CK13-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP59]], align 4
3371 // CK13-NEXT: [[TMP60:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 12
3372 // CK13-NEXT: store i32 0, ptr [[TMP60]], align 4
3373 // CK13-NEXT: [[TMP61:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1]], i64 -1, i32 -1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l49.region_id, ptr [[KERNEL_ARGS10]])
3374 // CK13-NEXT: [[TMP62:%.*]] = icmp ne i32 [[TMP61]], 0
3375 // CK13-NEXT: br i1 [[TMP62]], label [[OMP_OFFLOAD_FAILED11:%.*]], label [[OMP_OFFLOAD_CONT12:%.*]]
3376 // CK13: omp_offload.failed11:
3377 // CK13-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l49(ptr [[TMP42]]) #[[ATTR2]]
3378 // CK13-NEXT: br label [[OMP_OFFLOAD_CONT12]]
3379 // CK13: omp_offload.cont12:
3380 // CK13-NEXT: [[TMP63:%.*]] = load ptr, ptr [[LR_ADDR]], align 4
3381 // CK13-NEXT: store ptr [[TMP63]], ptr [[TMP]], align 4
3382 // CK13-NEXT: [[TMP64:%.*]] = load ptr, ptr [[TMP]], align 4
3383 // CK13-NEXT: [[TMP65:%.*]] = load ptr, ptr [[TMP64]], align 4
3384 // CK13-NEXT: [[TMP66:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS13]], i32 0, i32 0
3385 // CK13-NEXT: store ptr [[TMP65]], ptr [[TMP66]], align 4
3386 // CK13-NEXT: [[TMP67:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS14]], i32 0, i32 0
3387 // CK13-NEXT: store ptr [[TMP65]], ptr [[TMP67]], align 4
3388 // CK13-NEXT: [[TMP68:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS15]], i32 0, i32 0
3389 // CK13-NEXT: store ptr null, ptr [[TMP68]], align 4
3390 // CK13-NEXT: [[TMP69:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS13]], i32 0, i32 0
3391 // CK13-NEXT: [[TMP70:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS14]], i32 0, i32 0
3392 // CK13-NEXT: [[TMP71:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 0
3393 // CK13-NEXT: store i32 2, ptr [[TMP71]], align 4
3394 // CK13-NEXT: [[TMP72:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 1
3395 // CK13-NEXT: store i32 1, ptr [[TMP72]], align 4
3396 // CK13-NEXT: [[TMP73:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 2
3397 // CK13-NEXT: store ptr [[TMP69]], ptr [[TMP73]], align 4
3398 // CK13-NEXT: [[TMP74:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 3
3399 // CK13-NEXT: store ptr [[TMP70]], ptr [[TMP74]], align 4
3400 // CK13-NEXT: [[TMP75:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 4
3401 // CK13-NEXT: store ptr @.offload_sizes.5, ptr [[TMP75]], align 4
3402 // CK13-NEXT: [[TMP76:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 5
3403 // CK13-NEXT: store ptr @.offload_maptypes.6, ptr [[TMP76]], align 4
3404 // CK13-NEXT: [[TMP77:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 6
3405 // CK13-NEXT: store ptr null, ptr [[TMP77]], align 4
3406 // CK13-NEXT: [[TMP78:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 7
3407 // CK13-NEXT: store ptr null, ptr [[TMP78]], align 4
3408 // CK13-NEXT: [[TMP79:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 8
3409 // CK13-NEXT: store i64 0, ptr [[TMP79]], align 8
3410 // CK13-NEXT: [[TMP80:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 9
3411 // CK13-NEXT: store i64 0, ptr [[TMP80]], align 8
3412 // CK13-NEXT: [[TMP81:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 10
3413 // CK13-NEXT: store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP81]], align 4
3414 // CK13-NEXT: [[TMP82:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 11
3415 // CK13-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP82]], align 4
3416 // CK13-NEXT: [[TMP83:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 12
3417 // CK13-NEXT: store i32 0, ptr [[TMP83]], align 4
3418 // CK13-NEXT: [[TMP84:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1]], i64 -1, i32 -1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l55.region_id, ptr [[KERNEL_ARGS16]])
3419 // CK13-NEXT: [[TMP85:%.*]] = icmp ne i32 [[TMP84]], 0
3420 // CK13-NEXT: br i1 [[TMP85]], label [[OMP_OFFLOAD_FAILED17:%.*]], label [[OMP_OFFLOAD_CONT18:%.*]]
3421 // CK13: omp_offload.failed17:
3422 // CK13-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l55(ptr [[TMP65]]) #[[ATTR2]]
3423 // CK13-NEXT: br label [[OMP_OFFLOAD_CONT18]]
3424 // CK13: omp_offload.cont18:
3425 // CK13-NEXT: [[TMP86:%.*]] = load ptr, ptr [[TR_ADDR]], align 4
3426 // CK13-NEXT: store ptr [[TMP86]], ptr [[_TMP19]], align 4
3427 // CK13-NEXT: [[TMP87:%.*]] = load ptr, ptr [[_TMP19]], align 4
3428 // CK13-NEXT: [[TMP88:%.*]] = load ptr, ptr [[TMP87]], align 4
3429 // CK13-NEXT: [[TMP89:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS20]], i32 0, i32 0
3430 // CK13-NEXT: store ptr [[TMP88]], ptr [[TMP89]], align 4
3431 // CK13-NEXT: [[TMP90:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS21]], i32 0, i32 0
3432 // CK13-NEXT: store ptr [[TMP88]], ptr [[TMP90]], align 4
3433 // CK13-NEXT: [[TMP91:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS22]], i32 0, i32 0
3434 // CK13-NEXT: store ptr null, ptr [[TMP91]], align 4
3435 // CK13-NEXT: [[TMP92:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS20]], i32 0, i32 0
3436 // CK13-NEXT: [[TMP93:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS21]], i32 0, i32 0
3437 // CK13-NEXT: [[TMP94:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 0
3438 // CK13-NEXT: store i32 2, ptr [[TMP94]], align 4
3439 // CK13-NEXT: [[TMP95:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 1
3440 // CK13-NEXT: store i32 1, ptr [[TMP95]], align 4
3441 // CK13-NEXT: [[TMP96:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 2
3442 // CK13-NEXT: store ptr [[TMP92]], ptr [[TMP96]], align 4
3443 // CK13-NEXT: [[TMP97:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 3
3444 // CK13-NEXT: store ptr [[TMP93]], ptr [[TMP97]], align 4
3445 // CK13-NEXT: [[TMP98:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 4
3446 // CK13-NEXT: store ptr @.offload_sizes.7, ptr [[TMP98]], align 4
3447 // CK13-NEXT: [[TMP99:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 5
3448 // CK13-NEXT: store ptr @.offload_maptypes.8, ptr [[TMP99]], align 4
3449 // CK13-NEXT: [[TMP100:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 6
3450 // CK13-NEXT: store ptr null, ptr [[TMP100]], align 4
3451 // CK13-NEXT: [[TMP101:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 7
3452 // CK13-NEXT: store ptr null, ptr [[TMP101]], align 4
3453 // CK13-NEXT: [[TMP102:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 8
3454 // CK13-NEXT: store i64 0, ptr [[TMP102]], align 8
3455 // CK13-NEXT: [[TMP103:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 9
3456 // CK13-NEXT: store i64 0, ptr [[TMP103]], align 8
3457 // CK13-NEXT: [[TMP104:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 10
3458 // CK13-NEXT: store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP104]], align 4
3459 // CK13-NEXT: [[TMP105:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 11
3460 // CK13-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP105]], align 4
3461 // CK13-NEXT: [[TMP106:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 12
3462 // CK13-NEXT: store i32 0, ptr [[TMP106]], align 4
3463 // CK13-NEXT: [[TMP107:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1]], i64 -1, i32 -1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l61.region_id, ptr [[KERNEL_ARGS23]])
3464 // CK13-NEXT: [[TMP108:%.*]] = icmp ne i32 [[TMP107]], 0
3465 // CK13-NEXT: br i1 [[TMP108]], label [[OMP_OFFLOAD_FAILED24:%.*]], label [[OMP_OFFLOAD_CONT25:%.*]]
3466 // CK13: omp_offload.failed24:
3467 // CK13-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l61(ptr [[TMP88]]) #[[ATTR2]]
3468 // CK13-NEXT: br label [[OMP_OFFLOAD_CONT25]]
3469 // CK13: omp_offload.cont25:
3470 // CK13-NEXT: [[TMP109:%.*]] = load ptr, ptr [[TR_ADDR]], align 4
3471 // CK13-NEXT: store ptr [[TMP109]], ptr [[_TMP26]], align 4
3472 // CK13-NEXT: [[TMP110:%.*]] = load ptr, ptr [[_TMP26]], align 4
3473 // CK13-NEXT: [[TMP111:%.*]] = load ptr, ptr [[TMP110]], align 4
3474 // CK13-NEXT: [[TMP112:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS27]], i32 0, i32 0
3475 // CK13-NEXT: store ptr [[TMP111]], ptr [[TMP112]], align 4
3476 // CK13-NEXT: [[TMP113:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS28]], i32 0, i32 0
3477 // CK13-NEXT: store ptr [[TMP111]], ptr [[TMP113]], align 4
3478 // CK13-NEXT: [[TMP114:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS29]], i32 0, i32 0
3479 // CK13-NEXT: store ptr null, ptr [[TMP114]], align 4
3480 // CK13-NEXT: [[TMP115:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS27]], i32 0, i32 0
3481 // CK13-NEXT: [[TMP116:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS28]], i32 0, i32 0
3482 // CK13-NEXT: [[TMP117:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 0
3483 // CK13-NEXT: store i32 2, ptr [[TMP117]], align 4
3484 // CK13-NEXT: [[TMP118:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 1
3485 // CK13-NEXT: store i32 1, ptr [[TMP118]], align 4
3486 // CK13-NEXT: [[TMP119:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 2
3487 // CK13-NEXT: store ptr [[TMP115]], ptr [[TMP119]], align 4
3488 // CK13-NEXT: [[TMP120:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 3
3489 // CK13-NEXT: store ptr [[TMP116]], ptr [[TMP120]], align 4
3490 // CK13-NEXT: [[TMP121:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 4
3491 // CK13-NEXT: store ptr @.offload_sizes.9, ptr [[TMP121]], align 4
3492 // CK13-NEXT: [[TMP122:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 5
3493 // CK13-NEXT: store ptr @.offload_maptypes.10, ptr [[TMP122]], align 4
3494 // CK13-NEXT: [[TMP123:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 6
3495 // CK13-NEXT: store ptr null, ptr [[TMP123]], align 4
3496 // CK13-NEXT: [[TMP124:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 7
3497 // CK13-NEXT: store ptr null, ptr [[TMP124]], align 4
3498 // CK13-NEXT: [[TMP125:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 8
3499 // CK13-NEXT: store i64 0, ptr [[TMP125]], align 8
3500 // CK13-NEXT: [[TMP126:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 9
3501 // CK13-NEXT: store i64 0, ptr [[TMP126]], align 8
3502 // CK13-NEXT: [[TMP127:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 10
3503 // CK13-NEXT: store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP127]], align 4
3504 // CK13-NEXT: [[TMP128:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 11
3505 // CK13-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP128]], align 4
3506 // CK13-NEXT: [[TMP129:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 12
3507 // CK13-NEXT: store i32 0, ptr [[TMP129]], align 4
3508 // CK13-NEXT: [[TMP130:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1]], i64 -1, i32 -1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l67.region_id, ptr [[KERNEL_ARGS30]])
3509 // CK13-NEXT: [[TMP131:%.*]] = icmp ne i32 [[TMP130]], 0
3510 // CK13-NEXT: br i1 [[TMP131]], label [[OMP_OFFLOAD_FAILED31:%.*]], label [[OMP_OFFLOAD_CONT32:%.*]]
3511 // CK13: omp_offload.failed31:
3512 // CK13-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l67(ptr [[TMP111]]) #[[ATTR2]]
3513 // CK13-NEXT: br label [[OMP_OFFLOAD_CONT32]]
3514 // CK13: omp_offload.cont32:
3515 // CK13-NEXT: [[TMP132:%.*]] = load ptr, ptr [[TR_ADDR]], align 4
3516 // CK13-NEXT: store ptr [[TMP132]], ptr [[_TMP33]], align 4
3517 // CK13-NEXT: [[TMP133:%.*]] = load ptr, ptr [[LR_ADDR]], align 4
3518 // CK13-NEXT: store ptr [[TMP133]], ptr [[_TMP34]], align 4
3519 // CK13-NEXT: [[TMP134:%.*]] = load ptr, ptr [[_TMP33]], align 4
3520 // CK13-NEXT: [[TMP135:%.*]] = load ptr, ptr [[TMP134]], align 4
3521 // CK13-NEXT: [[TMP136:%.*]] = load ptr, ptr [[_TMP34]], align 4
3522 // CK13-NEXT: [[TMP137:%.*]] = load ptr, ptr [[TMP136]], align 4
3523 // CK13-NEXT: [[TMP138:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS35]], i32 0, i32 0
3524 // CK13-NEXT: store ptr [[TMP135]], ptr [[TMP138]], align 4
3525 // CK13-NEXT: [[TMP139:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS36]], i32 0, i32 0
3526 // CK13-NEXT: store ptr [[TMP135]], ptr [[TMP139]], align 4
3527 // CK13-NEXT: [[TMP140:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_MAPPERS37]], i32 0, i32 0
3528 // CK13-NEXT: store ptr null, ptr [[TMP140]], align 4
3529 // CK13-NEXT: [[TMP141:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS35]], i32 0, i32 1
3530 // CK13-NEXT: store ptr [[TMP137]], ptr [[TMP141]], align 4
3531 // CK13-NEXT: [[TMP142:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS36]], i32 0, i32 1
3532 // CK13-NEXT: store ptr [[TMP137]], ptr [[TMP142]], align 4
3533 // CK13-NEXT: [[TMP143:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_MAPPERS37]], i32 0, i32 1
3534 // CK13-NEXT: store ptr null, ptr [[TMP143]], align 4
3535 // CK13-NEXT: [[TMP144:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS35]], i32 0, i32 0
3536 // CK13-NEXT: [[TMP145:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS36]], i32 0, i32 0
3537 // CK13-NEXT: [[TMP146:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 0
3538 // CK13-NEXT: store i32 2, ptr [[TMP146]], align 4
3539 // CK13-NEXT: [[TMP147:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 1
3540 // CK13-NEXT: store i32 2, ptr [[TMP147]], align 4
3541 // CK13-NEXT: [[TMP148:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 2
3542 // CK13-NEXT: store ptr [[TMP144]], ptr [[TMP148]], align 4
3543 // CK13-NEXT: [[TMP149:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 3
3544 // CK13-NEXT: store ptr [[TMP145]], ptr [[TMP149]], align 4
3545 // CK13-NEXT: [[TMP150:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 4
3546 // CK13-NEXT: store ptr @.offload_sizes.11, ptr [[TMP150]], align 4
3547 // CK13-NEXT: [[TMP151:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 5
3548 // CK13-NEXT: store ptr @.offload_maptypes.12, ptr [[TMP151]], align 4
3549 // CK13-NEXT: [[TMP152:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 6
3550 // CK13-NEXT: store ptr null, ptr [[TMP152]], align 4
3551 // CK13-NEXT: [[TMP153:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 7
3552 // CK13-NEXT: store ptr null, ptr [[TMP153]], align 4
3553 // CK13-NEXT: [[TMP154:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 8
3554 // CK13-NEXT: store i64 0, ptr [[TMP154]], align 8
3555 // CK13-NEXT: [[TMP155:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 9
3556 // CK13-NEXT: store i64 0, ptr [[TMP155]], align 8
3557 // CK13-NEXT: [[TMP156:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 10
3558 // CK13-NEXT: store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP156]], align 4
3559 // CK13-NEXT: [[TMP157:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 11
3560 // CK13-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP157]], align 4
3561 // CK13-NEXT: [[TMP158:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 12
3562 // CK13-NEXT: store i32 0, ptr [[TMP158]], align 4
3563 // CK13-NEXT: [[TMP159:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1]], i64 -1, i32 -1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l74.region_id, ptr [[KERNEL_ARGS38]])
3564 // CK13-NEXT: [[TMP160:%.*]] = icmp ne i32 [[TMP159]], 0
3565 // CK13-NEXT: br i1 [[TMP160]], label [[OMP_OFFLOAD_FAILED39:%.*]], label [[OMP_OFFLOAD_CONT40:%.*]]
3566 // CK13: omp_offload.failed39:
3567 // CK13-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l74(ptr [[TMP135]], ptr [[TMP137]]) #[[ATTR2]]
3568 // CK13-NEXT: br label [[OMP_OFFLOAD_CONT40]]
3569 // CK13: omp_offload.cont40:
3570 // CK13-NEXT: ret void
3573 // CK13-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l37
3574 // CK13-SAME: (ptr noundef [[G:%.*]]) #[[ATTR1:[0-9]+]] {
3575 // CK13-NEXT: entry:
3576 // CK13-NEXT: [[G_ADDR:%.*]] = alloca ptr, align 4
3577 // CK13-NEXT: store ptr [[G]], ptr [[G_ADDR]], align 4
3578 // CK13-NEXT: [[TMP0:%.*]] = load ptr, ptr [[G_ADDR]], align 4
3579 // CK13-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds double, ptr [[TMP0]], i32 1
3580 // CK13-NEXT: store ptr [[INCDEC_PTR]], ptr [[G_ADDR]], align 4
3581 // CK13-NEXT: ret void
3584 // CK13-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l43
3585 // CK13-SAME: (ptr noundef [[L:%.*]]) #[[ATTR1]] {
3586 // CK13-NEXT: entry:
3587 // CK13-NEXT: [[L_ADDR:%.*]] = alloca ptr, align 4
3588 // CK13-NEXT: store ptr [[L]], ptr [[L_ADDR]], align 4
3589 // CK13-NEXT: [[TMP0:%.*]] = load ptr, ptr [[L_ADDR]], align 4
3590 // CK13-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds float, ptr [[TMP0]], i32 1
3591 // CK13-NEXT: store ptr [[INCDEC_PTR]], ptr [[L_ADDR]], align 4
3592 // CK13-NEXT: ret void
3595 // CK13-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l49
3596 // CK13-SAME: (ptr noundef [[T:%.*]]) #[[ATTR1]] {
3597 // CK13-NEXT: entry:
3598 // CK13-NEXT: [[T_ADDR:%.*]] = alloca ptr, align 4
3599 // CK13-NEXT: store ptr [[T]], ptr [[T_ADDR]], align 4
3600 // CK13-NEXT: [[TMP0:%.*]] = load ptr, ptr [[T_ADDR]], align 4
3601 // CK13-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds i32, ptr [[TMP0]], i32 1
3602 // CK13-NEXT: store ptr [[INCDEC_PTR]], ptr [[T_ADDR]], align 4
3603 // CK13-NEXT: ret void
3606 // CK13-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l55
3607 // CK13-SAME: (ptr noundef [[LR:%.*]]) #[[ATTR1]] {
3608 // CK13-NEXT: entry:
3609 // CK13-NEXT: [[LR_ADDR:%.*]] = alloca ptr, align 4
3610 // CK13-NEXT: [[TMP:%.*]] = alloca ptr, align 4
3611 // CK13-NEXT: store ptr [[LR]], ptr [[LR_ADDR]], align 4
3612 // CK13-NEXT: store ptr [[LR_ADDR]], ptr [[TMP]], align 4
3613 // CK13-NEXT: [[TMP0:%.*]] = load ptr, ptr [[TMP]], align 4
3614 // CK13-NEXT: [[TMP1:%.*]] = load ptr, ptr [[TMP0]], align 4
3615 // CK13-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds float, ptr [[TMP1]], i32 1
3616 // CK13-NEXT: store ptr [[INCDEC_PTR]], ptr [[TMP0]], align 4
3617 // CK13-NEXT: ret void
3620 // CK13-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l61
3621 // CK13-SAME: (ptr noundef [[TR:%.*]]) #[[ATTR1]] {
3622 // CK13-NEXT: entry:
3623 // CK13-NEXT: [[TR_ADDR:%.*]] = alloca ptr, align 4
3624 // CK13-NEXT: [[TMP:%.*]] = alloca ptr, align 4
3625 // CK13-NEXT: store ptr [[TR]], ptr [[TR_ADDR]], align 4
3626 // CK13-NEXT: store ptr [[TR_ADDR]], ptr [[TMP]], align 4
3627 // CK13-NEXT: [[TMP0:%.*]] = load ptr, ptr [[TMP]], align 4
3628 // CK13-NEXT: [[TMP1:%.*]] = load ptr, ptr [[TMP0]], align 4
3629 // CK13-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds i32, ptr [[TMP1]], i32 1
3630 // CK13-NEXT: store ptr [[INCDEC_PTR]], ptr [[TMP0]], align 4
3631 // CK13-NEXT: ret void
3634 // CK13-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l67
3635 // CK13-SAME: (ptr noundef [[TR:%.*]]) #[[ATTR1]] {
3636 // CK13-NEXT: entry:
3637 // CK13-NEXT: [[TR_ADDR:%.*]] = alloca ptr, align 4
3638 // CK13-NEXT: [[TMP:%.*]] = alloca ptr, align 4
3639 // CK13-NEXT: store ptr [[TR]], ptr [[TR_ADDR]], align 4
3640 // CK13-NEXT: store ptr [[TR_ADDR]], ptr [[TMP]], align 4
3641 // CK13-NEXT: [[TMP0:%.*]] = load ptr, ptr [[TMP]], align 4
3642 // CK13-NEXT: [[TMP1:%.*]] = load ptr, ptr [[TMP0]], align 4
3643 // CK13-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds i32, ptr [[TMP1]], i32 1
3644 // CK13-NEXT: store ptr [[INCDEC_PTR]], ptr [[TMP0]], align 4
3645 // CK13-NEXT: ret void
3648 // CK13-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l74
3649 // CK13-SAME: (ptr noundef [[TR:%.*]], ptr noundef [[LR:%.*]]) #[[ATTR1]] {
3650 // CK13-NEXT: entry:
3651 // CK13-NEXT: [[TR_ADDR:%.*]] = alloca ptr, align 4
3652 // CK13-NEXT: [[LR_ADDR:%.*]] = alloca ptr, align 4
3653 // CK13-NEXT: [[TMP:%.*]] = alloca ptr, align 4
3654 // CK13-NEXT: [[_TMP1:%.*]] = alloca ptr, align 4
3655 // CK13-NEXT: store ptr [[TR]], ptr [[TR_ADDR]], align 4
3656 // CK13-NEXT: store ptr [[LR]], ptr [[LR_ADDR]], align 4
3657 // CK13-NEXT: store ptr [[TR_ADDR]], ptr [[TMP]], align 4
3658 // CK13-NEXT: store ptr [[LR_ADDR]], ptr [[_TMP1]], align 4
3659 // CK13-NEXT: [[TMP0:%.*]] = load ptr, ptr [[TMP]], align 4
3660 // CK13-NEXT: [[TMP1:%.*]] = load ptr, ptr [[TMP0]], align 4
3661 // CK13-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds i32, ptr [[TMP1]], i32 1
3662 // CK13-NEXT: store ptr [[INCDEC_PTR]], ptr [[TMP0]], align 4
3663 // CK13-NEXT: [[TMP2:%.*]] = load ptr, ptr [[_TMP1]], align 4
3664 // CK13-NEXT: [[TMP3:%.*]] = load ptr, ptr [[TMP2]], align 4
3665 // CK13-NEXT: [[INCDEC_PTR2:%.*]] = getelementptr inbounds float, ptr [[TMP3]], i32 1
3666 // CK13-NEXT: store ptr [[INCDEC_PTR2]], ptr [[TMP2]], align 4
3667 // CK13-NEXT: ret void
3670 // CK13-LABEL: define {{[^@]+}}@.omp_offloading.requires_reg
3671 // CK13-SAME: () #[[ATTR3:[0-9]+]] {
3672 // CK13-NEXT: entry:
3673 // CK13-NEXT: call void @__tgt_register_requires(i64 1)
3674 // CK13-NEXT: ret void
3677 // SIMD-ONLY00-LABEL: define {{[^@]+}}@_Z3barRPfRPi
3678 // SIMD-ONLY00-SAME: (ptr noundef nonnull align 8 dereferenceable(8) [[A:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[B:%.*]]) #[[ATTR0:[0-9]+]] {
3679 // SIMD-ONLY00-NEXT: entry:
3680 // SIMD-ONLY00-NEXT: [[A_ADDR:%.*]] = alloca ptr, align 8
3681 // SIMD-ONLY00-NEXT: [[B_ADDR:%.*]] = alloca ptr, align 8
3682 // SIMD-ONLY00-NEXT: store ptr [[A]], ptr [[A_ADDR]], align 8
3683 // SIMD-ONLY00-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 8
3684 // SIMD-ONLY00-NEXT: [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 8
3685 // SIMD-ONLY00-NEXT: [[TMP1:%.*]] = load ptr, ptr [[B_ADDR]], align 8
3686 // SIMD-ONLY00-NEXT: call void @_Z3fooIiEvRPfRPT_(ptr noundef nonnull align 8 dereferenceable(8) [[TMP0]], ptr noundef nonnull align 8 dereferenceable(8) [[TMP1]])
3687 // SIMD-ONLY00-NEXT: ret void
3690 // SIMD-ONLY00-LABEL: define {{[^@]+}}@_Z3fooIiEvRPfRPT_
3691 // SIMD-ONLY00-SAME: (ptr noundef nonnull align 8 dereferenceable(8) [[LR:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[TR:%.*]]) #[[ATTR0]] comdat {
3692 // SIMD-ONLY00-NEXT: entry:
3693 // SIMD-ONLY00-NEXT: [[LR_ADDR:%.*]] = alloca ptr, align 8
3694 // SIMD-ONLY00-NEXT: [[TR_ADDR:%.*]] = alloca ptr, align 8
3695 // SIMD-ONLY00-NEXT: [[L:%.*]] = alloca ptr, align 8
3696 // SIMD-ONLY00-NEXT: [[T:%.*]] = alloca ptr, align 8
3697 // SIMD-ONLY00-NEXT: [[TMP:%.*]] = alloca ptr, align 8
3698 // SIMD-ONLY00-NEXT: [[_TMP4:%.*]] = alloca ptr, align 8
3699 // SIMD-ONLY00-NEXT: [[_TMP6:%.*]] = alloca ptr, align 8
3700 // SIMD-ONLY00-NEXT: [[_TMP8:%.*]] = alloca ptr, align 8
3701 // SIMD-ONLY00-NEXT: [[_TMP9:%.*]] = alloca ptr, align 8
3702 // SIMD-ONLY00-NEXT: store ptr [[LR]], ptr [[LR_ADDR]], align 8
3703 // SIMD-ONLY00-NEXT: store ptr [[TR]], ptr [[TR_ADDR]], align 8
3704 // SIMD-ONLY00-NEXT: [[TMP0:%.*]] = load ptr, ptr @g, align 8
3705 // SIMD-ONLY00-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds double, ptr [[TMP0]], i32 1
3706 // SIMD-ONLY00-NEXT: store ptr [[INCDEC_PTR]], ptr @g, align 8
3707 // SIMD-ONLY00-NEXT: [[TMP1:%.*]] = load ptr, ptr [[L]], align 8
3708 // SIMD-ONLY00-NEXT: [[INCDEC_PTR1:%.*]] = getelementptr inbounds float, ptr [[TMP1]], i32 1
3709 // SIMD-ONLY00-NEXT: store ptr [[INCDEC_PTR1]], ptr [[L]], align 8
3710 // SIMD-ONLY00-NEXT: [[TMP2:%.*]] = load ptr, ptr [[T]], align 8
3711 // SIMD-ONLY00-NEXT: [[INCDEC_PTR2:%.*]] = getelementptr inbounds i32, ptr [[TMP2]], i32 1
3712 // SIMD-ONLY00-NEXT: store ptr [[INCDEC_PTR2]], ptr [[T]], align 8
3713 // SIMD-ONLY00-NEXT: [[TMP3:%.*]] = load ptr, ptr [[LR_ADDR]], align 8
3714 // SIMD-ONLY00-NEXT: store ptr [[TMP3]], ptr [[TMP]], align 8
3715 // SIMD-ONLY00-NEXT: [[TMP4:%.*]] = load ptr, ptr [[LR_ADDR]], align 8
3716 // SIMD-ONLY00-NEXT: [[TMP5:%.*]] = load ptr, ptr [[TMP]], align 8
3717 // SIMD-ONLY00-NEXT: [[TMP6:%.*]] = load ptr, ptr [[TMP5]], align 8
3718 // SIMD-ONLY00-NEXT: [[INCDEC_PTR3:%.*]] = getelementptr inbounds float, ptr [[TMP6]], i32 1
3719 // SIMD-ONLY00-NEXT: store ptr [[INCDEC_PTR3]], ptr [[TMP5]], align 8
3720 // SIMD-ONLY00-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TR_ADDR]], align 8
3721 // SIMD-ONLY00-NEXT: store ptr [[TMP7]], ptr [[_TMP4]], align 8
3722 // SIMD-ONLY00-NEXT: [[TMP8:%.*]] = load ptr, ptr [[TR_ADDR]], align 8
3723 // SIMD-ONLY00-NEXT: [[TMP9:%.*]] = load ptr, ptr [[_TMP4]], align 8
3724 // SIMD-ONLY00-NEXT: [[TMP10:%.*]] = load ptr, ptr [[TMP9]], align 8
3725 // SIMD-ONLY00-NEXT: [[INCDEC_PTR5:%.*]] = getelementptr inbounds i32, ptr [[TMP10]], i32 1
3726 // SIMD-ONLY00-NEXT: store ptr [[INCDEC_PTR5]], ptr [[TMP9]], align 8
3727 // SIMD-ONLY00-NEXT: [[TMP11:%.*]] = load ptr, ptr [[TR_ADDR]], align 8
3728 // SIMD-ONLY00-NEXT: store ptr [[TMP11]], ptr [[_TMP6]], align 8
3729 // SIMD-ONLY00-NEXT: [[TMP12:%.*]] = load ptr, ptr [[TR_ADDR]], align 8
3730 // SIMD-ONLY00-NEXT: [[TMP13:%.*]] = load ptr, ptr [[_TMP6]], align 8
3731 // SIMD-ONLY00-NEXT: [[TMP14:%.*]] = load ptr, ptr [[TMP13]], align 8
3732 // SIMD-ONLY00-NEXT: [[INCDEC_PTR7:%.*]] = getelementptr inbounds i32, ptr [[TMP14]], i32 1
3733 // SIMD-ONLY00-NEXT: store ptr [[INCDEC_PTR7]], ptr [[TMP13]], align 8
3734 // SIMD-ONLY00-NEXT: [[TMP15:%.*]] = load ptr, ptr [[TR_ADDR]], align 8
3735 // SIMD-ONLY00-NEXT: store ptr [[TMP15]], ptr [[_TMP8]], align 8
3736 // SIMD-ONLY00-NEXT: [[TMP16:%.*]] = load ptr, ptr [[LR_ADDR]], align 8
3737 // SIMD-ONLY00-NEXT: store ptr [[TMP16]], ptr [[_TMP9]], align 8
3738 // SIMD-ONLY00-NEXT: [[TMP17:%.*]] = load ptr, ptr [[TR_ADDR]], align 8
3739 // SIMD-ONLY00-NEXT: [[TMP18:%.*]] = load ptr, ptr [[LR_ADDR]], align 8
3740 // SIMD-ONLY00-NEXT: [[TMP19:%.*]] = load ptr, ptr [[_TMP8]], align 8
3741 // SIMD-ONLY00-NEXT: [[TMP20:%.*]] = load ptr, ptr [[TMP19]], align 8
3742 // SIMD-ONLY00-NEXT: [[INCDEC_PTR10:%.*]] = getelementptr inbounds i32, ptr [[TMP20]], i32 1
3743 // SIMD-ONLY00-NEXT: store ptr [[INCDEC_PTR10]], ptr [[TMP19]], align 8
3744 // SIMD-ONLY00-NEXT: [[TMP21:%.*]] = load ptr, ptr [[_TMP9]], align 8
3745 // SIMD-ONLY00-NEXT: [[TMP22:%.*]] = load ptr, ptr [[TMP21]], align 8
3746 // SIMD-ONLY00-NEXT: [[INCDEC_PTR11:%.*]] = getelementptr inbounds float, ptr [[TMP22]], i32 1
3747 // SIMD-ONLY00-NEXT: store ptr [[INCDEC_PTR11]], ptr [[TMP21]], align 8
3748 // SIMD-ONLY00-NEXT: ret void
3751 // SIMD-ONLY01-LABEL: define {{[^@]+}}@_Z3barRPfRPi
3752 // SIMD-ONLY01-SAME: (ptr noundef nonnull align 8 dereferenceable(8) [[A:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[B:%.*]]) #[[ATTR0:[0-9]+]] {
3753 // SIMD-ONLY01-NEXT: entry:
3754 // SIMD-ONLY01-NEXT: [[A_ADDR:%.*]] = alloca ptr, align 8
3755 // SIMD-ONLY01-NEXT: [[B_ADDR:%.*]] = alloca ptr, align 8
3756 // SIMD-ONLY01-NEXT: store ptr [[A]], ptr [[A_ADDR]], align 8
3757 // SIMD-ONLY01-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 8
3758 // SIMD-ONLY01-NEXT: [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 8
3759 // SIMD-ONLY01-NEXT: [[TMP1:%.*]] = load ptr, ptr [[B_ADDR]], align 8
3760 // SIMD-ONLY01-NEXT: call void @_Z3fooIiEvRPfRPT_(ptr noundef nonnull align 8 dereferenceable(8) [[TMP0]], ptr noundef nonnull align 8 dereferenceable(8) [[TMP1]])
3761 // SIMD-ONLY01-NEXT: ret void
3764 // SIMD-ONLY01-LABEL: define {{[^@]+}}@_Z3fooIiEvRPfRPT_
3765 // SIMD-ONLY01-SAME: (ptr noundef nonnull align 8 dereferenceable(8) [[LR:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[TR:%.*]]) #[[ATTR0]] comdat {
3766 // SIMD-ONLY01-NEXT: entry:
3767 // SIMD-ONLY01-NEXT: [[LR_ADDR:%.*]] = alloca ptr, align 8
3768 // SIMD-ONLY01-NEXT: [[TR_ADDR:%.*]] = alloca ptr, align 8
3769 // SIMD-ONLY01-NEXT: [[L:%.*]] = alloca ptr, align 8
3770 // SIMD-ONLY01-NEXT: [[T:%.*]] = alloca ptr, align 8
3771 // SIMD-ONLY01-NEXT: [[TMP:%.*]] = alloca ptr, align 8
3772 // SIMD-ONLY01-NEXT: [[_TMP4:%.*]] = alloca ptr, align 8
3773 // SIMD-ONLY01-NEXT: [[_TMP6:%.*]] = alloca ptr, align 8
3774 // SIMD-ONLY01-NEXT: [[_TMP8:%.*]] = alloca ptr, align 8
3775 // SIMD-ONLY01-NEXT: [[_TMP9:%.*]] = alloca ptr, align 8
3776 // SIMD-ONLY01-NEXT: store ptr [[LR]], ptr [[LR_ADDR]], align 8
3777 // SIMD-ONLY01-NEXT: store ptr [[TR]], ptr [[TR_ADDR]], align 8
3778 // SIMD-ONLY01-NEXT: [[TMP0:%.*]] = load ptr, ptr @g, align 8
3779 // SIMD-ONLY01-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds double, ptr [[TMP0]], i32 1
3780 // SIMD-ONLY01-NEXT: store ptr [[INCDEC_PTR]], ptr @g, align 8
3781 // SIMD-ONLY01-NEXT: [[TMP1:%.*]] = load ptr, ptr [[L]], align 8
3782 // SIMD-ONLY01-NEXT: [[INCDEC_PTR1:%.*]] = getelementptr inbounds float, ptr [[TMP1]], i32 1
3783 // SIMD-ONLY01-NEXT: store ptr [[INCDEC_PTR1]], ptr [[L]], align 8
3784 // SIMD-ONLY01-NEXT: [[TMP2:%.*]] = load ptr, ptr [[T]], align 8
3785 // SIMD-ONLY01-NEXT: [[INCDEC_PTR2:%.*]] = getelementptr inbounds i32, ptr [[TMP2]], i32 1
3786 // SIMD-ONLY01-NEXT: store ptr [[INCDEC_PTR2]], ptr [[T]], align 8
3787 // SIMD-ONLY01-NEXT: [[TMP3:%.*]] = load ptr, ptr [[LR_ADDR]], align 8
3788 // SIMD-ONLY01-NEXT: store ptr [[TMP3]], ptr [[TMP]], align 8
3789 // SIMD-ONLY01-NEXT: [[TMP4:%.*]] = load ptr, ptr [[LR_ADDR]], align 8
3790 // SIMD-ONLY01-NEXT: [[TMP5:%.*]] = load ptr, ptr [[TMP]], align 8
3791 // SIMD-ONLY01-NEXT: [[TMP6:%.*]] = load ptr, ptr [[TMP5]], align 8
3792 // SIMD-ONLY01-NEXT: [[INCDEC_PTR3:%.*]] = getelementptr inbounds float, ptr [[TMP6]], i32 1
3793 // SIMD-ONLY01-NEXT: store ptr [[INCDEC_PTR3]], ptr [[TMP5]], align 8
3794 // SIMD-ONLY01-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TR_ADDR]], align 8
3795 // SIMD-ONLY01-NEXT: store ptr [[TMP7]], ptr [[_TMP4]], align 8
3796 // SIMD-ONLY01-NEXT: [[TMP8:%.*]] = load ptr, ptr [[TR_ADDR]], align 8
3797 // SIMD-ONLY01-NEXT: [[TMP9:%.*]] = load ptr, ptr [[_TMP4]], align 8
3798 // SIMD-ONLY01-NEXT: [[TMP10:%.*]] = load ptr, ptr [[TMP9]], align 8
3799 // SIMD-ONLY01-NEXT: [[INCDEC_PTR5:%.*]] = getelementptr inbounds i32, ptr [[TMP10]], i32 1
3800 // SIMD-ONLY01-NEXT: store ptr [[INCDEC_PTR5]], ptr [[TMP9]], align 8
3801 // SIMD-ONLY01-NEXT: [[TMP11:%.*]] = load ptr, ptr [[TR_ADDR]], align 8
3802 // SIMD-ONLY01-NEXT: store ptr [[TMP11]], ptr [[_TMP6]], align 8
3803 // SIMD-ONLY01-NEXT: [[TMP12:%.*]] = load ptr, ptr [[TR_ADDR]], align 8
3804 // SIMD-ONLY01-NEXT: [[TMP13:%.*]] = load ptr, ptr [[_TMP6]], align 8
3805 // SIMD-ONLY01-NEXT: [[TMP14:%.*]] = load ptr, ptr [[TMP13]], align 8
3806 // SIMD-ONLY01-NEXT: [[INCDEC_PTR7:%.*]] = getelementptr inbounds i32, ptr [[TMP14]], i32 1
3807 // SIMD-ONLY01-NEXT: store ptr [[INCDEC_PTR7]], ptr [[TMP13]], align 8
3808 // SIMD-ONLY01-NEXT: [[TMP15:%.*]] = load ptr, ptr [[TR_ADDR]], align 8
3809 // SIMD-ONLY01-NEXT: store ptr [[TMP15]], ptr [[_TMP8]], align 8
3810 // SIMD-ONLY01-NEXT: [[TMP16:%.*]] = load ptr, ptr [[LR_ADDR]], align 8
3811 // SIMD-ONLY01-NEXT: store ptr [[TMP16]], ptr [[_TMP9]], align 8
3812 // SIMD-ONLY01-NEXT: [[TMP17:%.*]] = load ptr, ptr [[TR_ADDR]], align 8
3813 // SIMD-ONLY01-NEXT: [[TMP18:%.*]] = load ptr, ptr [[LR_ADDR]], align 8
3814 // SIMD-ONLY01-NEXT: [[TMP19:%.*]] = load ptr, ptr [[_TMP8]], align 8
3815 // SIMD-ONLY01-NEXT: [[TMP20:%.*]] = load ptr, ptr [[TMP19]], align 8
3816 // SIMD-ONLY01-NEXT: [[INCDEC_PTR10:%.*]] = getelementptr inbounds i32, ptr [[TMP20]], i32 1
3817 // SIMD-ONLY01-NEXT: store ptr [[INCDEC_PTR10]], ptr [[TMP19]], align 8
3818 // SIMD-ONLY01-NEXT: [[TMP21:%.*]] = load ptr, ptr [[_TMP9]], align 8
3819 // SIMD-ONLY01-NEXT: [[TMP22:%.*]] = load ptr, ptr [[TMP21]], align 8
3820 // SIMD-ONLY01-NEXT: [[INCDEC_PTR11:%.*]] = getelementptr inbounds float, ptr [[TMP22]], i32 1
3821 // SIMD-ONLY01-NEXT: store ptr [[INCDEC_PTR11]], ptr [[TMP21]], align 8
3822 // SIMD-ONLY01-NEXT: ret void
3825 // SIMD-ONLY02-LABEL: define {{[^@]+}}@_Z3barRPfRPi
3826 // SIMD-ONLY02-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[A:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[B:%.*]]) #[[ATTR0:[0-9]+]] {
3827 // SIMD-ONLY02-NEXT: entry:
3828 // SIMD-ONLY02-NEXT: [[A_ADDR:%.*]] = alloca ptr, align 4
3829 // SIMD-ONLY02-NEXT: [[B_ADDR:%.*]] = alloca ptr, align 4
3830 // SIMD-ONLY02-NEXT: store ptr [[A]], ptr [[A_ADDR]], align 4
3831 // SIMD-ONLY02-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 4
3832 // SIMD-ONLY02-NEXT: [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 4
3833 // SIMD-ONLY02-NEXT: [[TMP1:%.*]] = load ptr, ptr [[B_ADDR]], align 4
3834 // SIMD-ONLY02-NEXT: call void @_Z3fooIiEvRPfRPT_(ptr noundef nonnull align 4 dereferenceable(4) [[TMP0]], ptr noundef nonnull align 4 dereferenceable(4) [[TMP1]])
3835 // SIMD-ONLY02-NEXT: ret void
3838 // SIMD-ONLY02-LABEL: define {{[^@]+}}@_Z3fooIiEvRPfRPT_
3839 // SIMD-ONLY02-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[LR:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[TR:%.*]]) #[[ATTR0]] comdat {
3840 // SIMD-ONLY02-NEXT: entry:
3841 // SIMD-ONLY02-NEXT: [[LR_ADDR:%.*]] = alloca ptr, align 4
3842 // SIMD-ONLY02-NEXT: [[TR_ADDR:%.*]] = alloca ptr, align 4
3843 // SIMD-ONLY02-NEXT: [[L:%.*]] = alloca ptr, align 4
3844 // SIMD-ONLY02-NEXT: [[T:%.*]] = alloca ptr, align 4
3845 // SIMD-ONLY02-NEXT: [[TMP:%.*]] = alloca ptr, align 4
3846 // SIMD-ONLY02-NEXT: [[_TMP4:%.*]] = alloca ptr, align 4
3847 // SIMD-ONLY02-NEXT: [[_TMP6:%.*]] = alloca ptr, align 4
3848 // SIMD-ONLY02-NEXT: [[_TMP8:%.*]] = alloca ptr, align 4
3849 // SIMD-ONLY02-NEXT: [[_TMP9:%.*]] = alloca ptr, align 4
3850 // SIMD-ONLY02-NEXT: store ptr [[LR]], ptr [[LR_ADDR]], align 4
3851 // SIMD-ONLY02-NEXT: store ptr [[TR]], ptr [[TR_ADDR]], align 4
3852 // SIMD-ONLY02-NEXT: [[TMP0:%.*]] = load ptr, ptr @g, align 4
3853 // SIMD-ONLY02-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds double, ptr [[TMP0]], i32 1
3854 // SIMD-ONLY02-NEXT: store ptr [[INCDEC_PTR]], ptr @g, align 4
3855 // SIMD-ONLY02-NEXT: [[TMP1:%.*]] = load ptr, ptr [[L]], align 4
3856 // SIMD-ONLY02-NEXT: [[INCDEC_PTR1:%.*]] = getelementptr inbounds float, ptr [[TMP1]], i32 1
3857 // SIMD-ONLY02-NEXT: store ptr [[INCDEC_PTR1]], ptr [[L]], align 4
3858 // SIMD-ONLY02-NEXT: [[TMP2:%.*]] = load ptr, ptr [[T]], align 4
3859 // SIMD-ONLY02-NEXT: [[INCDEC_PTR2:%.*]] = getelementptr inbounds i32, ptr [[TMP2]], i32 1
3860 // SIMD-ONLY02-NEXT: store ptr [[INCDEC_PTR2]], ptr [[T]], align 4
3861 // SIMD-ONLY02-NEXT: [[TMP3:%.*]] = load ptr, ptr [[LR_ADDR]], align 4
3862 // SIMD-ONLY02-NEXT: store ptr [[TMP3]], ptr [[TMP]], align 4
3863 // SIMD-ONLY02-NEXT: [[TMP4:%.*]] = load ptr, ptr [[LR_ADDR]], align 4
3864 // SIMD-ONLY02-NEXT: [[TMP5:%.*]] = load ptr, ptr [[TMP]], align 4
3865 // SIMD-ONLY02-NEXT: [[TMP6:%.*]] = load ptr, ptr [[TMP5]], align 4
3866 // SIMD-ONLY02-NEXT: [[INCDEC_PTR3:%.*]] = getelementptr inbounds float, ptr [[TMP6]], i32 1
3867 // SIMD-ONLY02-NEXT: store ptr [[INCDEC_PTR3]], ptr [[TMP5]], align 4
3868 // SIMD-ONLY02-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TR_ADDR]], align 4
3869 // SIMD-ONLY02-NEXT: store ptr [[TMP7]], ptr [[_TMP4]], align 4
3870 // SIMD-ONLY02-NEXT: [[TMP8:%.*]] = load ptr, ptr [[TR_ADDR]], align 4
3871 // SIMD-ONLY02-NEXT: [[TMP9:%.*]] = load ptr, ptr [[_TMP4]], align 4
3872 // SIMD-ONLY02-NEXT: [[TMP10:%.*]] = load ptr, ptr [[TMP9]], align 4
3873 // SIMD-ONLY02-NEXT: [[INCDEC_PTR5:%.*]] = getelementptr inbounds i32, ptr [[TMP10]], i32 1
3874 // SIMD-ONLY02-NEXT: store ptr [[INCDEC_PTR5]], ptr [[TMP9]], align 4
3875 // SIMD-ONLY02-NEXT: [[TMP11:%.*]] = load ptr, ptr [[TR_ADDR]], align 4
3876 // SIMD-ONLY02-NEXT: store ptr [[TMP11]], ptr [[_TMP6]], align 4
3877 // SIMD-ONLY02-NEXT: [[TMP12:%.*]] = load ptr, ptr [[TR_ADDR]], align 4
3878 // SIMD-ONLY02-NEXT: [[TMP13:%.*]] = load ptr, ptr [[_TMP6]], align 4
3879 // SIMD-ONLY02-NEXT: [[TMP14:%.*]] = load ptr, ptr [[TMP13]], align 4
3880 // SIMD-ONLY02-NEXT: [[INCDEC_PTR7:%.*]] = getelementptr inbounds i32, ptr [[TMP14]], i32 1
3881 // SIMD-ONLY02-NEXT: store ptr [[INCDEC_PTR7]], ptr [[TMP13]], align 4
3882 // SIMD-ONLY02-NEXT: [[TMP15:%.*]] = load ptr, ptr [[TR_ADDR]], align 4
3883 // SIMD-ONLY02-NEXT: store ptr [[TMP15]], ptr [[_TMP8]], align 4
3884 // SIMD-ONLY02-NEXT: [[TMP16:%.*]] = load ptr, ptr [[LR_ADDR]], align 4
3885 // SIMD-ONLY02-NEXT: store ptr [[TMP16]], ptr [[_TMP9]], align 4
3886 // SIMD-ONLY02-NEXT: [[TMP17:%.*]] = load ptr, ptr [[TR_ADDR]], align 4
3887 // SIMD-ONLY02-NEXT: [[TMP18:%.*]] = load ptr, ptr [[LR_ADDR]], align 4
3888 // SIMD-ONLY02-NEXT: [[TMP19:%.*]] = load ptr, ptr [[_TMP8]], align 4
3889 // SIMD-ONLY02-NEXT: [[TMP20:%.*]] = load ptr, ptr [[TMP19]], align 4
3890 // SIMD-ONLY02-NEXT: [[INCDEC_PTR10:%.*]] = getelementptr inbounds i32, ptr [[TMP20]], i32 1
3891 // SIMD-ONLY02-NEXT: store ptr [[INCDEC_PTR10]], ptr [[TMP19]], align 4
3892 // SIMD-ONLY02-NEXT: [[TMP21:%.*]] = load ptr, ptr [[_TMP9]], align 4
3893 // SIMD-ONLY02-NEXT: [[TMP22:%.*]] = load ptr, ptr [[TMP21]], align 4
3894 // SIMD-ONLY02-NEXT: [[INCDEC_PTR11:%.*]] = getelementptr inbounds float, ptr [[TMP22]], i32 1
3895 // SIMD-ONLY02-NEXT: store ptr [[INCDEC_PTR11]], ptr [[TMP21]], align 4
3896 // SIMD-ONLY02-NEXT: ret void
3899 // SIMD-ONLY03-LABEL: define {{[^@]+}}@_Z3barRPfRPi
3900 // SIMD-ONLY03-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[A:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[B:%.*]]) #[[ATTR0:[0-9]+]] {
3901 // SIMD-ONLY03-NEXT: entry:
3902 // SIMD-ONLY03-NEXT: [[A_ADDR:%.*]] = alloca ptr, align 4
3903 // SIMD-ONLY03-NEXT: [[B_ADDR:%.*]] = alloca ptr, align 4
3904 // SIMD-ONLY03-NEXT: store ptr [[A]], ptr [[A_ADDR]], align 4
3905 // SIMD-ONLY03-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 4
3906 // SIMD-ONLY03-NEXT: [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 4
3907 // SIMD-ONLY03-NEXT: [[TMP1:%.*]] = load ptr, ptr [[B_ADDR]], align 4
3908 // SIMD-ONLY03-NEXT: call void @_Z3fooIiEvRPfRPT_(ptr noundef nonnull align 4 dereferenceable(4) [[TMP0]], ptr noundef nonnull align 4 dereferenceable(4) [[TMP1]])
3909 // SIMD-ONLY03-NEXT: ret void
3912 // SIMD-ONLY03-LABEL: define {{[^@]+}}@_Z3fooIiEvRPfRPT_
3913 // SIMD-ONLY03-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[LR:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[TR:%.*]]) #[[ATTR0]] comdat {
3914 // SIMD-ONLY03-NEXT: entry:
3915 // SIMD-ONLY03-NEXT: [[LR_ADDR:%.*]] = alloca ptr, align 4
3916 // SIMD-ONLY03-NEXT: [[TR_ADDR:%.*]] = alloca ptr, align 4
3917 // SIMD-ONLY03-NEXT: [[L:%.*]] = alloca ptr, align 4
3918 // SIMD-ONLY03-NEXT: [[T:%.*]] = alloca ptr, align 4
3919 // SIMD-ONLY03-NEXT: [[TMP:%.*]] = alloca ptr, align 4
3920 // SIMD-ONLY03-NEXT: [[_TMP4:%.*]] = alloca ptr, align 4
3921 // SIMD-ONLY03-NEXT: [[_TMP6:%.*]] = alloca ptr, align 4
3922 // SIMD-ONLY03-NEXT: [[_TMP8:%.*]] = alloca ptr, align 4
3923 // SIMD-ONLY03-NEXT: [[_TMP9:%.*]] = alloca ptr, align 4
3924 // SIMD-ONLY03-NEXT: store ptr [[LR]], ptr [[LR_ADDR]], align 4
3925 // SIMD-ONLY03-NEXT: store ptr [[TR]], ptr [[TR_ADDR]], align 4
3926 // SIMD-ONLY03-NEXT: [[TMP0:%.*]] = load ptr, ptr @g, align 4
3927 // SIMD-ONLY03-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds double, ptr [[TMP0]], i32 1
3928 // SIMD-ONLY03-NEXT: store ptr [[INCDEC_PTR]], ptr @g, align 4
3929 // SIMD-ONLY03-NEXT: [[TMP1:%.*]] = load ptr, ptr [[L]], align 4
3930 // SIMD-ONLY03-NEXT: [[INCDEC_PTR1:%.*]] = getelementptr inbounds float, ptr [[TMP1]], i32 1
3931 // SIMD-ONLY03-NEXT: store ptr [[INCDEC_PTR1]], ptr [[L]], align 4
3932 // SIMD-ONLY03-NEXT: [[TMP2:%.*]] = load ptr, ptr [[T]], align 4
3933 // SIMD-ONLY03-NEXT: [[INCDEC_PTR2:%.*]] = getelementptr inbounds i32, ptr [[TMP2]], i32 1
3934 // SIMD-ONLY03-NEXT: store ptr [[INCDEC_PTR2]], ptr [[T]], align 4
3935 // SIMD-ONLY03-NEXT: [[TMP3:%.*]] = load ptr, ptr [[LR_ADDR]], align 4
3936 // SIMD-ONLY03-NEXT: store ptr [[TMP3]], ptr [[TMP]], align 4
3937 // SIMD-ONLY03-NEXT: [[TMP4:%.*]] = load ptr, ptr [[LR_ADDR]], align 4
3938 // SIMD-ONLY03-NEXT: [[TMP5:%.*]] = load ptr, ptr [[TMP]], align 4
3939 // SIMD-ONLY03-NEXT: [[TMP6:%.*]] = load ptr, ptr [[TMP5]], align 4
3940 // SIMD-ONLY03-NEXT: [[INCDEC_PTR3:%.*]] = getelementptr inbounds float, ptr [[TMP6]], i32 1
3941 // SIMD-ONLY03-NEXT: store ptr [[INCDEC_PTR3]], ptr [[TMP5]], align 4
3942 // SIMD-ONLY03-NEXT: [[TMP7:%.*]] = load ptr, ptr [[TR_ADDR]], align 4
3943 // SIMD-ONLY03-NEXT: store ptr [[TMP7]], ptr [[_TMP4]], align 4
3944 // SIMD-ONLY03-NEXT: [[TMP8:%.*]] = load ptr, ptr [[TR_ADDR]], align 4
3945 // SIMD-ONLY03-NEXT: [[TMP9:%.*]] = load ptr, ptr [[_TMP4]], align 4
3946 // SIMD-ONLY03-NEXT: [[TMP10:%.*]] = load ptr, ptr [[TMP9]], align 4
3947 // SIMD-ONLY03-NEXT: [[INCDEC_PTR5:%.*]] = getelementptr inbounds i32, ptr [[TMP10]], i32 1
3948 // SIMD-ONLY03-NEXT: store ptr [[INCDEC_PTR5]], ptr [[TMP9]], align 4
3949 // SIMD-ONLY03-NEXT: [[TMP11:%.*]] = load ptr, ptr [[TR_ADDR]], align 4
3950 // SIMD-ONLY03-NEXT: store ptr [[TMP11]], ptr [[_TMP6]], align 4
3951 // SIMD-ONLY03-NEXT: [[TMP12:%.*]] = load ptr, ptr [[TR_ADDR]], align 4
3952 // SIMD-ONLY03-NEXT: [[TMP13:%.*]] = load ptr, ptr [[_TMP6]], align 4
3953 // SIMD-ONLY03-NEXT: [[TMP14:%.*]] = load ptr, ptr [[TMP13]], align 4
3954 // SIMD-ONLY03-NEXT: [[INCDEC_PTR7:%.*]] = getelementptr inbounds i32, ptr [[TMP14]], i32 1
3955 // SIMD-ONLY03-NEXT: store ptr [[INCDEC_PTR7]], ptr [[TMP13]], align 4
3956 // SIMD-ONLY03-NEXT: [[TMP15:%.*]] = load ptr, ptr [[TR_ADDR]], align 4
3957 // SIMD-ONLY03-NEXT: store ptr [[TMP15]], ptr [[_TMP8]], align 4
3958 // SIMD-ONLY03-NEXT: [[TMP16:%.*]] = load ptr, ptr [[LR_ADDR]], align 4
3959 // SIMD-ONLY03-NEXT: store ptr [[TMP16]], ptr [[_TMP9]], align 4
3960 // SIMD-ONLY03-NEXT: [[TMP17:%.*]] = load ptr, ptr [[TR_ADDR]], align 4
3961 // SIMD-ONLY03-NEXT: [[TMP18:%.*]] = load ptr, ptr [[LR_ADDR]], align 4
3962 // SIMD-ONLY03-NEXT: [[TMP19:%.*]] = load ptr, ptr [[_TMP8]], align 4
3963 // SIMD-ONLY03-NEXT: [[TMP20:%.*]] = load ptr, ptr [[TMP19]], align 4
3964 // SIMD-ONLY03-NEXT: [[INCDEC_PTR10:%.*]] = getelementptr inbounds i32, ptr [[TMP20]], i32 1
3965 // SIMD-ONLY03-NEXT: store ptr [[INCDEC_PTR10]], ptr [[TMP19]], align 4
3966 // SIMD-ONLY03-NEXT: [[TMP21:%.*]] = load ptr, ptr [[_TMP9]], align 4
3967 // SIMD-ONLY03-NEXT: [[TMP22:%.*]] = load ptr, ptr [[TMP21]], align 4
3968 // SIMD-ONLY03-NEXT: [[INCDEC_PTR11:%.*]] = getelementptr inbounds float, ptr [[TMP22]], i32 1
3969 // SIMD-ONLY03-NEXT: store ptr [[INCDEC_PTR11]], ptr [[TMP21]], align 4
3970 // SIMD-ONLY03-NEXT: ret void
3973 // CK20-LABEL: define {{[^@]+}}@_Z3barPd
3974 // CK20-SAME: (ptr noundef [[ARG:%.*]]) #[[ATTR0:[0-9]+]] {
3975 // CK20-NEXT: entry:
3976 // CK20-NEXT: [[ARG_ADDR:%.*]] = alloca ptr, align 8
3977 // CK20-NEXT: [[A:%.*]] = alloca [[STRUCT_ST:%.*]], align 8
3978 // CK20-NEXT: store ptr [[ARG]], ptr [[ARG_ADDR]], align 8
3979 // CK20-NEXT: call void @_ZN2STIdEC1ERPd(ptr noundef nonnull align 8 dereferenceable(16) [[A]], ptr noundef nonnull align 8 dereferenceable(8) [[ARG_ADDR]])
3980 // CK20-NEXT: call void @_ZN2STIdE3fooERPd(ptr noundef nonnull align 8 dereferenceable(16) [[A]], ptr noundef nonnull align 8 dereferenceable(8) [[ARG_ADDR]])
3981 // CK20-NEXT: [[TMP0:%.*]] = load ptr, ptr [[ARG_ADDR]], align 8
3982 // CK20-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds double, ptr [[TMP0]], i32 1
3983 // CK20-NEXT: store ptr [[INCDEC_PTR]], ptr [[ARG_ADDR]], align 8
3984 // CK20-NEXT: ret void
3987 // CK20-LABEL: define {{[^@]+}}@_ZN2STIdEC1ERPd
3988 // CK20-SAME: (ptr noundef nonnull align 8 dereferenceable(16) [[THIS:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[B:%.*]]) unnamed_addr #[[ATTR1:[0-9]+]] comdat {
3989 // CK20-NEXT: entry:
3990 // CK20-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8
3991 // CK20-NEXT: [[B_ADDR:%.*]] = alloca ptr, align 8
3992 // CK20-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8
3993 // CK20-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 8
3994 // CK20-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8
3995 // CK20-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 8
3996 // CK20-NEXT: call void @_ZN2STIdEC2ERPd(ptr noundef nonnull align 8 dereferenceable(16) [[THIS1]], ptr noundef nonnull align 8 dereferenceable(8) [[TMP0]])
3997 // CK20-NEXT: ret void
4000 // CK20-LABEL: define {{[^@]+}}@_ZN2STIdE3fooERPd
4001 // CK20-SAME: (ptr noundef nonnull align 8 dereferenceable(16) [[THIS:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[ARG:%.*]]) #[[ATTR0]] comdat {
4002 // CK20-NEXT: entry:
4003 // CK20-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8
4004 // CK20-NEXT: [[ARG_ADDR:%.*]] = alloca ptr, align 8
4005 // CK20-NEXT: [[LA:%.*]] = alloca ptr, align 8
4006 // CK20-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 8
4007 // CK20-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 8
4008 // CK20-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 8
4009 // CK20-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8
4010 // CK20-NEXT: [[DOTOFFLOAD_BASEPTRS2:%.*]] = alloca [2 x ptr], align 8
4011 // CK20-NEXT: [[DOTOFFLOAD_PTRS3:%.*]] = alloca [2 x ptr], align 8
4012 // CK20-NEXT: [[DOTOFFLOAD_MAPPERS4:%.*]] = alloca [2 x ptr], align 8
4013 // CK20-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [2 x i64], align 8
4014 // CK20-NEXT: [[KERNEL_ARGS5:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
4015 // CK20-NEXT: [[DOTOFFLOAD_BASEPTRS10:%.*]] = alloca [3 x ptr], align 8
4016 // CK20-NEXT: [[DOTOFFLOAD_PTRS11:%.*]] = alloca [3 x ptr], align 8
4017 // CK20-NEXT: [[DOTOFFLOAD_MAPPERS12:%.*]] = alloca [3 x ptr], align 8
4018 // CK20-NEXT: [[DOTOFFLOAD_SIZES13:%.*]] = alloca [3 x i64], align 8
4019 // CK20-NEXT: [[KERNEL_ARGS14:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
4020 // CK20-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8
4021 // CK20-NEXT: store ptr [[ARG]], ptr [[ARG_ADDR]], align 8
4022 // CK20-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8
4023 // CK20-NEXT: store ptr null, ptr [[LA]], align 8
4024 // CK20-NEXT: [[A:%.*]] = getelementptr inbounds [[STRUCT_ST:%.*]], ptr [[THIS1]], i32 0, i32 0
4025 // CK20-NEXT: [[TMP0:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
4026 // CK20-NEXT: store ptr [[THIS1]], ptr [[TMP0]], align 8
4027 // CK20-NEXT: [[TMP1:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0
4028 // CK20-NEXT: store ptr [[A]], ptr [[TMP1]], align 8
4029 // CK20-NEXT: [[TMP2:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
4030 // CK20-NEXT: store ptr null, ptr [[TMP2]], align 8
4031 // CK20-NEXT: [[TMP3:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
4032 // CK20-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0
4033 // CK20-NEXT: [[TMP5:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0
4034 // CK20-NEXT: store i32 2, ptr [[TMP5]], align 4
4035 // CK20-NEXT: [[TMP6:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1
4036 // CK20-NEXT: store i32 1, ptr [[TMP6]], align 4
4037 // CK20-NEXT: [[TMP7:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2
4038 // CK20-NEXT: store ptr [[TMP3]], ptr [[TMP7]], align 8
4039 // CK20-NEXT: [[TMP8:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3
4040 // CK20-NEXT: store ptr [[TMP4]], ptr [[TMP8]], align 8
4041 // CK20-NEXT: [[TMP9:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4
4042 // CK20-NEXT: store ptr @.offload_sizes, ptr [[TMP9]], align 8
4043 // CK20-NEXT: [[TMP10:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5
4044 // CK20-NEXT: store ptr @.offload_maptypes, ptr [[TMP10]], align 8
4045 // CK20-NEXT: [[TMP11:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6
4046 // CK20-NEXT: store ptr null, ptr [[TMP11]], align 8
4047 // CK20-NEXT: [[TMP12:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7
4048 // CK20-NEXT: store ptr null, ptr [[TMP12]], align 8
4049 // CK20-NEXT: [[TMP13:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8
4050 // CK20-NEXT: store i64 0, ptr [[TMP13]], align 8
4051 // CK20-NEXT: [[TMP14:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9
4052 // CK20-NEXT: store i64 0, ptr [[TMP14]], align 8
4053 // CK20-NEXT: [[TMP15:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10
4054 // CK20-NEXT: store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP15]], align 4
4055 // CK20-NEXT: [[TMP16:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11
4056 // CK20-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP16]], align 4
4057 // CK20-NEXT: [[TMP17:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12
4058 // CK20-NEXT: store i32 0, ptr [[TMP17]], align 4
4059 // CK20-NEXT: [[TMP18:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1:[0-9]+]], i64 -1, i32 -1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l112.region_id, ptr [[KERNEL_ARGS]])
4060 // CK20-NEXT: [[TMP19:%.*]] = icmp ne i32 [[TMP18]], 0
4061 // CK20-NEXT: br i1 [[TMP19]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
4062 // CK20: omp_offload.failed:
4063 // CK20-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l112(ptr [[THIS1]]) #[[ATTR3:[0-9]+]]
4064 // CK20-NEXT: br label [[OMP_OFFLOAD_CONT]]
4065 // CK20: omp_offload.cont:
4066 // CK20-NEXT: [[B:%.*]] = getelementptr inbounds [[STRUCT_ST]], ptr [[THIS1]], i32 0, i32 1
4067 // CK20-NEXT: [[TMP20:%.*]] = load ptr, ptr [[B]], align 8
4068 // CK20-NEXT: [[TMP21:%.*]] = getelementptr ptr, ptr [[B]], i32 1
4069 // CK20-NEXT: [[TMP22:%.*]] = ptrtoint ptr [[TMP21]] to i64
4070 // CK20-NEXT: [[TMP23:%.*]] = ptrtoint ptr [[B]] to i64
4071 // CK20-NEXT: [[TMP24:%.*]] = sub i64 [[TMP22]], [[TMP23]]
4072 // CK20-NEXT: [[TMP25:%.*]] = sdiv exact i64 [[TMP24]], ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)
4073 // CK20-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[DOTOFFLOAD_SIZES]], ptr align 8 @.offload_sizes.1, i64 16, i1 false)
4074 // CK20-NEXT: [[TMP26:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS2]], i32 0, i32 0
4075 // CK20-NEXT: store ptr [[THIS1]], ptr [[TMP26]], align 8
4076 // CK20-NEXT: [[TMP27:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS3]], i32 0, i32 0
4077 // CK20-NEXT: store ptr [[B]], ptr [[TMP27]], align 8
4078 // CK20-NEXT: [[TMP28:%.*]] = getelementptr inbounds [2 x i64], ptr [[DOTOFFLOAD_SIZES]], i32 0, i32 0
4079 // CK20-NEXT: store i64 [[TMP25]], ptr [[TMP28]], align 8
4080 // CK20-NEXT: [[TMP29:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_MAPPERS4]], i64 0, i64 0
4081 // CK20-NEXT: store ptr null, ptr [[TMP29]], align 8
4082 // CK20-NEXT: [[TMP30:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS2]], i32 0, i32 1
4083 // CK20-NEXT: store ptr [[THIS1]], ptr [[TMP30]], align 8
4084 // CK20-NEXT: [[TMP31:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS3]], i32 0, i32 1
4085 // CK20-NEXT: store ptr [[TMP20]], ptr [[TMP31]], align 8
4086 // CK20-NEXT: [[TMP32:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_MAPPERS4]], i64 0, i64 1
4087 // CK20-NEXT: store ptr null, ptr [[TMP32]], align 8
4088 // CK20-NEXT: [[TMP33:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS2]], i32 0, i32 0
4089 // CK20-NEXT: [[TMP34:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS3]], i32 0, i32 0
4090 // CK20-NEXT: [[TMP35:%.*]] = getelementptr inbounds [2 x i64], ptr [[DOTOFFLOAD_SIZES]], i32 0, i32 0
4091 // CK20-NEXT: [[TMP36:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 0
4092 // CK20-NEXT: store i32 2, ptr [[TMP36]], align 4
4093 // CK20-NEXT: [[TMP37:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 1
4094 // CK20-NEXT: store i32 2, ptr [[TMP37]], align 4
4095 // CK20-NEXT: [[TMP38:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 2
4096 // CK20-NEXT: store ptr [[TMP33]], ptr [[TMP38]], align 8
4097 // CK20-NEXT: [[TMP39:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 3
4098 // CK20-NEXT: store ptr [[TMP34]], ptr [[TMP39]], align 8
4099 // CK20-NEXT: [[TMP40:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 4
4100 // CK20-NEXT: store ptr [[TMP35]], ptr [[TMP40]], align 8
4101 // CK20-NEXT: [[TMP41:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 5
4102 // CK20-NEXT: store ptr @.offload_maptypes.2, ptr [[TMP41]], align 8
4103 // CK20-NEXT: [[TMP42:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 6
4104 // CK20-NEXT: store ptr null, ptr [[TMP42]], align 8
4105 // CK20-NEXT: [[TMP43:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 7
4106 // CK20-NEXT: store ptr null, ptr [[TMP43]], align 8
4107 // CK20-NEXT: [[TMP44:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 8
4108 // CK20-NEXT: store i64 0, ptr [[TMP44]], align 8
4109 // CK20-NEXT: [[TMP45:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 9
4110 // CK20-NEXT: store i64 0, ptr [[TMP45]], align 8
4111 // CK20-NEXT: [[TMP46:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 10
4112 // CK20-NEXT: store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP46]], align 4
4113 // CK20-NEXT: [[TMP47:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 11
4114 // CK20-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP47]], align 4
4115 // CK20-NEXT: [[TMP48:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 12
4116 // CK20-NEXT: store i32 0, ptr [[TMP48]], align 4
4117 // CK20-NEXT: [[TMP49:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1]], i64 -1, i32 -1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l118.region_id, ptr [[KERNEL_ARGS5]])
4118 // CK20-NEXT: [[TMP50:%.*]] = icmp ne i32 [[TMP49]], 0
4119 // CK20-NEXT: br i1 [[TMP50]], label [[OMP_OFFLOAD_FAILED6:%.*]], label [[OMP_OFFLOAD_CONT7:%.*]]
4120 // CK20: omp_offload.failed6:
4121 // CK20-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l118(ptr [[THIS1]]) #[[ATTR3]]
4122 // CK20-NEXT: br label [[OMP_OFFLOAD_CONT7]]
4123 // CK20: omp_offload.cont7:
4124 // CK20-NEXT: [[A8:%.*]] = getelementptr inbounds [[STRUCT_ST]], ptr [[THIS1]], i32 0, i32 0
4125 // CK20-NEXT: [[B9:%.*]] = getelementptr inbounds [[STRUCT_ST]], ptr [[THIS1]], i32 0, i32 1
4126 // CK20-NEXT: [[TMP51:%.*]] = load ptr, ptr [[B9]], align 8
4127 // CK20-NEXT: [[TMP52:%.*]] = getelementptr ptr, ptr [[B9]], i32 1
4128 // CK20-NEXT: [[TMP53:%.*]] = ptrtoint ptr [[TMP52]] to i64
4129 // CK20-NEXT: [[TMP54:%.*]] = ptrtoint ptr [[A8]] to i64
4130 // CK20-NEXT: [[TMP55:%.*]] = sub i64 [[TMP53]], [[TMP54]]
4131 // CK20-NEXT: [[TMP56:%.*]] = sdiv exact i64 [[TMP55]], ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)
4132 // CK20-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[DOTOFFLOAD_SIZES13]], ptr align 8 @.offload_sizes.3, i64 24, i1 false)
4133 // CK20-NEXT: [[TMP57:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS10]], i32 0, i32 0
4134 // CK20-NEXT: store ptr [[THIS1]], ptr [[TMP57]], align 8
4135 // CK20-NEXT: [[TMP58:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS11]], i32 0, i32 0
4136 // CK20-NEXT: store ptr [[A8]], ptr [[TMP58]], align 8
4137 // CK20-NEXT: [[TMP59:%.*]] = getelementptr inbounds [3 x i64], ptr [[DOTOFFLOAD_SIZES13]], i32 0, i32 0
4138 // CK20-NEXT: store i64 [[TMP56]], ptr [[TMP59]], align 8
4139 // CK20-NEXT: [[TMP60:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS12]], i64 0, i64 0
4140 // CK20-NEXT: store ptr null, ptr [[TMP60]], align 8
4141 // CK20-NEXT: [[TMP61:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS10]], i32 0, i32 1
4142 // CK20-NEXT: store ptr [[THIS1]], ptr [[TMP61]], align 8
4143 // CK20-NEXT: [[TMP62:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS11]], i32 0, i32 1
4144 // CK20-NEXT: store ptr [[A8]], ptr [[TMP62]], align 8
4145 // CK20-NEXT: [[TMP63:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS12]], i64 0, i64 1
4146 // CK20-NEXT: store ptr null, ptr [[TMP63]], align 8
4147 // CK20-NEXT: [[TMP64:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS10]], i32 0, i32 2
4148 // CK20-NEXT: store ptr [[THIS1]], ptr [[TMP64]], align 8
4149 // CK20-NEXT: [[TMP65:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS11]], i32 0, i32 2
4150 // CK20-NEXT: store ptr [[TMP51]], ptr [[TMP65]], align 8
4151 // CK20-NEXT: [[TMP66:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS12]], i64 0, i64 2
4152 // CK20-NEXT: store ptr null, ptr [[TMP66]], align 8
4153 // CK20-NEXT: [[TMP67:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS10]], i32 0, i32 0
4154 // CK20-NEXT: [[TMP68:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS11]], i32 0, i32 0
4155 // CK20-NEXT: [[TMP69:%.*]] = getelementptr inbounds [3 x i64], ptr [[DOTOFFLOAD_SIZES13]], i32 0, i32 0
4156 // CK20-NEXT: [[TMP70:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 0
4157 // CK20-NEXT: store i32 2, ptr [[TMP70]], align 4
4158 // CK20-NEXT: [[TMP71:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 1
4159 // CK20-NEXT: store i32 3, ptr [[TMP71]], align 4
4160 // CK20-NEXT: [[TMP72:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 2
4161 // CK20-NEXT: store ptr [[TMP67]], ptr [[TMP72]], align 8
4162 // CK20-NEXT: [[TMP73:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 3
4163 // CK20-NEXT: store ptr [[TMP68]], ptr [[TMP73]], align 8
4164 // CK20-NEXT: [[TMP74:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 4
4165 // CK20-NEXT: store ptr [[TMP69]], ptr [[TMP74]], align 8
4166 // CK20-NEXT: [[TMP75:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 5
4167 // CK20-NEXT: store ptr @.offload_maptypes.4, ptr [[TMP75]], align 8
4168 // CK20-NEXT: [[TMP76:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 6
4169 // CK20-NEXT: store ptr null, ptr [[TMP76]], align 8
4170 // CK20-NEXT: [[TMP77:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 7
4171 // CK20-NEXT: store ptr null, ptr [[TMP77]], align 8
4172 // CK20-NEXT: [[TMP78:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 8
4173 // CK20-NEXT: store i64 0, ptr [[TMP78]], align 8
4174 // CK20-NEXT: [[TMP79:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 9
4175 // CK20-NEXT: store i64 0, ptr [[TMP79]], align 8
4176 // CK20-NEXT: [[TMP80:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 10
4177 // CK20-NEXT: store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP80]], align 4
4178 // CK20-NEXT: [[TMP81:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 11
4179 // CK20-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP81]], align 4
4180 // CK20-NEXT: [[TMP82:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 12
4181 // CK20-NEXT: store i32 0, ptr [[TMP82]], align 4
4182 // CK20-NEXT: [[TMP83:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1]], i64 -1, i32 -1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l125.region_id, ptr [[KERNEL_ARGS14]])
4183 // CK20-NEXT: [[TMP84:%.*]] = icmp ne i32 [[TMP83]], 0
4184 // CK20-NEXT: br i1 [[TMP84]], label [[OMP_OFFLOAD_FAILED15:%.*]], label [[OMP_OFFLOAD_CONT16:%.*]]
4185 // CK20: omp_offload.failed15:
4186 // CK20-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l125(ptr [[THIS1]]) #[[ATTR3]]
4187 // CK20-NEXT: br label [[OMP_OFFLOAD_CONT16]]
4188 // CK20: omp_offload.cont16:
4189 // CK20-NEXT: ret void
4192 // CK20-LABEL: define {{[^@]+}}@_ZN2STIdEC2ERPd
4193 // CK20-SAME: (ptr noundef nonnull align 8 dereferenceable(16) [[THIS:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[B:%.*]]) unnamed_addr #[[ATTR1]] comdat {
4194 // CK20-NEXT: entry:
4195 // CK20-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8
4196 // CK20-NEXT: [[B_ADDR:%.*]] = alloca ptr, align 8
4197 // CK20-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8
4198 // CK20-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 8
4199 // CK20-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8
4200 // CK20-NEXT: [[A:%.*]] = getelementptr inbounds [[STRUCT_ST:%.*]], ptr [[THIS1]], i32 0, i32 0
4201 // CK20-NEXT: store ptr null, ptr [[A]], align 8
4202 // CK20-NEXT: [[B2:%.*]] = getelementptr inbounds [[STRUCT_ST]], ptr [[THIS1]], i32 0, i32 1
4203 // CK20-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 8
4204 // CK20-NEXT: store ptr [[TMP0]], ptr [[B2]], align 8
4205 // CK20-NEXT: ret void
4208 // CK20-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l112
4209 // CK20-SAME: (ptr noundef [[THIS:%.*]]) #[[ATTR2:[0-9]+]] {
4210 // CK20-NEXT: entry:
4211 // CK20-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8
4212 // CK20-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8
4213 // CK20-NEXT: [[TMP0:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8
4214 // CK20-NEXT: [[A:%.*]] = getelementptr inbounds [[STRUCT_ST:%.*]], ptr [[TMP0]], i32 0, i32 0
4215 // CK20-NEXT: [[TMP1:%.*]] = load ptr, ptr [[A]], align 8
4216 // CK20-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds double, ptr [[TMP1]], i32 1
4217 // CK20-NEXT: store ptr [[INCDEC_PTR]], ptr [[A]], align 8
4218 // CK20-NEXT: ret void
4221 // CK20-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l118
4222 // CK20-SAME: (ptr noundef [[THIS:%.*]]) #[[ATTR2]] {
4223 // CK20-NEXT: entry:
4224 // CK20-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8
4225 // CK20-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8
4226 // CK20-NEXT: [[TMP0:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8
4227 // CK20-NEXT: [[B:%.*]] = getelementptr inbounds [[STRUCT_ST:%.*]], ptr [[TMP0]], i32 0, i32 1
4228 // CK20-NEXT: [[TMP1:%.*]] = load ptr, ptr [[B]], align 8
4229 // CK20-NEXT: [[TMP2:%.*]] = load ptr, ptr [[TMP1]], align 8
4230 // CK20-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds double, ptr [[TMP2]], i32 1
4231 // CK20-NEXT: store ptr [[INCDEC_PTR]], ptr [[TMP1]], align 8
4232 // CK20-NEXT: ret void
4235 // CK20-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l125
4236 // CK20-SAME: (ptr noundef [[THIS:%.*]]) #[[ATTR2]] {
4237 // CK20-NEXT: entry:
4238 // CK20-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8
4239 // CK20-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8
4240 // CK20-NEXT: [[TMP0:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8
4241 // CK20-NEXT: [[A:%.*]] = getelementptr inbounds [[STRUCT_ST:%.*]], ptr [[TMP0]], i32 0, i32 0
4242 // CK20-NEXT: [[TMP1:%.*]] = load ptr, ptr [[A]], align 8
4243 // CK20-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds double, ptr [[TMP1]], i32 1
4244 // CK20-NEXT: store ptr [[INCDEC_PTR]], ptr [[A]], align 8
4245 // CK20-NEXT: [[B:%.*]] = getelementptr inbounds [[STRUCT_ST]], ptr [[TMP0]], i32 0, i32 1
4246 // CK20-NEXT: [[TMP2:%.*]] = load ptr, ptr [[B]], align 8
4247 // CK20-NEXT: [[TMP3:%.*]] = load ptr, ptr [[TMP2]], align 8
4248 // CK20-NEXT: [[INCDEC_PTR1:%.*]] = getelementptr inbounds double, ptr [[TMP3]], i32 1
4249 // CK20-NEXT: store ptr [[INCDEC_PTR1]], ptr [[TMP2]], align 8
4250 // CK20-NEXT: ret void
4253 // CK20-LABEL: define {{[^@]+}}@.omp_offloading.requires_reg
4254 // CK20-SAME: () #[[ATTR5:[0-9]+]] {
4255 // CK20-NEXT: entry:
4256 // CK20-NEXT: call void @__tgt_register_requires(i64 1)
4257 // CK20-NEXT: ret void
4260 // CK21-LABEL: define {{[^@]+}}@_Z3barPd
4261 // CK21-SAME: (ptr noundef [[ARG:%.*]]) #[[ATTR0:[0-9]+]] {
4262 // CK21-NEXT: entry:
4263 // CK21-NEXT: [[ARG_ADDR:%.*]] = alloca ptr, align 8
4264 // CK21-NEXT: [[A:%.*]] = alloca [[STRUCT_ST:%.*]], align 8
4265 // CK21-NEXT: store ptr [[ARG]], ptr [[ARG_ADDR]], align 8
4266 // CK21-NEXT: call void @_ZN2STIdEC1ERPd(ptr noundef nonnull align 8 dereferenceable(16) [[A]], ptr noundef nonnull align 8 dereferenceable(8) [[ARG_ADDR]])
4267 // CK21-NEXT: call void @_ZN2STIdE3fooERPd(ptr noundef nonnull align 8 dereferenceable(16) [[A]], ptr noundef nonnull align 8 dereferenceable(8) [[ARG_ADDR]])
4268 // CK21-NEXT: [[TMP0:%.*]] = load ptr, ptr [[ARG_ADDR]], align 8
4269 // CK21-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds double, ptr [[TMP0]], i32 1
4270 // CK21-NEXT: store ptr [[INCDEC_PTR]], ptr [[ARG_ADDR]], align 8
4271 // CK21-NEXT: ret void
4274 // CK21-LABEL: define {{[^@]+}}@_ZN2STIdEC1ERPd
4275 // CK21-SAME: (ptr noundef nonnull align 8 dereferenceable(16) [[THIS:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[B:%.*]]) unnamed_addr #[[ATTR1:[0-9]+]] comdat {
4276 // CK21-NEXT: entry:
4277 // CK21-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8
4278 // CK21-NEXT: [[B_ADDR:%.*]] = alloca ptr, align 8
4279 // CK21-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8
4280 // CK21-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 8
4281 // CK21-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8
4282 // CK21-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 8
4283 // CK21-NEXT: call void @_ZN2STIdEC2ERPd(ptr noundef nonnull align 8 dereferenceable(16) [[THIS1]], ptr noundef nonnull align 8 dereferenceable(8) [[TMP0]])
4284 // CK21-NEXT: ret void
4287 // CK21-LABEL: define {{[^@]+}}@_ZN2STIdE3fooERPd
4288 // CK21-SAME: (ptr noundef nonnull align 8 dereferenceable(16) [[THIS:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[ARG:%.*]]) #[[ATTR0]] comdat {
4289 // CK21-NEXT: entry:
4290 // CK21-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8
4291 // CK21-NEXT: [[ARG_ADDR:%.*]] = alloca ptr, align 8
4292 // CK21-NEXT: [[LA:%.*]] = alloca ptr, align 8
4293 // CK21-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 8
4294 // CK21-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 8
4295 // CK21-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 8
4296 // CK21-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8
4297 // CK21-NEXT: [[DOTOFFLOAD_BASEPTRS2:%.*]] = alloca [2 x ptr], align 8
4298 // CK21-NEXT: [[DOTOFFLOAD_PTRS3:%.*]] = alloca [2 x ptr], align 8
4299 // CK21-NEXT: [[DOTOFFLOAD_MAPPERS4:%.*]] = alloca [2 x ptr], align 8
4300 // CK21-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [2 x i64], align 8
4301 // CK21-NEXT: [[KERNEL_ARGS5:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
4302 // CK21-NEXT: [[DOTOFFLOAD_BASEPTRS10:%.*]] = alloca [3 x ptr], align 8
4303 // CK21-NEXT: [[DOTOFFLOAD_PTRS11:%.*]] = alloca [3 x ptr], align 8
4304 // CK21-NEXT: [[DOTOFFLOAD_MAPPERS12:%.*]] = alloca [3 x ptr], align 8
4305 // CK21-NEXT: [[DOTOFFLOAD_SIZES13:%.*]] = alloca [3 x i64], align 8
4306 // CK21-NEXT: [[KERNEL_ARGS14:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
4307 // CK21-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8
4308 // CK21-NEXT: store ptr [[ARG]], ptr [[ARG_ADDR]], align 8
4309 // CK21-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8
4310 // CK21-NEXT: store ptr null, ptr [[LA]], align 8
4311 // CK21-NEXT: [[A:%.*]] = getelementptr inbounds [[STRUCT_ST:%.*]], ptr [[THIS1]], i32 0, i32 0
4312 // CK21-NEXT: [[TMP0:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
4313 // CK21-NEXT: store ptr [[THIS1]], ptr [[TMP0]], align 8
4314 // CK21-NEXT: [[TMP1:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0
4315 // CK21-NEXT: store ptr [[A]], ptr [[TMP1]], align 8
4316 // CK21-NEXT: [[TMP2:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
4317 // CK21-NEXT: store ptr null, ptr [[TMP2]], align 8
4318 // CK21-NEXT: [[TMP3:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
4319 // CK21-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0
4320 // CK21-NEXT: [[TMP5:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0
4321 // CK21-NEXT: store i32 2, ptr [[TMP5]], align 4
4322 // CK21-NEXT: [[TMP6:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1
4323 // CK21-NEXT: store i32 1, ptr [[TMP6]], align 4
4324 // CK21-NEXT: [[TMP7:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2
4325 // CK21-NEXT: store ptr [[TMP3]], ptr [[TMP7]], align 8
4326 // CK21-NEXT: [[TMP8:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3
4327 // CK21-NEXT: store ptr [[TMP4]], ptr [[TMP8]], align 8
4328 // CK21-NEXT: [[TMP9:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4
4329 // CK21-NEXT: store ptr @.offload_sizes, ptr [[TMP9]], align 8
4330 // CK21-NEXT: [[TMP10:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5
4331 // CK21-NEXT: store ptr @.offload_maptypes, ptr [[TMP10]], align 8
4332 // CK21-NEXT: [[TMP11:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6
4333 // CK21-NEXT: store ptr null, ptr [[TMP11]], align 8
4334 // CK21-NEXT: [[TMP12:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7
4335 // CK21-NEXT: store ptr null, ptr [[TMP12]], align 8
4336 // CK21-NEXT: [[TMP13:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8
4337 // CK21-NEXT: store i64 0, ptr [[TMP13]], align 8
4338 // CK21-NEXT: [[TMP14:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9
4339 // CK21-NEXT: store i64 0, ptr [[TMP14]], align 8
4340 // CK21-NEXT: [[TMP15:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10
4341 // CK21-NEXT: store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP15]], align 4
4342 // CK21-NEXT: [[TMP16:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11
4343 // CK21-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP16]], align 4
4344 // CK21-NEXT: [[TMP17:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12
4345 // CK21-NEXT: store i32 0, ptr [[TMP17]], align 4
4346 // CK21-NEXT: [[TMP18:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1:[0-9]+]], i64 -1, i32 -1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l112.region_id, ptr [[KERNEL_ARGS]])
4347 // CK21-NEXT: [[TMP19:%.*]] = icmp ne i32 [[TMP18]], 0
4348 // CK21-NEXT: br i1 [[TMP19]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
4349 // CK21: omp_offload.failed:
4350 // CK21-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l112(ptr [[THIS1]]) #[[ATTR3:[0-9]+]]
4351 // CK21-NEXT: br label [[OMP_OFFLOAD_CONT]]
4352 // CK21: omp_offload.cont:
4353 // CK21-NEXT: [[B:%.*]] = getelementptr inbounds [[STRUCT_ST]], ptr [[THIS1]], i32 0, i32 1
4354 // CK21-NEXT: [[TMP20:%.*]] = load ptr, ptr [[B]], align 8
4355 // CK21-NEXT: [[TMP21:%.*]] = getelementptr ptr, ptr [[B]], i32 1
4356 // CK21-NEXT: [[TMP22:%.*]] = ptrtoint ptr [[TMP21]] to i64
4357 // CK21-NEXT: [[TMP23:%.*]] = ptrtoint ptr [[B]] to i64
4358 // CK21-NEXT: [[TMP24:%.*]] = sub i64 [[TMP22]], [[TMP23]]
4359 // CK21-NEXT: [[TMP25:%.*]] = sdiv exact i64 [[TMP24]], ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)
4360 // CK21-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[DOTOFFLOAD_SIZES]], ptr align 8 @.offload_sizes.1, i64 16, i1 false)
4361 // CK21-NEXT: [[TMP26:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS2]], i32 0, i32 0
4362 // CK21-NEXT: store ptr [[THIS1]], ptr [[TMP26]], align 8
4363 // CK21-NEXT: [[TMP27:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS3]], i32 0, i32 0
4364 // CK21-NEXT: store ptr [[B]], ptr [[TMP27]], align 8
4365 // CK21-NEXT: [[TMP28:%.*]] = getelementptr inbounds [2 x i64], ptr [[DOTOFFLOAD_SIZES]], i32 0, i32 0
4366 // CK21-NEXT: store i64 [[TMP25]], ptr [[TMP28]], align 8
4367 // CK21-NEXT: [[TMP29:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_MAPPERS4]], i64 0, i64 0
4368 // CK21-NEXT: store ptr null, ptr [[TMP29]], align 8
4369 // CK21-NEXT: [[TMP30:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS2]], i32 0, i32 1
4370 // CK21-NEXT: store ptr [[THIS1]], ptr [[TMP30]], align 8
4371 // CK21-NEXT: [[TMP31:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS3]], i32 0, i32 1
4372 // CK21-NEXT: store ptr [[TMP20]], ptr [[TMP31]], align 8
4373 // CK21-NEXT: [[TMP32:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_MAPPERS4]], i64 0, i64 1
4374 // CK21-NEXT: store ptr null, ptr [[TMP32]], align 8
4375 // CK21-NEXT: [[TMP33:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS2]], i32 0, i32 0
4376 // CK21-NEXT: [[TMP34:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS3]], i32 0, i32 0
4377 // CK21-NEXT: [[TMP35:%.*]] = getelementptr inbounds [2 x i64], ptr [[DOTOFFLOAD_SIZES]], i32 0, i32 0
4378 // CK21-NEXT: [[TMP36:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 0
4379 // CK21-NEXT: store i32 2, ptr [[TMP36]], align 4
4380 // CK21-NEXT: [[TMP37:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 1
4381 // CK21-NEXT: store i32 2, ptr [[TMP37]], align 4
4382 // CK21-NEXT: [[TMP38:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 2
4383 // CK21-NEXT: store ptr [[TMP33]], ptr [[TMP38]], align 8
4384 // CK21-NEXT: [[TMP39:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 3
4385 // CK21-NEXT: store ptr [[TMP34]], ptr [[TMP39]], align 8
4386 // CK21-NEXT: [[TMP40:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 4
4387 // CK21-NEXT: store ptr [[TMP35]], ptr [[TMP40]], align 8
4388 // CK21-NEXT: [[TMP41:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 5
4389 // CK21-NEXT: store ptr @.offload_maptypes.2, ptr [[TMP41]], align 8
4390 // CK21-NEXT: [[TMP42:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 6
4391 // CK21-NEXT: store ptr null, ptr [[TMP42]], align 8
4392 // CK21-NEXT: [[TMP43:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 7
4393 // CK21-NEXT: store ptr null, ptr [[TMP43]], align 8
4394 // CK21-NEXT: [[TMP44:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 8
4395 // CK21-NEXT: store i64 0, ptr [[TMP44]], align 8
4396 // CK21-NEXT: [[TMP45:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 9
4397 // CK21-NEXT: store i64 0, ptr [[TMP45]], align 8
4398 // CK21-NEXT: [[TMP46:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 10
4399 // CK21-NEXT: store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP46]], align 4
4400 // CK21-NEXT: [[TMP47:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 11
4401 // CK21-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP47]], align 4
4402 // CK21-NEXT: [[TMP48:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 12
4403 // CK21-NEXT: store i32 0, ptr [[TMP48]], align 4
4404 // CK21-NEXT: [[TMP49:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1]], i64 -1, i32 -1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l118.region_id, ptr [[KERNEL_ARGS5]])
4405 // CK21-NEXT: [[TMP50:%.*]] = icmp ne i32 [[TMP49]], 0
4406 // CK21-NEXT: br i1 [[TMP50]], label [[OMP_OFFLOAD_FAILED6:%.*]], label [[OMP_OFFLOAD_CONT7:%.*]]
4407 // CK21: omp_offload.failed6:
4408 // CK21-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l118(ptr [[THIS1]]) #[[ATTR3]]
4409 // CK21-NEXT: br label [[OMP_OFFLOAD_CONT7]]
4410 // CK21: omp_offload.cont7:
4411 // CK21-NEXT: [[A8:%.*]] = getelementptr inbounds [[STRUCT_ST]], ptr [[THIS1]], i32 0, i32 0
4412 // CK21-NEXT: [[B9:%.*]] = getelementptr inbounds [[STRUCT_ST]], ptr [[THIS1]], i32 0, i32 1
4413 // CK21-NEXT: [[TMP51:%.*]] = load ptr, ptr [[B9]], align 8
4414 // CK21-NEXT: [[TMP52:%.*]] = getelementptr ptr, ptr [[B9]], i32 1
4415 // CK21-NEXT: [[TMP53:%.*]] = ptrtoint ptr [[TMP52]] to i64
4416 // CK21-NEXT: [[TMP54:%.*]] = ptrtoint ptr [[A8]] to i64
4417 // CK21-NEXT: [[TMP55:%.*]] = sub i64 [[TMP53]], [[TMP54]]
4418 // CK21-NEXT: [[TMP56:%.*]] = sdiv exact i64 [[TMP55]], ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)
4419 // CK21-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[DOTOFFLOAD_SIZES13]], ptr align 8 @.offload_sizes.3, i64 24, i1 false)
4420 // CK21-NEXT: [[TMP57:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS10]], i32 0, i32 0
4421 // CK21-NEXT: store ptr [[THIS1]], ptr [[TMP57]], align 8
4422 // CK21-NEXT: [[TMP58:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS11]], i32 0, i32 0
4423 // CK21-NEXT: store ptr [[A8]], ptr [[TMP58]], align 8
4424 // CK21-NEXT: [[TMP59:%.*]] = getelementptr inbounds [3 x i64], ptr [[DOTOFFLOAD_SIZES13]], i32 0, i32 0
4425 // CK21-NEXT: store i64 [[TMP56]], ptr [[TMP59]], align 8
4426 // CK21-NEXT: [[TMP60:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS12]], i64 0, i64 0
4427 // CK21-NEXT: store ptr null, ptr [[TMP60]], align 8
4428 // CK21-NEXT: [[TMP61:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS10]], i32 0, i32 1
4429 // CK21-NEXT: store ptr [[THIS1]], ptr [[TMP61]], align 8
4430 // CK21-NEXT: [[TMP62:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS11]], i32 0, i32 1
4431 // CK21-NEXT: store ptr [[A8]], ptr [[TMP62]], align 8
4432 // CK21-NEXT: [[TMP63:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS12]], i64 0, i64 1
4433 // CK21-NEXT: store ptr null, ptr [[TMP63]], align 8
4434 // CK21-NEXT: [[TMP64:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS10]], i32 0, i32 2
4435 // CK21-NEXT: store ptr [[THIS1]], ptr [[TMP64]], align 8
4436 // CK21-NEXT: [[TMP65:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS11]], i32 0, i32 2
4437 // CK21-NEXT: store ptr [[TMP51]], ptr [[TMP65]], align 8
4438 // CK21-NEXT: [[TMP66:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS12]], i64 0, i64 2
4439 // CK21-NEXT: store ptr null, ptr [[TMP66]], align 8
4440 // CK21-NEXT: [[TMP67:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS10]], i32 0, i32 0
4441 // CK21-NEXT: [[TMP68:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS11]], i32 0, i32 0
4442 // CK21-NEXT: [[TMP69:%.*]] = getelementptr inbounds [3 x i64], ptr [[DOTOFFLOAD_SIZES13]], i32 0, i32 0
4443 // CK21-NEXT: [[TMP70:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 0
4444 // CK21-NEXT: store i32 2, ptr [[TMP70]], align 4
4445 // CK21-NEXT: [[TMP71:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 1
4446 // CK21-NEXT: store i32 3, ptr [[TMP71]], align 4
4447 // CK21-NEXT: [[TMP72:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 2
4448 // CK21-NEXT: store ptr [[TMP67]], ptr [[TMP72]], align 8
4449 // CK21-NEXT: [[TMP73:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 3
4450 // CK21-NEXT: store ptr [[TMP68]], ptr [[TMP73]], align 8
4451 // CK21-NEXT: [[TMP74:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 4
4452 // CK21-NEXT: store ptr [[TMP69]], ptr [[TMP74]], align 8
4453 // CK21-NEXT: [[TMP75:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 5
4454 // CK21-NEXT: store ptr @.offload_maptypes.4, ptr [[TMP75]], align 8
4455 // CK21-NEXT: [[TMP76:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 6
4456 // CK21-NEXT: store ptr null, ptr [[TMP76]], align 8
4457 // CK21-NEXT: [[TMP77:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 7
4458 // CK21-NEXT: store ptr null, ptr [[TMP77]], align 8
4459 // CK21-NEXT: [[TMP78:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 8
4460 // CK21-NEXT: store i64 0, ptr [[TMP78]], align 8
4461 // CK21-NEXT: [[TMP79:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 9
4462 // CK21-NEXT: store i64 0, ptr [[TMP79]], align 8
4463 // CK21-NEXT: [[TMP80:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 10
4464 // CK21-NEXT: store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP80]], align 4
4465 // CK21-NEXT: [[TMP81:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 11
4466 // CK21-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP81]], align 4
4467 // CK21-NEXT: [[TMP82:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 12
4468 // CK21-NEXT: store i32 0, ptr [[TMP82]], align 4
4469 // CK21-NEXT: [[TMP83:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1]], i64 -1, i32 -1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l125.region_id, ptr [[KERNEL_ARGS14]])
4470 // CK21-NEXT: [[TMP84:%.*]] = icmp ne i32 [[TMP83]], 0
4471 // CK21-NEXT: br i1 [[TMP84]], label [[OMP_OFFLOAD_FAILED15:%.*]], label [[OMP_OFFLOAD_CONT16:%.*]]
4472 // CK21: omp_offload.failed15:
4473 // CK21-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l125(ptr [[THIS1]]) #[[ATTR3]]
4474 // CK21-NEXT: br label [[OMP_OFFLOAD_CONT16]]
4475 // CK21: omp_offload.cont16:
4476 // CK21-NEXT: ret void
4479 // CK21-LABEL: define {{[^@]+}}@_ZN2STIdEC2ERPd
4480 // CK21-SAME: (ptr noundef nonnull align 8 dereferenceable(16) [[THIS:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[B:%.*]]) unnamed_addr #[[ATTR1]] comdat {
4481 // CK21-NEXT: entry:
4482 // CK21-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8
4483 // CK21-NEXT: [[B_ADDR:%.*]] = alloca ptr, align 8
4484 // CK21-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8
4485 // CK21-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 8
4486 // CK21-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8
4487 // CK21-NEXT: [[A:%.*]] = getelementptr inbounds [[STRUCT_ST:%.*]], ptr [[THIS1]], i32 0, i32 0
4488 // CK21-NEXT: store ptr null, ptr [[A]], align 8
4489 // CK21-NEXT: [[B2:%.*]] = getelementptr inbounds [[STRUCT_ST]], ptr [[THIS1]], i32 0, i32 1
4490 // CK21-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 8
4491 // CK21-NEXT: store ptr [[TMP0]], ptr [[B2]], align 8
4492 // CK21-NEXT: ret void
4495 // CK21-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l112
4496 // CK21-SAME: (ptr noundef [[THIS:%.*]]) #[[ATTR2:[0-9]+]] {
4497 // CK21-NEXT: entry:
4498 // CK21-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8
4499 // CK21-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8
4500 // CK21-NEXT: [[TMP0:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8
4501 // CK21-NEXT: [[A:%.*]] = getelementptr inbounds [[STRUCT_ST:%.*]], ptr [[TMP0]], i32 0, i32 0
4502 // CK21-NEXT: [[TMP1:%.*]] = load ptr, ptr [[A]], align 8
4503 // CK21-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds double, ptr [[TMP1]], i32 1
4504 // CK21-NEXT: store ptr [[INCDEC_PTR]], ptr [[A]], align 8
4505 // CK21-NEXT: ret void
4508 // CK21-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l118
4509 // CK21-SAME: (ptr noundef [[THIS:%.*]]) #[[ATTR2]] {
4510 // CK21-NEXT: entry:
4511 // CK21-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8
4512 // CK21-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8
4513 // CK21-NEXT: [[TMP0:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8
4514 // CK21-NEXT: [[B:%.*]] = getelementptr inbounds [[STRUCT_ST:%.*]], ptr [[TMP0]], i32 0, i32 1
4515 // CK21-NEXT: [[TMP1:%.*]] = load ptr, ptr [[B]], align 8
4516 // CK21-NEXT: [[TMP2:%.*]] = load ptr, ptr [[TMP1]], align 8
4517 // CK21-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds double, ptr [[TMP2]], i32 1
4518 // CK21-NEXT: store ptr [[INCDEC_PTR]], ptr [[TMP1]], align 8
4519 // CK21-NEXT: ret void
4522 // CK21-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l125
4523 // CK21-SAME: (ptr noundef [[THIS:%.*]]) #[[ATTR2]] {
4524 // CK21-NEXT: entry:
4525 // CK21-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8
4526 // CK21-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8
4527 // CK21-NEXT: [[TMP0:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8
4528 // CK21-NEXT: [[A:%.*]] = getelementptr inbounds [[STRUCT_ST:%.*]], ptr [[TMP0]], i32 0, i32 0
4529 // CK21-NEXT: [[TMP1:%.*]] = load ptr, ptr [[A]], align 8
4530 // CK21-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds double, ptr [[TMP1]], i32 1
4531 // CK21-NEXT: store ptr [[INCDEC_PTR]], ptr [[A]], align 8
4532 // CK21-NEXT: [[B:%.*]] = getelementptr inbounds [[STRUCT_ST]], ptr [[TMP0]], i32 0, i32 1
4533 // CK21-NEXT: [[TMP2:%.*]] = load ptr, ptr [[B]], align 8
4534 // CK21-NEXT: [[TMP3:%.*]] = load ptr, ptr [[TMP2]], align 8
4535 // CK21-NEXT: [[INCDEC_PTR1:%.*]] = getelementptr inbounds double, ptr [[TMP3]], i32 1
4536 // CK21-NEXT: store ptr [[INCDEC_PTR1]], ptr [[TMP2]], align 8
4537 // CK21-NEXT: ret void
4540 // CK21-LABEL: define {{[^@]+}}@.omp_offloading.requires_reg
4541 // CK21-SAME: () #[[ATTR5:[0-9]+]] {
4542 // CK21-NEXT: entry:
4543 // CK21-NEXT: call void @__tgt_register_requires(i64 1)
4544 // CK21-NEXT: ret void
4547 // CK22-LABEL: define {{[^@]+}}@_Z3barPd
4548 // CK22-SAME: (ptr noundef [[ARG:%.*]]) #[[ATTR0:[0-9]+]] {
4549 // CK22-NEXT: entry:
4550 // CK22-NEXT: [[ARG_ADDR:%.*]] = alloca ptr, align 4
4551 // CK22-NEXT: [[A:%.*]] = alloca [[STRUCT_ST:%.*]], align 4
4552 // CK22-NEXT: store ptr [[ARG]], ptr [[ARG_ADDR]], align 4
4553 // CK22-NEXT: call void @_ZN2STIdEC1ERPd(ptr noundef nonnull align 4 dereferenceable(8) [[A]], ptr noundef nonnull align 4 dereferenceable(4) [[ARG_ADDR]])
4554 // CK22-NEXT: call void @_ZN2STIdE3fooERPd(ptr noundef nonnull align 4 dereferenceable(8) [[A]], ptr noundef nonnull align 4 dereferenceable(4) [[ARG_ADDR]])
4555 // CK22-NEXT: [[TMP0:%.*]] = load ptr, ptr [[ARG_ADDR]], align 4
4556 // CK22-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds double, ptr [[TMP0]], i32 1
4557 // CK22-NEXT: store ptr [[INCDEC_PTR]], ptr [[ARG_ADDR]], align 4
4558 // CK22-NEXT: ret void
4561 // CK22-LABEL: define {{[^@]+}}@_ZN2STIdEC1ERPd
4562 // CK22-SAME: (ptr noundef nonnull align 4 dereferenceable(8) [[THIS:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[B:%.*]]) unnamed_addr #[[ATTR1:[0-9]+]] comdat align 2 {
4563 // CK22-NEXT: entry:
4564 // CK22-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4
4565 // CK22-NEXT: [[B_ADDR:%.*]] = alloca ptr, align 4
4566 // CK22-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4
4567 // CK22-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 4
4568 // CK22-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4
4569 // CK22-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 4
4570 // CK22-NEXT: call void @_ZN2STIdEC2ERPd(ptr noundef nonnull align 4 dereferenceable(8) [[THIS1]], ptr noundef nonnull align 4 dereferenceable(4) [[TMP0]])
4571 // CK22-NEXT: ret void
4574 // CK22-LABEL: define {{[^@]+}}@_ZN2STIdE3fooERPd
4575 // CK22-SAME: (ptr noundef nonnull align 4 dereferenceable(8) [[THIS:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[ARG:%.*]]) #[[ATTR0]] comdat align 2 {
4576 // CK22-NEXT: entry:
4577 // CK22-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4
4578 // CK22-NEXT: [[ARG_ADDR:%.*]] = alloca ptr, align 4
4579 // CK22-NEXT: [[LA:%.*]] = alloca ptr, align 4
4580 // CK22-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 4
4581 // CK22-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 4
4582 // CK22-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 4
4583 // CK22-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8
4584 // CK22-NEXT: [[DOTOFFLOAD_BASEPTRS2:%.*]] = alloca [2 x ptr], align 4
4585 // CK22-NEXT: [[DOTOFFLOAD_PTRS3:%.*]] = alloca [2 x ptr], align 4
4586 // CK22-NEXT: [[DOTOFFLOAD_MAPPERS4:%.*]] = alloca [2 x ptr], align 4
4587 // CK22-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [2 x i64], align 4
4588 // CK22-NEXT: [[KERNEL_ARGS5:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
4589 // CK22-NEXT: [[DOTOFFLOAD_BASEPTRS10:%.*]] = alloca [3 x ptr], align 4
4590 // CK22-NEXT: [[DOTOFFLOAD_PTRS11:%.*]] = alloca [3 x ptr], align 4
4591 // CK22-NEXT: [[DOTOFFLOAD_MAPPERS12:%.*]] = alloca [3 x ptr], align 4
4592 // CK22-NEXT: [[DOTOFFLOAD_SIZES13:%.*]] = alloca [3 x i64], align 4
4593 // CK22-NEXT: [[KERNEL_ARGS14:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
4594 // CK22-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4
4595 // CK22-NEXT: store ptr [[ARG]], ptr [[ARG_ADDR]], align 4
4596 // CK22-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4
4597 // CK22-NEXT: store ptr null, ptr [[LA]], align 4
4598 // CK22-NEXT: [[A:%.*]] = getelementptr inbounds [[STRUCT_ST:%.*]], ptr [[THIS1]], i32 0, i32 0
4599 // CK22-NEXT: [[TMP0:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
4600 // CK22-NEXT: store ptr [[THIS1]], ptr [[TMP0]], align 4
4601 // CK22-NEXT: [[TMP1:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0
4602 // CK22-NEXT: store ptr [[A]], ptr [[TMP1]], align 4
4603 // CK22-NEXT: [[TMP2:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
4604 // CK22-NEXT: store ptr null, ptr [[TMP2]], align 4
4605 // CK22-NEXT: [[TMP3:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
4606 // CK22-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0
4607 // CK22-NEXT: [[TMP5:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0
4608 // CK22-NEXT: store i32 2, ptr [[TMP5]], align 4
4609 // CK22-NEXT: [[TMP6:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1
4610 // CK22-NEXT: store i32 1, ptr [[TMP6]], align 4
4611 // CK22-NEXT: [[TMP7:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2
4612 // CK22-NEXT: store ptr [[TMP3]], ptr [[TMP7]], align 4
4613 // CK22-NEXT: [[TMP8:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3
4614 // CK22-NEXT: store ptr [[TMP4]], ptr [[TMP8]], align 4
4615 // CK22-NEXT: [[TMP9:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4
4616 // CK22-NEXT: store ptr @.offload_sizes, ptr [[TMP9]], align 4
4617 // CK22-NEXT: [[TMP10:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5
4618 // CK22-NEXT: store ptr @.offload_maptypes, ptr [[TMP10]], align 4
4619 // CK22-NEXT: [[TMP11:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6
4620 // CK22-NEXT: store ptr null, ptr [[TMP11]], align 4
4621 // CK22-NEXT: [[TMP12:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7
4622 // CK22-NEXT: store ptr null, ptr [[TMP12]], align 4
4623 // CK22-NEXT: [[TMP13:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8
4624 // CK22-NEXT: store i64 0, ptr [[TMP13]], align 8
4625 // CK22-NEXT: [[TMP14:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9
4626 // CK22-NEXT: store i64 0, ptr [[TMP14]], align 8
4627 // CK22-NEXT: [[TMP15:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10
4628 // CK22-NEXT: store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP15]], align 4
4629 // CK22-NEXT: [[TMP16:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11
4630 // CK22-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP16]], align 4
4631 // CK22-NEXT: [[TMP17:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12
4632 // CK22-NEXT: store i32 0, ptr [[TMP17]], align 4
4633 // CK22-NEXT: [[TMP18:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1:[0-9]+]], i64 -1, i32 -1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l112.region_id, ptr [[KERNEL_ARGS]])
4634 // CK22-NEXT: [[TMP19:%.*]] = icmp ne i32 [[TMP18]], 0
4635 // CK22-NEXT: br i1 [[TMP19]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
4636 // CK22: omp_offload.failed:
4637 // CK22-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l112(ptr [[THIS1]]) #[[ATTR3:[0-9]+]]
4638 // CK22-NEXT: br label [[OMP_OFFLOAD_CONT]]
4639 // CK22: omp_offload.cont:
4640 // CK22-NEXT: [[B:%.*]] = getelementptr inbounds [[STRUCT_ST]], ptr [[THIS1]], i32 0, i32 1
4641 // CK22-NEXT: [[TMP20:%.*]] = load ptr, ptr [[B]], align 4
4642 // CK22-NEXT: [[TMP21:%.*]] = getelementptr ptr, ptr [[B]], i32 1
4643 // CK22-NEXT: [[TMP22:%.*]] = ptrtoint ptr [[TMP21]] to i64
4644 // CK22-NEXT: [[TMP23:%.*]] = ptrtoint ptr [[B]] to i64
4645 // CK22-NEXT: [[TMP24:%.*]] = sub i64 [[TMP22]], [[TMP23]]
4646 // CK22-NEXT: [[TMP25:%.*]] = sdiv exact i64 [[TMP24]], ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)
4647 // CK22-NEXT: call void @llvm.memcpy.p0.p0.i32(ptr align 4 [[DOTOFFLOAD_SIZES]], ptr align 4 @.offload_sizes.1, i32 16, i1 false)
4648 // CK22-NEXT: [[TMP26:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS2]], i32 0, i32 0
4649 // CK22-NEXT: store ptr [[THIS1]], ptr [[TMP26]], align 4
4650 // CK22-NEXT: [[TMP27:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS3]], i32 0, i32 0
4651 // CK22-NEXT: store ptr [[B]], ptr [[TMP27]], align 4
4652 // CK22-NEXT: [[TMP28:%.*]] = getelementptr inbounds [2 x i64], ptr [[DOTOFFLOAD_SIZES]], i32 0, i32 0
4653 // CK22-NEXT: store i64 [[TMP25]], ptr [[TMP28]], align 4
4654 // CK22-NEXT: [[TMP29:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_MAPPERS4]], i32 0, i32 0
4655 // CK22-NEXT: store ptr null, ptr [[TMP29]], align 4
4656 // CK22-NEXT: [[TMP30:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS2]], i32 0, i32 1
4657 // CK22-NEXT: store ptr [[THIS1]], ptr [[TMP30]], align 4
4658 // CK22-NEXT: [[TMP31:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS3]], i32 0, i32 1
4659 // CK22-NEXT: store ptr [[TMP20]], ptr [[TMP31]], align 4
4660 // CK22-NEXT: [[TMP32:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_MAPPERS4]], i32 0, i32 1
4661 // CK22-NEXT: store ptr null, ptr [[TMP32]], align 4
4662 // CK22-NEXT: [[TMP33:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS2]], i32 0, i32 0
4663 // CK22-NEXT: [[TMP34:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS3]], i32 0, i32 0
4664 // CK22-NEXT: [[TMP35:%.*]] = getelementptr inbounds [2 x i64], ptr [[DOTOFFLOAD_SIZES]], i32 0, i32 0
4665 // CK22-NEXT: [[TMP36:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 0
4666 // CK22-NEXT: store i32 2, ptr [[TMP36]], align 4
4667 // CK22-NEXT: [[TMP37:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 1
4668 // CK22-NEXT: store i32 2, ptr [[TMP37]], align 4
4669 // CK22-NEXT: [[TMP38:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 2
4670 // CK22-NEXT: store ptr [[TMP33]], ptr [[TMP38]], align 4
4671 // CK22-NEXT: [[TMP39:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 3
4672 // CK22-NEXT: store ptr [[TMP34]], ptr [[TMP39]], align 4
4673 // CK22-NEXT: [[TMP40:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 4
4674 // CK22-NEXT: store ptr [[TMP35]], ptr [[TMP40]], align 4
4675 // CK22-NEXT: [[TMP41:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 5
4676 // CK22-NEXT: store ptr @.offload_maptypes.2, ptr [[TMP41]], align 4
4677 // CK22-NEXT: [[TMP42:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 6
4678 // CK22-NEXT: store ptr null, ptr [[TMP42]], align 4
4679 // CK22-NEXT: [[TMP43:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 7
4680 // CK22-NEXT: store ptr null, ptr [[TMP43]], align 4
4681 // CK22-NEXT: [[TMP44:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 8
4682 // CK22-NEXT: store i64 0, ptr [[TMP44]], align 8
4683 // CK22-NEXT: [[TMP45:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 9
4684 // CK22-NEXT: store i64 0, ptr [[TMP45]], align 8
4685 // CK22-NEXT: [[TMP46:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 10
4686 // CK22-NEXT: store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP46]], align 4
4687 // CK22-NEXT: [[TMP47:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 11
4688 // CK22-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP47]], align 4
4689 // CK22-NEXT: [[TMP48:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 12
4690 // CK22-NEXT: store i32 0, ptr [[TMP48]], align 4
4691 // CK22-NEXT: [[TMP49:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1]], i64 -1, i32 -1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l118.region_id, ptr [[KERNEL_ARGS5]])
4692 // CK22-NEXT: [[TMP50:%.*]] = icmp ne i32 [[TMP49]], 0
4693 // CK22-NEXT: br i1 [[TMP50]], label [[OMP_OFFLOAD_FAILED6:%.*]], label [[OMP_OFFLOAD_CONT7:%.*]]
4694 // CK22: omp_offload.failed6:
4695 // CK22-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l118(ptr [[THIS1]]) #[[ATTR3]]
4696 // CK22-NEXT: br label [[OMP_OFFLOAD_CONT7]]
4697 // CK22: omp_offload.cont7:
4698 // CK22-NEXT: [[A8:%.*]] = getelementptr inbounds [[STRUCT_ST]], ptr [[THIS1]], i32 0, i32 0
4699 // CK22-NEXT: [[B9:%.*]] = getelementptr inbounds [[STRUCT_ST]], ptr [[THIS1]], i32 0, i32 1
4700 // CK22-NEXT: [[TMP51:%.*]] = load ptr, ptr [[B9]], align 4
4701 // CK22-NEXT: [[TMP52:%.*]] = getelementptr ptr, ptr [[B9]], i32 1
4702 // CK22-NEXT: [[TMP53:%.*]] = ptrtoint ptr [[TMP52]] to i64
4703 // CK22-NEXT: [[TMP54:%.*]] = ptrtoint ptr [[A8]] to i64
4704 // CK22-NEXT: [[TMP55:%.*]] = sub i64 [[TMP53]], [[TMP54]]
4705 // CK22-NEXT: [[TMP56:%.*]] = sdiv exact i64 [[TMP55]], ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)
4706 // CK22-NEXT: call void @llvm.memcpy.p0.p0.i32(ptr align 4 [[DOTOFFLOAD_SIZES13]], ptr align 4 @.offload_sizes.3, i32 24, i1 false)
4707 // CK22-NEXT: [[TMP57:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS10]], i32 0, i32 0
4708 // CK22-NEXT: store ptr [[THIS1]], ptr [[TMP57]], align 4
4709 // CK22-NEXT: [[TMP58:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS11]], i32 0, i32 0
4710 // CK22-NEXT: store ptr [[A8]], ptr [[TMP58]], align 4
4711 // CK22-NEXT: [[TMP59:%.*]] = getelementptr inbounds [3 x i64], ptr [[DOTOFFLOAD_SIZES13]], i32 0, i32 0
4712 // CK22-NEXT: store i64 [[TMP56]], ptr [[TMP59]], align 4
4713 // CK22-NEXT: [[TMP60:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS12]], i32 0, i32 0
4714 // CK22-NEXT: store ptr null, ptr [[TMP60]], align 4
4715 // CK22-NEXT: [[TMP61:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS10]], i32 0, i32 1
4716 // CK22-NEXT: store ptr [[THIS1]], ptr [[TMP61]], align 4
4717 // CK22-NEXT: [[TMP62:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS11]], i32 0, i32 1
4718 // CK22-NEXT: store ptr [[A8]], ptr [[TMP62]], align 4
4719 // CK22-NEXT: [[TMP63:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS12]], i32 0, i32 1
4720 // CK22-NEXT: store ptr null, ptr [[TMP63]], align 4
4721 // CK22-NEXT: [[TMP64:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS10]], i32 0, i32 2
4722 // CK22-NEXT: store ptr [[THIS1]], ptr [[TMP64]], align 4
4723 // CK22-NEXT: [[TMP65:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS11]], i32 0, i32 2
4724 // CK22-NEXT: store ptr [[TMP51]], ptr [[TMP65]], align 4
4725 // CK22-NEXT: [[TMP66:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS12]], i32 0, i32 2
4726 // CK22-NEXT: store ptr null, ptr [[TMP66]], align 4
4727 // CK22-NEXT: [[TMP67:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS10]], i32 0, i32 0
4728 // CK22-NEXT: [[TMP68:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS11]], i32 0, i32 0
4729 // CK22-NEXT: [[TMP69:%.*]] = getelementptr inbounds [3 x i64], ptr [[DOTOFFLOAD_SIZES13]], i32 0, i32 0
4730 // CK22-NEXT: [[TMP70:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 0
4731 // CK22-NEXT: store i32 2, ptr [[TMP70]], align 4
4732 // CK22-NEXT: [[TMP71:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 1
4733 // CK22-NEXT: store i32 3, ptr [[TMP71]], align 4
4734 // CK22-NEXT: [[TMP72:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 2
4735 // CK22-NEXT: store ptr [[TMP67]], ptr [[TMP72]], align 4
4736 // CK22-NEXT: [[TMP73:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 3
4737 // CK22-NEXT: store ptr [[TMP68]], ptr [[TMP73]], align 4
4738 // CK22-NEXT: [[TMP74:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 4
4739 // CK22-NEXT: store ptr [[TMP69]], ptr [[TMP74]], align 4
4740 // CK22-NEXT: [[TMP75:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 5
4741 // CK22-NEXT: store ptr @.offload_maptypes.4, ptr [[TMP75]], align 4
4742 // CK22-NEXT: [[TMP76:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 6
4743 // CK22-NEXT: store ptr null, ptr [[TMP76]], align 4
4744 // CK22-NEXT: [[TMP77:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 7
4745 // CK22-NEXT: store ptr null, ptr [[TMP77]], align 4
4746 // CK22-NEXT: [[TMP78:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 8
4747 // CK22-NEXT: store i64 0, ptr [[TMP78]], align 8
4748 // CK22-NEXT: [[TMP79:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 9
4749 // CK22-NEXT: store i64 0, ptr [[TMP79]], align 8
4750 // CK22-NEXT: [[TMP80:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 10
4751 // CK22-NEXT: store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP80]], align 4
4752 // CK22-NEXT: [[TMP81:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 11
4753 // CK22-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP81]], align 4
4754 // CK22-NEXT: [[TMP82:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 12
4755 // CK22-NEXT: store i32 0, ptr [[TMP82]], align 4
4756 // CK22-NEXT: [[TMP83:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1]], i64 -1, i32 -1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l125.region_id, ptr [[KERNEL_ARGS14]])
4757 // CK22-NEXT: [[TMP84:%.*]] = icmp ne i32 [[TMP83]], 0
4758 // CK22-NEXT: br i1 [[TMP84]], label [[OMP_OFFLOAD_FAILED15:%.*]], label [[OMP_OFFLOAD_CONT16:%.*]]
4759 // CK22: omp_offload.failed15:
4760 // CK22-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l125(ptr [[THIS1]]) #[[ATTR3]]
4761 // CK22-NEXT: br label [[OMP_OFFLOAD_CONT16]]
4762 // CK22: omp_offload.cont16:
4763 // CK22-NEXT: ret void
4766 // CK22-LABEL: define {{[^@]+}}@_ZN2STIdEC2ERPd
4767 // CK22-SAME: (ptr noundef nonnull align 4 dereferenceable(8) [[THIS:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[B:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 {
4768 // CK22-NEXT: entry:
4769 // CK22-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4
4770 // CK22-NEXT: [[B_ADDR:%.*]] = alloca ptr, align 4
4771 // CK22-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4
4772 // CK22-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 4
4773 // CK22-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4
4774 // CK22-NEXT: [[A:%.*]] = getelementptr inbounds [[STRUCT_ST:%.*]], ptr [[THIS1]], i32 0, i32 0
4775 // CK22-NEXT: store ptr null, ptr [[A]], align 4
4776 // CK22-NEXT: [[B2:%.*]] = getelementptr inbounds [[STRUCT_ST]], ptr [[THIS1]], i32 0, i32 1
4777 // CK22-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 4
4778 // CK22-NEXT: store ptr [[TMP0]], ptr [[B2]], align 4
4779 // CK22-NEXT: ret void
4782 // CK22-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l112
4783 // CK22-SAME: (ptr noundef [[THIS:%.*]]) #[[ATTR2:[0-9]+]] {
4784 // CK22-NEXT: entry:
4785 // CK22-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4
4786 // CK22-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4
4787 // CK22-NEXT: [[TMP0:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4
4788 // CK22-NEXT: [[A:%.*]] = getelementptr inbounds [[STRUCT_ST:%.*]], ptr [[TMP0]], i32 0, i32 0
4789 // CK22-NEXT: [[TMP1:%.*]] = load ptr, ptr [[A]], align 4
4790 // CK22-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds double, ptr [[TMP1]], i32 1
4791 // CK22-NEXT: store ptr [[INCDEC_PTR]], ptr [[A]], align 4
4792 // CK22-NEXT: ret void
4795 // CK22-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l118
4796 // CK22-SAME: (ptr noundef [[THIS:%.*]]) #[[ATTR2]] {
4797 // CK22-NEXT: entry:
4798 // CK22-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4
4799 // CK22-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4
4800 // CK22-NEXT: [[TMP0:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4
4801 // CK22-NEXT: [[B:%.*]] = getelementptr inbounds [[STRUCT_ST:%.*]], ptr [[TMP0]], i32 0, i32 1
4802 // CK22-NEXT: [[TMP1:%.*]] = load ptr, ptr [[B]], align 4
4803 // CK22-NEXT: [[TMP2:%.*]] = load ptr, ptr [[TMP1]], align 4
4804 // CK22-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds double, ptr [[TMP2]], i32 1
4805 // CK22-NEXT: store ptr [[INCDEC_PTR]], ptr [[TMP1]], align 4
4806 // CK22-NEXT: ret void
4809 // CK22-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l125
4810 // CK22-SAME: (ptr noundef [[THIS:%.*]]) #[[ATTR2]] {
4811 // CK22-NEXT: entry:
4812 // CK22-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4
4813 // CK22-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4
4814 // CK22-NEXT: [[TMP0:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4
4815 // CK22-NEXT: [[A:%.*]] = getelementptr inbounds [[STRUCT_ST:%.*]], ptr [[TMP0]], i32 0, i32 0
4816 // CK22-NEXT: [[TMP1:%.*]] = load ptr, ptr [[A]], align 4
4817 // CK22-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds double, ptr [[TMP1]], i32 1
4818 // CK22-NEXT: store ptr [[INCDEC_PTR]], ptr [[A]], align 4
4819 // CK22-NEXT: [[B:%.*]] = getelementptr inbounds [[STRUCT_ST]], ptr [[TMP0]], i32 0, i32 1
4820 // CK22-NEXT: [[TMP2:%.*]] = load ptr, ptr [[B]], align 4
4821 // CK22-NEXT: [[TMP3:%.*]] = load ptr, ptr [[TMP2]], align 4
4822 // CK22-NEXT: [[INCDEC_PTR1:%.*]] = getelementptr inbounds double, ptr [[TMP3]], i32 1
4823 // CK22-NEXT: store ptr [[INCDEC_PTR1]], ptr [[TMP2]], align 4
4824 // CK22-NEXT: ret void
4827 // CK22-LABEL: define {{[^@]+}}@.omp_offloading.requires_reg
4828 // CK22-SAME: () #[[ATTR5:[0-9]+]] {
4829 // CK22-NEXT: entry:
4830 // CK22-NEXT: call void @__tgt_register_requires(i64 1)
4831 // CK22-NEXT: ret void
4834 // CK23-LABEL: define {{[^@]+}}@_Z3barPd
4835 // CK23-SAME: (ptr noundef [[ARG:%.*]]) #[[ATTR0:[0-9]+]] {
4836 // CK23-NEXT: entry:
4837 // CK23-NEXT: [[ARG_ADDR:%.*]] = alloca ptr, align 4
4838 // CK23-NEXT: [[A:%.*]] = alloca [[STRUCT_ST:%.*]], align 4
4839 // CK23-NEXT: store ptr [[ARG]], ptr [[ARG_ADDR]], align 4
4840 // CK23-NEXT: call void @_ZN2STIdEC1ERPd(ptr noundef nonnull align 4 dereferenceable(8) [[A]], ptr noundef nonnull align 4 dereferenceable(4) [[ARG_ADDR]])
4841 // CK23-NEXT: call void @_ZN2STIdE3fooERPd(ptr noundef nonnull align 4 dereferenceable(8) [[A]], ptr noundef nonnull align 4 dereferenceable(4) [[ARG_ADDR]])
4842 // CK23-NEXT: [[TMP0:%.*]] = load ptr, ptr [[ARG_ADDR]], align 4
4843 // CK23-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds double, ptr [[TMP0]], i32 1
4844 // CK23-NEXT: store ptr [[INCDEC_PTR]], ptr [[ARG_ADDR]], align 4
4845 // CK23-NEXT: ret void
4848 // CK23-LABEL: define {{[^@]+}}@_ZN2STIdEC1ERPd
4849 // CK23-SAME: (ptr noundef nonnull align 4 dereferenceable(8) [[THIS:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[B:%.*]]) unnamed_addr #[[ATTR1:[0-9]+]] comdat align 2 {
4850 // CK23-NEXT: entry:
4851 // CK23-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4
4852 // CK23-NEXT: [[B_ADDR:%.*]] = alloca ptr, align 4
4853 // CK23-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4
4854 // CK23-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 4
4855 // CK23-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4
4856 // CK23-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 4
4857 // CK23-NEXT: call void @_ZN2STIdEC2ERPd(ptr noundef nonnull align 4 dereferenceable(8) [[THIS1]], ptr noundef nonnull align 4 dereferenceable(4) [[TMP0]])
4858 // CK23-NEXT: ret void
4861 // CK23-LABEL: define {{[^@]+}}@_ZN2STIdE3fooERPd
4862 // CK23-SAME: (ptr noundef nonnull align 4 dereferenceable(8) [[THIS:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[ARG:%.*]]) #[[ATTR0]] comdat align 2 {
4863 // CK23-NEXT: entry:
4864 // CK23-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4
4865 // CK23-NEXT: [[ARG_ADDR:%.*]] = alloca ptr, align 4
4866 // CK23-NEXT: [[LA:%.*]] = alloca ptr, align 4
4867 // CK23-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 4
4868 // CK23-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 4
4869 // CK23-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 4
4870 // CK23-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8
4871 // CK23-NEXT: [[DOTOFFLOAD_BASEPTRS2:%.*]] = alloca [2 x ptr], align 4
4872 // CK23-NEXT: [[DOTOFFLOAD_PTRS3:%.*]] = alloca [2 x ptr], align 4
4873 // CK23-NEXT: [[DOTOFFLOAD_MAPPERS4:%.*]] = alloca [2 x ptr], align 4
4874 // CK23-NEXT: [[DOTOFFLOAD_SIZES:%.*]] = alloca [2 x i64], align 4
4875 // CK23-NEXT: [[KERNEL_ARGS5:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
4876 // CK23-NEXT: [[DOTOFFLOAD_BASEPTRS10:%.*]] = alloca [3 x ptr], align 4
4877 // CK23-NEXT: [[DOTOFFLOAD_PTRS11:%.*]] = alloca [3 x ptr], align 4
4878 // CK23-NEXT: [[DOTOFFLOAD_MAPPERS12:%.*]] = alloca [3 x ptr], align 4
4879 // CK23-NEXT: [[DOTOFFLOAD_SIZES13:%.*]] = alloca [3 x i64], align 4
4880 // CK23-NEXT: [[KERNEL_ARGS14:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
4881 // CK23-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4
4882 // CK23-NEXT: store ptr [[ARG]], ptr [[ARG_ADDR]], align 4
4883 // CK23-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4
4884 // CK23-NEXT: store ptr null, ptr [[LA]], align 4
4885 // CK23-NEXT: [[A:%.*]] = getelementptr inbounds [[STRUCT_ST:%.*]], ptr [[THIS1]], i32 0, i32 0
4886 // CK23-NEXT: [[TMP0:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
4887 // CK23-NEXT: store ptr [[THIS1]], ptr [[TMP0]], align 4
4888 // CK23-NEXT: [[TMP1:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0
4889 // CK23-NEXT: store ptr [[A]], ptr [[TMP1]], align 4
4890 // CK23-NEXT: [[TMP2:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
4891 // CK23-NEXT: store ptr null, ptr [[TMP2]], align 4
4892 // CK23-NEXT: [[TMP3:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
4893 // CK23-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0
4894 // CK23-NEXT: [[TMP5:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0
4895 // CK23-NEXT: store i32 2, ptr [[TMP5]], align 4
4896 // CK23-NEXT: [[TMP6:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1
4897 // CK23-NEXT: store i32 1, ptr [[TMP6]], align 4
4898 // CK23-NEXT: [[TMP7:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2
4899 // CK23-NEXT: store ptr [[TMP3]], ptr [[TMP7]], align 4
4900 // CK23-NEXT: [[TMP8:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3
4901 // CK23-NEXT: store ptr [[TMP4]], ptr [[TMP8]], align 4
4902 // CK23-NEXT: [[TMP9:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4
4903 // CK23-NEXT: store ptr @.offload_sizes, ptr [[TMP9]], align 4
4904 // CK23-NEXT: [[TMP10:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5
4905 // CK23-NEXT: store ptr @.offload_maptypes, ptr [[TMP10]], align 4
4906 // CK23-NEXT: [[TMP11:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6
4907 // CK23-NEXT: store ptr null, ptr [[TMP11]], align 4
4908 // CK23-NEXT: [[TMP12:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7
4909 // CK23-NEXT: store ptr null, ptr [[TMP12]], align 4
4910 // CK23-NEXT: [[TMP13:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8
4911 // CK23-NEXT: store i64 0, ptr [[TMP13]], align 8
4912 // CK23-NEXT: [[TMP14:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9
4913 // CK23-NEXT: store i64 0, ptr [[TMP14]], align 8
4914 // CK23-NEXT: [[TMP15:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10
4915 // CK23-NEXT: store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP15]], align 4
4916 // CK23-NEXT: [[TMP16:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11
4917 // CK23-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP16]], align 4
4918 // CK23-NEXT: [[TMP17:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12
4919 // CK23-NEXT: store i32 0, ptr [[TMP17]], align 4
4920 // CK23-NEXT: [[TMP18:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1:[0-9]+]], i64 -1, i32 -1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l112.region_id, ptr [[KERNEL_ARGS]])
4921 // CK23-NEXT: [[TMP19:%.*]] = icmp ne i32 [[TMP18]], 0
4922 // CK23-NEXT: br i1 [[TMP19]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
4923 // CK23: omp_offload.failed:
4924 // CK23-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l112(ptr [[THIS1]]) #[[ATTR3:[0-9]+]]
4925 // CK23-NEXT: br label [[OMP_OFFLOAD_CONT]]
4926 // CK23: omp_offload.cont:
4927 // CK23-NEXT: [[B:%.*]] = getelementptr inbounds [[STRUCT_ST]], ptr [[THIS1]], i32 0, i32 1
4928 // CK23-NEXT: [[TMP20:%.*]] = load ptr, ptr [[B]], align 4
4929 // CK23-NEXT: [[TMP21:%.*]] = getelementptr ptr, ptr [[B]], i32 1
4930 // CK23-NEXT: [[TMP22:%.*]] = ptrtoint ptr [[TMP21]] to i64
4931 // CK23-NEXT: [[TMP23:%.*]] = ptrtoint ptr [[B]] to i64
4932 // CK23-NEXT: [[TMP24:%.*]] = sub i64 [[TMP22]], [[TMP23]]
4933 // CK23-NEXT: [[TMP25:%.*]] = sdiv exact i64 [[TMP24]], ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)
4934 // CK23-NEXT: call void @llvm.memcpy.p0.p0.i32(ptr align 4 [[DOTOFFLOAD_SIZES]], ptr align 4 @.offload_sizes.1, i32 16, i1 false)
4935 // CK23-NEXT: [[TMP26:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS2]], i32 0, i32 0
4936 // CK23-NEXT: store ptr [[THIS1]], ptr [[TMP26]], align 4
4937 // CK23-NEXT: [[TMP27:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS3]], i32 0, i32 0
4938 // CK23-NEXT: store ptr [[B]], ptr [[TMP27]], align 4
4939 // CK23-NEXT: [[TMP28:%.*]] = getelementptr inbounds [2 x i64], ptr [[DOTOFFLOAD_SIZES]], i32 0, i32 0
4940 // CK23-NEXT: store i64 [[TMP25]], ptr [[TMP28]], align 4
4941 // CK23-NEXT: [[TMP29:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_MAPPERS4]], i32 0, i32 0
4942 // CK23-NEXT: store ptr null, ptr [[TMP29]], align 4
4943 // CK23-NEXT: [[TMP30:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS2]], i32 0, i32 1
4944 // CK23-NEXT: store ptr [[THIS1]], ptr [[TMP30]], align 4
4945 // CK23-NEXT: [[TMP31:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS3]], i32 0, i32 1
4946 // CK23-NEXT: store ptr [[TMP20]], ptr [[TMP31]], align 4
4947 // CK23-NEXT: [[TMP32:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_MAPPERS4]], i32 0, i32 1
4948 // CK23-NEXT: store ptr null, ptr [[TMP32]], align 4
4949 // CK23-NEXT: [[TMP33:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS2]], i32 0, i32 0
4950 // CK23-NEXT: [[TMP34:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS3]], i32 0, i32 0
4951 // CK23-NEXT: [[TMP35:%.*]] = getelementptr inbounds [2 x i64], ptr [[DOTOFFLOAD_SIZES]], i32 0, i32 0
4952 // CK23-NEXT: [[TMP36:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 0
4953 // CK23-NEXT: store i32 2, ptr [[TMP36]], align 4
4954 // CK23-NEXT: [[TMP37:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 1
4955 // CK23-NEXT: store i32 2, ptr [[TMP37]], align 4
4956 // CK23-NEXT: [[TMP38:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 2
4957 // CK23-NEXT: store ptr [[TMP33]], ptr [[TMP38]], align 4
4958 // CK23-NEXT: [[TMP39:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 3
4959 // CK23-NEXT: store ptr [[TMP34]], ptr [[TMP39]], align 4
4960 // CK23-NEXT: [[TMP40:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 4
4961 // CK23-NEXT: store ptr [[TMP35]], ptr [[TMP40]], align 4
4962 // CK23-NEXT: [[TMP41:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 5
4963 // CK23-NEXT: store ptr @.offload_maptypes.2, ptr [[TMP41]], align 4
4964 // CK23-NEXT: [[TMP42:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 6
4965 // CK23-NEXT: store ptr null, ptr [[TMP42]], align 4
4966 // CK23-NEXT: [[TMP43:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 7
4967 // CK23-NEXT: store ptr null, ptr [[TMP43]], align 4
4968 // CK23-NEXT: [[TMP44:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 8
4969 // CK23-NEXT: store i64 0, ptr [[TMP44]], align 8
4970 // CK23-NEXT: [[TMP45:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 9
4971 // CK23-NEXT: store i64 0, ptr [[TMP45]], align 8
4972 // CK23-NEXT: [[TMP46:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 10
4973 // CK23-NEXT: store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP46]], align 4
4974 // CK23-NEXT: [[TMP47:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 11
4975 // CK23-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP47]], align 4
4976 // CK23-NEXT: [[TMP48:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 12
4977 // CK23-NEXT: store i32 0, ptr [[TMP48]], align 4
4978 // CK23-NEXT: [[TMP49:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1]], i64 -1, i32 -1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l118.region_id, ptr [[KERNEL_ARGS5]])
4979 // CK23-NEXT: [[TMP50:%.*]] = icmp ne i32 [[TMP49]], 0
4980 // CK23-NEXT: br i1 [[TMP50]], label [[OMP_OFFLOAD_FAILED6:%.*]], label [[OMP_OFFLOAD_CONT7:%.*]]
4981 // CK23: omp_offload.failed6:
4982 // CK23-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l118(ptr [[THIS1]]) #[[ATTR3]]
4983 // CK23-NEXT: br label [[OMP_OFFLOAD_CONT7]]
4984 // CK23: omp_offload.cont7:
4985 // CK23-NEXT: [[A8:%.*]] = getelementptr inbounds [[STRUCT_ST]], ptr [[THIS1]], i32 0, i32 0
4986 // CK23-NEXT: [[B9:%.*]] = getelementptr inbounds [[STRUCT_ST]], ptr [[THIS1]], i32 0, i32 1
4987 // CK23-NEXT: [[TMP51:%.*]] = load ptr, ptr [[B9]], align 4
4988 // CK23-NEXT: [[TMP52:%.*]] = getelementptr ptr, ptr [[B9]], i32 1
4989 // CK23-NEXT: [[TMP53:%.*]] = ptrtoint ptr [[TMP52]] to i64
4990 // CK23-NEXT: [[TMP54:%.*]] = ptrtoint ptr [[A8]] to i64
4991 // CK23-NEXT: [[TMP55:%.*]] = sub i64 [[TMP53]], [[TMP54]]
4992 // CK23-NEXT: [[TMP56:%.*]] = sdiv exact i64 [[TMP55]], ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)
4993 // CK23-NEXT: call void @llvm.memcpy.p0.p0.i32(ptr align 4 [[DOTOFFLOAD_SIZES13]], ptr align 4 @.offload_sizes.3, i32 24, i1 false)
4994 // CK23-NEXT: [[TMP57:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS10]], i32 0, i32 0
4995 // CK23-NEXT: store ptr [[THIS1]], ptr [[TMP57]], align 4
4996 // CK23-NEXT: [[TMP58:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS11]], i32 0, i32 0
4997 // CK23-NEXT: store ptr [[A8]], ptr [[TMP58]], align 4
4998 // CK23-NEXT: [[TMP59:%.*]] = getelementptr inbounds [3 x i64], ptr [[DOTOFFLOAD_SIZES13]], i32 0, i32 0
4999 // CK23-NEXT: store i64 [[TMP56]], ptr [[TMP59]], align 4
5000 // CK23-NEXT: [[TMP60:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS12]], i32 0, i32 0
5001 // CK23-NEXT: store ptr null, ptr [[TMP60]], align 4
5002 // CK23-NEXT: [[TMP61:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS10]], i32 0, i32 1
5003 // CK23-NEXT: store ptr [[THIS1]], ptr [[TMP61]], align 4
5004 // CK23-NEXT: [[TMP62:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS11]], i32 0, i32 1
5005 // CK23-NEXT: store ptr [[A8]], ptr [[TMP62]], align 4
5006 // CK23-NEXT: [[TMP63:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS12]], i32 0, i32 1
5007 // CK23-NEXT: store ptr null, ptr [[TMP63]], align 4
5008 // CK23-NEXT: [[TMP64:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS10]], i32 0, i32 2
5009 // CK23-NEXT: store ptr [[THIS1]], ptr [[TMP64]], align 4
5010 // CK23-NEXT: [[TMP65:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS11]], i32 0, i32 2
5011 // CK23-NEXT: store ptr [[TMP51]], ptr [[TMP65]], align 4
5012 // CK23-NEXT: [[TMP66:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS12]], i32 0, i32 2
5013 // CK23-NEXT: store ptr null, ptr [[TMP66]], align 4
5014 // CK23-NEXT: [[TMP67:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS10]], i32 0, i32 0
5015 // CK23-NEXT: [[TMP68:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS11]], i32 0, i32 0
5016 // CK23-NEXT: [[TMP69:%.*]] = getelementptr inbounds [3 x i64], ptr [[DOTOFFLOAD_SIZES13]], i32 0, i32 0
5017 // CK23-NEXT: [[TMP70:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 0
5018 // CK23-NEXT: store i32 2, ptr [[TMP70]], align 4
5019 // CK23-NEXT: [[TMP71:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 1
5020 // CK23-NEXT: store i32 3, ptr [[TMP71]], align 4
5021 // CK23-NEXT: [[TMP72:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 2
5022 // CK23-NEXT: store ptr [[TMP67]], ptr [[TMP72]], align 4
5023 // CK23-NEXT: [[TMP73:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 3
5024 // CK23-NEXT: store ptr [[TMP68]], ptr [[TMP73]], align 4
5025 // CK23-NEXT: [[TMP74:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 4
5026 // CK23-NEXT: store ptr [[TMP69]], ptr [[TMP74]], align 4
5027 // CK23-NEXT: [[TMP75:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 5
5028 // CK23-NEXT: store ptr @.offload_maptypes.4, ptr [[TMP75]], align 4
5029 // CK23-NEXT: [[TMP76:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 6
5030 // CK23-NEXT: store ptr null, ptr [[TMP76]], align 4
5031 // CK23-NEXT: [[TMP77:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 7
5032 // CK23-NEXT: store ptr null, ptr [[TMP77]], align 4
5033 // CK23-NEXT: [[TMP78:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 8
5034 // CK23-NEXT: store i64 0, ptr [[TMP78]], align 8
5035 // CK23-NEXT: [[TMP79:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 9
5036 // CK23-NEXT: store i64 0, ptr [[TMP79]], align 8
5037 // CK23-NEXT: [[TMP80:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 10
5038 // CK23-NEXT: store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP80]], align 4
5039 // CK23-NEXT: [[TMP81:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 11
5040 // CK23-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP81]], align 4
5041 // CK23-NEXT: [[TMP82:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 12
5042 // CK23-NEXT: store i32 0, ptr [[TMP82]], align 4
5043 // CK23-NEXT: [[TMP83:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1]], i64 -1, i32 -1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l125.region_id, ptr [[KERNEL_ARGS14]])
5044 // CK23-NEXT: [[TMP84:%.*]] = icmp ne i32 [[TMP83]], 0
5045 // CK23-NEXT: br i1 [[TMP84]], label [[OMP_OFFLOAD_FAILED15:%.*]], label [[OMP_OFFLOAD_CONT16:%.*]]
5046 // CK23: omp_offload.failed15:
5047 // CK23-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l125(ptr [[THIS1]]) #[[ATTR3]]
5048 // CK23-NEXT: br label [[OMP_OFFLOAD_CONT16]]
5049 // CK23: omp_offload.cont16:
5050 // CK23-NEXT: ret void
5053 // CK23-LABEL: define {{[^@]+}}@_ZN2STIdEC2ERPd
5054 // CK23-SAME: (ptr noundef nonnull align 4 dereferenceable(8) [[THIS:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[B:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 {
5055 // CK23-NEXT: entry:
5056 // CK23-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4
5057 // CK23-NEXT: [[B_ADDR:%.*]] = alloca ptr, align 4
5058 // CK23-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4
5059 // CK23-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 4
5060 // CK23-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4
5061 // CK23-NEXT: [[A:%.*]] = getelementptr inbounds [[STRUCT_ST:%.*]], ptr [[THIS1]], i32 0, i32 0
5062 // CK23-NEXT: store ptr null, ptr [[A]], align 4
5063 // CK23-NEXT: [[B2:%.*]] = getelementptr inbounds [[STRUCT_ST]], ptr [[THIS1]], i32 0, i32 1
5064 // CK23-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 4
5065 // CK23-NEXT: store ptr [[TMP0]], ptr [[B2]], align 4
5066 // CK23-NEXT: ret void
5069 // CK23-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l112
5070 // CK23-SAME: (ptr noundef [[THIS:%.*]]) #[[ATTR2:[0-9]+]] {
5071 // CK23-NEXT: entry:
5072 // CK23-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4
5073 // CK23-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4
5074 // CK23-NEXT: [[TMP0:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4
5075 // CK23-NEXT: [[A:%.*]] = getelementptr inbounds [[STRUCT_ST:%.*]], ptr [[TMP0]], i32 0, i32 0
5076 // CK23-NEXT: [[TMP1:%.*]] = load ptr, ptr [[A]], align 4
5077 // CK23-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds double, ptr [[TMP1]], i32 1
5078 // CK23-NEXT: store ptr [[INCDEC_PTR]], ptr [[A]], align 4
5079 // CK23-NEXT: ret void
5082 // CK23-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l118
5083 // CK23-SAME: (ptr noundef [[THIS:%.*]]) #[[ATTR2]] {
5084 // CK23-NEXT: entry:
5085 // CK23-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4
5086 // CK23-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4
5087 // CK23-NEXT: [[TMP0:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4
5088 // CK23-NEXT: [[B:%.*]] = getelementptr inbounds [[STRUCT_ST:%.*]], ptr [[TMP0]], i32 0, i32 1
5089 // CK23-NEXT: [[TMP1:%.*]] = load ptr, ptr [[B]], align 4
5090 // CK23-NEXT: [[TMP2:%.*]] = load ptr, ptr [[TMP1]], align 4
5091 // CK23-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds double, ptr [[TMP2]], i32 1
5092 // CK23-NEXT: store ptr [[INCDEC_PTR]], ptr [[TMP1]], align 4
5093 // CK23-NEXT: ret void
5096 // CK23-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l125
5097 // CK23-SAME: (ptr noundef [[THIS:%.*]]) #[[ATTR2]] {
5098 // CK23-NEXT: entry:
5099 // CK23-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4
5100 // CK23-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4
5101 // CK23-NEXT: [[TMP0:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4
5102 // CK23-NEXT: [[A:%.*]] = getelementptr inbounds [[STRUCT_ST:%.*]], ptr [[TMP0]], i32 0, i32 0
5103 // CK23-NEXT: [[TMP1:%.*]] = load ptr, ptr [[A]], align 4
5104 // CK23-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds double, ptr [[TMP1]], i32 1
5105 // CK23-NEXT: store ptr [[INCDEC_PTR]], ptr [[A]], align 4
5106 // CK23-NEXT: [[B:%.*]] = getelementptr inbounds [[STRUCT_ST]], ptr [[TMP0]], i32 0, i32 1
5107 // CK23-NEXT: [[TMP2:%.*]] = load ptr, ptr [[B]], align 4
5108 // CK23-NEXT: [[TMP3:%.*]] = load ptr, ptr [[TMP2]], align 4
5109 // CK23-NEXT: [[INCDEC_PTR1:%.*]] = getelementptr inbounds double, ptr [[TMP3]], i32 1
5110 // CK23-NEXT: store ptr [[INCDEC_PTR1]], ptr [[TMP2]], align 4
5111 // CK23-NEXT: ret void
5114 // CK23-LABEL: define {{[^@]+}}@.omp_offloading.requires_reg
5115 // CK23-SAME: () #[[ATTR5:[0-9]+]] {
5116 // CK23-NEXT: entry:
5117 // CK23-NEXT: call void @__tgt_register_requires(i64 1)
5118 // CK23-NEXT: ret void
5121 // SIMD-ONLY10-LABEL: define {{[^@]+}}@_Z3barPd
5122 // SIMD-ONLY10-SAME: (ptr noundef [[ARG:%.*]]) #[[ATTR0:[0-9]+]] {
5123 // SIMD-ONLY10-NEXT: entry:
5124 // SIMD-ONLY10-NEXT: [[ARG_ADDR:%.*]] = alloca ptr, align 8
5125 // SIMD-ONLY10-NEXT: [[A:%.*]] = alloca [[STRUCT_ST:%.*]], align 8
5126 // SIMD-ONLY10-NEXT: store ptr [[ARG]], ptr [[ARG_ADDR]], align 8
5127 // SIMD-ONLY10-NEXT: call void @_ZN2STIdEC1ERPd(ptr noundef nonnull align 8 dereferenceable(16) [[A]], ptr noundef nonnull align 8 dereferenceable(8) [[ARG_ADDR]])
5128 // SIMD-ONLY10-NEXT: call void @_ZN2STIdE3fooERPd(ptr noundef nonnull align 8 dereferenceable(16) [[A]], ptr noundef nonnull align 8 dereferenceable(8) [[ARG_ADDR]])
5129 // SIMD-ONLY10-NEXT: [[TMP0:%.*]] = load ptr, ptr [[ARG_ADDR]], align 8
5130 // SIMD-ONLY10-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds double, ptr [[TMP0]], i32 1
5131 // SIMD-ONLY10-NEXT: store ptr [[INCDEC_PTR]], ptr [[ARG_ADDR]], align 8
5132 // SIMD-ONLY10-NEXT: ret void
5135 // SIMD-ONLY10-LABEL: define {{[^@]+}}@_ZN2STIdEC1ERPd
5136 // SIMD-ONLY10-SAME: (ptr noundef nonnull align 8 dereferenceable(16) [[THIS:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[B:%.*]]) unnamed_addr #[[ATTR1:[0-9]+]] comdat {
5137 // SIMD-ONLY10-NEXT: entry:
5138 // SIMD-ONLY10-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8
5139 // SIMD-ONLY10-NEXT: [[B_ADDR:%.*]] = alloca ptr, align 8
5140 // SIMD-ONLY10-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8
5141 // SIMD-ONLY10-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 8
5142 // SIMD-ONLY10-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8
5143 // SIMD-ONLY10-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 8
5144 // SIMD-ONLY10-NEXT: call void @_ZN2STIdEC2ERPd(ptr noundef nonnull align 8 dereferenceable(16) [[THIS1]], ptr noundef nonnull align 8 dereferenceable(8) [[TMP0]])
5145 // SIMD-ONLY10-NEXT: ret void
5148 // SIMD-ONLY10-LABEL: define {{[^@]+}}@_ZN2STIdE3fooERPd
5149 // SIMD-ONLY10-SAME: (ptr noundef nonnull align 8 dereferenceable(16) [[THIS:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[ARG:%.*]]) #[[ATTR0]] comdat {
5150 // SIMD-ONLY10-NEXT: entry:
5151 // SIMD-ONLY10-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8
5152 // SIMD-ONLY10-NEXT: [[ARG_ADDR:%.*]] = alloca ptr, align 8
5153 // SIMD-ONLY10-NEXT: [[LA:%.*]] = alloca ptr, align 8
5154 // SIMD-ONLY10-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8
5155 // SIMD-ONLY10-NEXT: store ptr [[ARG]], ptr [[ARG_ADDR]], align 8
5156 // SIMD-ONLY10-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8
5157 // SIMD-ONLY10-NEXT: store ptr null, ptr [[LA]], align 8
5158 // SIMD-ONLY10-NEXT: [[A:%.*]] = getelementptr inbounds [[STRUCT_ST:%.*]], ptr [[THIS1]], i32 0, i32 0
5159 // SIMD-ONLY10-NEXT: [[TMP0:%.*]] = load ptr, ptr [[A]], align 8
5160 // SIMD-ONLY10-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds double, ptr [[TMP0]], i32 1
5161 // SIMD-ONLY10-NEXT: store ptr [[INCDEC_PTR]], ptr [[A]], align 8
5162 // SIMD-ONLY10-NEXT: [[B:%.*]] = getelementptr inbounds [[STRUCT_ST]], ptr [[THIS1]], i32 0, i32 1
5163 // SIMD-ONLY10-NEXT: [[TMP1:%.*]] = load ptr, ptr [[B]], align 8
5164 // SIMD-ONLY10-NEXT: [[TMP2:%.*]] = load ptr, ptr [[TMP1]], align 8
5165 // SIMD-ONLY10-NEXT: [[INCDEC_PTR2:%.*]] = getelementptr inbounds double, ptr [[TMP2]], i32 1
5166 // SIMD-ONLY10-NEXT: store ptr [[INCDEC_PTR2]], ptr [[TMP1]], align 8
5167 // SIMD-ONLY10-NEXT: [[A3:%.*]] = getelementptr inbounds [[STRUCT_ST]], ptr [[THIS1]], i32 0, i32 0
5168 // SIMD-ONLY10-NEXT: [[TMP3:%.*]] = load ptr, ptr [[A3]], align 8
5169 // SIMD-ONLY10-NEXT: [[INCDEC_PTR4:%.*]] = getelementptr inbounds double, ptr [[TMP3]], i32 1
5170 // SIMD-ONLY10-NEXT: store ptr [[INCDEC_PTR4]], ptr [[A3]], align 8
5171 // SIMD-ONLY10-NEXT: [[B5:%.*]] = getelementptr inbounds [[STRUCT_ST]], ptr [[THIS1]], i32 0, i32 1
5172 // SIMD-ONLY10-NEXT: [[TMP4:%.*]] = load ptr, ptr [[B5]], align 8
5173 // SIMD-ONLY10-NEXT: [[TMP5:%.*]] = load ptr, ptr [[TMP4]], align 8
5174 // SIMD-ONLY10-NEXT: [[INCDEC_PTR6:%.*]] = getelementptr inbounds double, ptr [[TMP5]], i32 1
5175 // SIMD-ONLY10-NEXT: store ptr [[INCDEC_PTR6]], ptr [[TMP4]], align 8
5176 // SIMD-ONLY10-NEXT: ret void
5179 // SIMD-ONLY10-LABEL: define {{[^@]+}}@_ZN2STIdEC2ERPd
5180 // SIMD-ONLY10-SAME: (ptr noundef nonnull align 8 dereferenceable(16) [[THIS:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[B:%.*]]) unnamed_addr #[[ATTR1]] comdat {
5181 // SIMD-ONLY10-NEXT: entry:
5182 // SIMD-ONLY10-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8
5183 // SIMD-ONLY10-NEXT: [[B_ADDR:%.*]] = alloca ptr, align 8
5184 // SIMD-ONLY10-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8
5185 // SIMD-ONLY10-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 8
5186 // SIMD-ONLY10-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8
5187 // SIMD-ONLY10-NEXT: [[A:%.*]] = getelementptr inbounds [[STRUCT_ST:%.*]], ptr [[THIS1]], i32 0, i32 0
5188 // SIMD-ONLY10-NEXT: store ptr null, ptr [[A]], align 8
5189 // SIMD-ONLY10-NEXT: [[B2:%.*]] = getelementptr inbounds [[STRUCT_ST]], ptr [[THIS1]], i32 0, i32 1
5190 // SIMD-ONLY10-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 8
5191 // SIMD-ONLY10-NEXT: store ptr [[TMP0]], ptr [[B2]], align 8
5192 // SIMD-ONLY10-NEXT: ret void
5195 // SIMD-ONLY11-LABEL: define {{[^@]+}}@_Z3barPd
5196 // SIMD-ONLY11-SAME: (ptr noundef [[ARG:%.*]]) #[[ATTR0:[0-9]+]] {
5197 // SIMD-ONLY11-NEXT: entry:
5198 // SIMD-ONLY11-NEXT: [[ARG_ADDR:%.*]] = alloca ptr, align 8
5199 // SIMD-ONLY11-NEXT: [[A:%.*]] = alloca [[STRUCT_ST:%.*]], align 8
5200 // SIMD-ONLY11-NEXT: store ptr [[ARG]], ptr [[ARG_ADDR]], align 8
5201 // SIMD-ONLY11-NEXT: call void @_ZN2STIdEC1ERPd(ptr noundef nonnull align 8 dereferenceable(16) [[A]], ptr noundef nonnull align 8 dereferenceable(8) [[ARG_ADDR]])
5202 // SIMD-ONLY11-NEXT: call void @_ZN2STIdE3fooERPd(ptr noundef nonnull align 8 dereferenceable(16) [[A]], ptr noundef nonnull align 8 dereferenceable(8) [[ARG_ADDR]])
5203 // SIMD-ONLY11-NEXT: [[TMP0:%.*]] = load ptr, ptr [[ARG_ADDR]], align 8
5204 // SIMD-ONLY11-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds double, ptr [[TMP0]], i32 1
5205 // SIMD-ONLY11-NEXT: store ptr [[INCDEC_PTR]], ptr [[ARG_ADDR]], align 8
5206 // SIMD-ONLY11-NEXT: ret void
5209 // SIMD-ONLY11-LABEL: define {{[^@]+}}@_ZN2STIdEC1ERPd
5210 // SIMD-ONLY11-SAME: (ptr noundef nonnull align 8 dereferenceable(16) [[THIS:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[B:%.*]]) unnamed_addr #[[ATTR1:[0-9]+]] comdat {
5211 // SIMD-ONLY11-NEXT: entry:
5212 // SIMD-ONLY11-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8
5213 // SIMD-ONLY11-NEXT: [[B_ADDR:%.*]] = alloca ptr, align 8
5214 // SIMD-ONLY11-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8
5215 // SIMD-ONLY11-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 8
5216 // SIMD-ONLY11-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8
5217 // SIMD-ONLY11-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 8
5218 // SIMD-ONLY11-NEXT: call void @_ZN2STIdEC2ERPd(ptr noundef nonnull align 8 dereferenceable(16) [[THIS1]], ptr noundef nonnull align 8 dereferenceable(8) [[TMP0]])
5219 // SIMD-ONLY11-NEXT: ret void
5222 // SIMD-ONLY11-LABEL: define {{[^@]+}}@_ZN2STIdE3fooERPd
5223 // SIMD-ONLY11-SAME: (ptr noundef nonnull align 8 dereferenceable(16) [[THIS:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[ARG:%.*]]) #[[ATTR0]] comdat {
5224 // SIMD-ONLY11-NEXT: entry:
5225 // SIMD-ONLY11-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8
5226 // SIMD-ONLY11-NEXT: [[ARG_ADDR:%.*]] = alloca ptr, align 8
5227 // SIMD-ONLY11-NEXT: [[LA:%.*]] = alloca ptr, align 8
5228 // SIMD-ONLY11-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8
5229 // SIMD-ONLY11-NEXT: store ptr [[ARG]], ptr [[ARG_ADDR]], align 8
5230 // SIMD-ONLY11-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8
5231 // SIMD-ONLY11-NEXT: store ptr null, ptr [[LA]], align 8
5232 // SIMD-ONLY11-NEXT: [[A:%.*]] = getelementptr inbounds [[STRUCT_ST:%.*]], ptr [[THIS1]], i32 0, i32 0
5233 // SIMD-ONLY11-NEXT: [[TMP0:%.*]] = load ptr, ptr [[A]], align 8
5234 // SIMD-ONLY11-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds double, ptr [[TMP0]], i32 1
5235 // SIMD-ONLY11-NEXT: store ptr [[INCDEC_PTR]], ptr [[A]], align 8
5236 // SIMD-ONLY11-NEXT: [[B:%.*]] = getelementptr inbounds [[STRUCT_ST]], ptr [[THIS1]], i32 0, i32 1
5237 // SIMD-ONLY11-NEXT: [[TMP1:%.*]] = load ptr, ptr [[B]], align 8
5238 // SIMD-ONLY11-NEXT: [[TMP2:%.*]] = load ptr, ptr [[TMP1]], align 8
5239 // SIMD-ONLY11-NEXT: [[INCDEC_PTR2:%.*]] = getelementptr inbounds double, ptr [[TMP2]], i32 1
5240 // SIMD-ONLY11-NEXT: store ptr [[INCDEC_PTR2]], ptr [[TMP1]], align 8
5241 // SIMD-ONLY11-NEXT: [[A3:%.*]] = getelementptr inbounds [[STRUCT_ST]], ptr [[THIS1]], i32 0, i32 0
5242 // SIMD-ONLY11-NEXT: [[TMP3:%.*]] = load ptr, ptr [[A3]], align 8
5243 // SIMD-ONLY11-NEXT: [[INCDEC_PTR4:%.*]] = getelementptr inbounds double, ptr [[TMP3]], i32 1
5244 // SIMD-ONLY11-NEXT: store ptr [[INCDEC_PTR4]], ptr [[A3]], align 8
5245 // SIMD-ONLY11-NEXT: [[B5:%.*]] = getelementptr inbounds [[STRUCT_ST]], ptr [[THIS1]], i32 0, i32 1
5246 // SIMD-ONLY11-NEXT: [[TMP4:%.*]] = load ptr, ptr [[B5]], align 8
5247 // SIMD-ONLY11-NEXT: [[TMP5:%.*]] = load ptr, ptr [[TMP4]], align 8
5248 // SIMD-ONLY11-NEXT: [[INCDEC_PTR6:%.*]] = getelementptr inbounds double, ptr [[TMP5]], i32 1
5249 // SIMD-ONLY11-NEXT: store ptr [[INCDEC_PTR6]], ptr [[TMP4]], align 8
5250 // SIMD-ONLY11-NEXT: ret void
5253 // SIMD-ONLY11-LABEL: define {{[^@]+}}@_ZN2STIdEC2ERPd
5254 // SIMD-ONLY11-SAME: (ptr noundef nonnull align 8 dereferenceable(16) [[THIS:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[B:%.*]]) unnamed_addr #[[ATTR1]] comdat {
5255 // SIMD-ONLY11-NEXT: entry:
5256 // SIMD-ONLY11-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 8
5257 // SIMD-ONLY11-NEXT: [[B_ADDR:%.*]] = alloca ptr, align 8
5258 // SIMD-ONLY11-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 8
5259 // SIMD-ONLY11-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 8
5260 // SIMD-ONLY11-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8
5261 // SIMD-ONLY11-NEXT: [[A:%.*]] = getelementptr inbounds [[STRUCT_ST:%.*]], ptr [[THIS1]], i32 0, i32 0
5262 // SIMD-ONLY11-NEXT: store ptr null, ptr [[A]], align 8
5263 // SIMD-ONLY11-NEXT: [[B2:%.*]] = getelementptr inbounds [[STRUCT_ST]], ptr [[THIS1]], i32 0, i32 1
5264 // SIMD-ONLY11-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 8
5265 // SIMD-ONLY11-NEXT: store ptr [[TMP0]], ptr [[B2]], align 8
5266 // SIMD-ONLY11-NEXT: ret void
5269 // SIMD-ONLY12-LABEL: define {{[^@]+}}@_Z3barPd
5270 // SIMD-ONLY12-SAME: (ptr noundef [[ARG:%.*]]) #[[ATTR0:[0-9]+]] {
5271 // SIMD-ONLY12-NEXT: entry:
5272 // SIMD-ONLY12-NEXT: [[ARG_ADDR:%.*]] = alloca ptr, align 4
5273 // SIMD-ONLY12-NEXT: [[A:%.*]] = alloca [[STRUCT_ST:%.*]], align 4
5274 // SIMD-ONLY12-NEXT: store ptr [[ARG]], ptr [[ARG_ADDR]], align 4
5275 // SIMD-ONLY12-NEXT: call void @_ZN2STIdEC1ERPd(ptr noundef nonnull align 4 dereferenceable(8) [[A]], ptr noundef nonnull align 4 dereferenceable(4) [[ARG_ADDR]])
5276 // SIMD-ONLY12-NEXT: call void @_ZN2STIdE3fooERPd(ptr noundef nonnull align 4 dereferenceable(8) [[A]], ptr noundef nonnull align 4 dereferenceable(4) [[ARG_ADDR]])
5277 // SIMD-ONLY12-NEXT: [[TMP0:%.*]] = load ptr, ptr [[ARG_ADDR]], align 4
5278 // SIMD-ONLY12-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds double, ptr [[TMP0]], i32 1
5279 // SIMD-ONLY12-NEXT: store ptr [[INCDEC_PTR]], ptr [[ARG_ADDR]], align 4
5280 // SIMD-ONLY12-NEXT: ret void
5283 // SIMD-ONLY12-LABEL: define {{[^@]+}}@_ZN2STIdEC1ERPd
5284 // SIMD-ONLY12-SAME: (ptr noundef nonnull align 4 dereferenceable(8) [[THIS:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[B:%.*]]) unnamed_addr #[[ATTR1:[0-9]+]] comdat align 2 {
5285 // SIMD-ONLY12-NEXT: entry:
5286 // SIMD-ONLY12-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4
5287 // SIMD-ONLY12-NEXT: [[B_ADDR:%.*]] = alloca ptr, align 4
5288 // SIMD-ONLY12-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4
5289 // SIMD-ONLY12-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 4
5290 // SIMD-ONLY12-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4
5291 // SIMD-ONLY12-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 4
5292 // SIMD-ONLY12-NEXT: call void @_ZN2STIdEC2ERPd(ptr noundef nonnull align 4 dereferenceable(8) [[THIS1]], ptr noundef nonnull align 4 dereferenceable(4) [[TMP0]])
5293 // SIMD-ONLY12-NEXT: ret void
5296 // SIMD-ONLY12-LABEL: define {{[^@]+}}@_ZN2STIdE3fooERPd
5297 // SIMD-ONLY12-SAME: (ptr noundef nonnull align 4 dereferenceable(8) [[THIS:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[ARG:%.*]]) #[[ATTR0]] comdat align 2 {
5298 // SIMD-ONLY12-NEXT: entry:
5299 // SIMD-ONLY12-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4
5300 // SIMD-ONLY12-NEXT: [[ARG_ADDR:%.*]] = alloca ptr, align 4
5301 // SIMD-ONLY12-NEXT: [[LA:%.*]] = alloca ptr, align 4
5302 // SIMD-ONLY12-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4
5303 // SIMD-ONLY12-NEXT: store ptr [[ARG]], ptr [[ARG_ADDR]], align 4
5304 // SIMD-ONLY12-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4
5305 // SIMD-ONLY12-NEXT: store ptr null, ptr [[LA]], align 4
5306 // SIMD-ONLY12-NEXT: [[A:%.*]] = getelementptr inbounds [[STRUCT_ST:%.*]], ptr [[THIS1]], i32 0, i32 0
5307 // SIMD-ONLY12-NEXT: [[TMP0:%.*]] = load ptr, ptr [[A]], align 4
5308 // SIMD-ONLY12-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds double, ptr [[TMP0]], i32 1
5309 // SIMD-ONLY12-NEXT: store ptr [[INCDEC_PTR]], ptr [[A]], align 4
5310 // SIMD-ONLY12-NEXT: [[B:%.*]] = getelementptr inbounds [[STRUCT_ST]], ptr [[THIS1]], i32 0, i32 1
5311 // SIMD-ONLY12-NEXT: [[TMP1:%.*]] = load ptr, ptr [[B]], align 4
5312 // SIMD-ONLY12-NEXT: [[TMP2:%.*]] = load ptr, ptr [[TMP1]], align 4
5313 // SIMD-ONLY12-NEXT: [[INCDEC_PTR2:%.*]] = getelementptr inbounds double, ptr [[TMP2]], i32 1
5314 // SIMD-ONLY12-NEXT: store ptr [[INCDEC_PTR2]], ptr [[TMP1]], align 4
5315 // SIMD-ONLY12-NEXT: [[A3:%.*]] = getelementptr inbounds [[STRUCT_ST]], ptr [[THIS1]], i32 0, i32 0
5316 // SIMD-ONLY12-NEXT: [[TMP3:%.*]] = load ptr, ptr [[A3]], align 4
5317 // SIMD-ONLY12-NEXT: [[INCDEC_PTR4:%.*]] = getelementptr inbounds double, ptr [[TMP3]], i32 1
5318 // SIMD-ONLY12-NEXT: store ptr [[INCDEC_PTR4]], ptr [[A3]], align 4
5319 // SIMD-ONLY12-NEXT: [[B5:%.*]] = getelementptr inbounds [[STRUCT_ST]], ptr [[THIS1]], i32 0, i32 1
5320 // SIMD-ONLY12-NEXT: [[TMP4:%.*]] = load ptr, ptr [[B5]], align 4
5321 // SIMD-ONLY12-NEXT: [[TMP5:%.*]] = load ptr, ptr [[TMP4]], align 4
5322 // SIMD-ONLY12-NEXT: [[INCDEC_PTR6:%.*]] = getelementptr inbounds double, ptr [[TMP5]], i32 1
5323 // SIMD-ONLY12-NEXT: store ptr [[INCDEC_PTR6]], ptr [[TMP4]], align 4
5324 // SIMD-ONLY12-NEXT: ret void
5327 // SIMD-ONLY12-LABEL: define {{[^@]+}}@_ZN2STIdEC2ERPd
5328 // SIMD-ONLY12-SAME: (ptr noundef nonnull align 4 dereferenceable(8) [[THIS:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[B:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 {
5329 // SIMD-ONLY12-NEXT: entry:
5330 // SIMD-ONLY12-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4
5331 // SIMD-ONLY12-NEXT: [[B_ADDR:%.*]] = alloca ptr, align 4
5332 // SIMD-ONLY12-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4
5333 // SIMD-ONLY12-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 4
5334 // SIMD-ONLY12-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4
5335 // SIMD-ONLY12-NEXT: [[A:%.*]] = getelementptr inbounds [[STRUCT_ST:%.*]], ptr [[THIS1]], i32 0, i32 0
5336 // SIMD-ONLY12-NEXT: store ptr null, ptr [[A]], align 4
5337 // SIMD-ONLY12-NEXT: [[B2:%.*]] = getelementptr inbounds [[STRUCT_ST]], ptr [[THIS1]], i32 0, i32 1
5338 // SIMD-ONLY12-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 4
5339 // SIMD-ONLY12-NEXT: store ptr [[TMP0]], ptr [[B2]], align 4
5340 // SIMD-ONLY12-NEXT: ret void
5343 // SIMD-ONLY13-LABEL: define {{[^@]+}}@_Z3barPd
5344 // SIMD-ONLY13-SAME: (ptr noundef [[ARG:%.*]]) #[[ATTR0:[0-9]+]] {
5345 // SIMD-ONLY13-NEXT: entry:
5346 // SIMD-ONLY13-NEXT: [[ARG_ADDR:%.*]] = alloca ptr, align 4
5347 // SIMD-ONLY13-NEXT: [[A:%.*]] = alloca [[STRUCT_ST:%.*]], align 4
5348 // SIMD-ONLY13-NEXT: store ptr [[ARG]], ptr [[ARG_ADDR]], align 4
5349 // SIMD-ONLY13-NEXT: call void @_ZN2STIdEC1ERPd(ptr noundef nonnull align 4 dereferenceable(8) [[A]], ptr noundef nonnull align 4 dereferenceable(4) [[ARG_ADDR]])
5350 // SIMD-ONLY13-NEXT: call void @_ZN2STIdE3fooERPd(ptr noundef nonnull align 4 dereferenceable(8) [[A]], ptr noundef nonnull align 4 dereferenceable(4) [[ARG_ADDR]])
5351 // SIMD-ONLY13-NEXT: [[TMP0:%.*]] = load ptr, ptr [[ARG_ADDR]], align 4
5352 // SIMD-ONLY13-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds double, ptr [[TMP0]], i32 1
5353 // SIMD-ONLY13-NEXT: store ptr [[INCDEC_PTR]], ptr [[ARG_ADDR]], align 4
5354 // SIMD-ONLY13-NEXT: ret void
5357 // SIMD-ONLY13-LABEL: define {{[^@]+}}@_ZN2STIdEC1ERPd
5358 // SIMD-ONLY13-SAME: (ptr noundef nonnull align 4 dereferenceable(8) [[THIS:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[B:%.*]]) unnamed_addr #[[ATTR1:[0-9]+]] comdat align 2 {
5359 // SIMD-ONLY13-NEXT: entry:
5360 // SIMD-ONLY13-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4
5361 // SIMD-ONLY13-NEXT: [[B_ADDR:%.*]] = alloca ptr, align 4
5362 // SIMD-ONLY13-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4
5363 // SIMD-ONLY13-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 4
5364 // SIMD-ONLY13-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4
5365 // SIMD-ONLY13-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 4
5366 // SIMD-ONLY13-NEXT: call void @_ZN2STIdEC2ERPd(ptr noundef nonnull align 4 dereferenceable(8) [[THIS1]], ptr noundef nonnull align 4 dereferenceable(4) [[TMP0]])
5367 // SIMD-ONLY13-NEXT: ret void
5370 // SIMD-ONLY13-LABEL: define {{[^@]+}}@_ZN2STIdE3fooERPd
5371 // SIMD-ONLY13-SAME: (ptr noundef nonnull align 4 dereferenceable(8) [[THIS:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[ARG:%.*]]) #[[ATTR0]] comdat align 2 {
5372 // SIMD-ONLY13-NEXT: entry:
5373 // SIMD-ONLY13-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4
5374 // SIMD-ONLY13-NEXT: [[ARG_ADDR:%.*]] = alloca ptr, align 4
5375 // SIMD-ONLY13-NEXT: [[LA:%.*]] = alloca ptr, align 4
5376 // SIMD-ONLY13-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4
5377 // SIMD-ONLY13-NEXT: store ptr [[ARG]], ptr [[ARG_ADDR]], align 4
5378 // SIMD-ONLY13-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4
5379 // SIMD-ONLY13-NEXT: store ptr null, ptr [[LA]], align 4
5380 // SIMD-ONLY13-NEXT: [[A:%.*]] = getelementptr inbounds [[STRUCT_ST:%.*]], ptr [[THIS1]], i32 0, i32 0
5381 // SIMD-ONLY13-NEXT: [[TMP0:%.*]] = load ptr, ptr [[A]], align 4
5382 // SIMD-ONLY13-NEXT: [[INCDEC_PTR:%.*]] = getelementptr inbounds double, ptr [[TMP0]], i32 1
5383 // SIMD-ONLY13-NEXT: store ptr [[INCDEC_PTR]], ptr [[A]], align 4
5384 // SIMD-ONLY13-NEXT: [[B:%.*]] = getelementptr inbounds [[STRUCT_ST]], ptr [[THIS1]], i32 0, i32 1
5385 // SIMD-ONLY13-NEXT: [[TMP1:%.*]] = load ptr, ptr [[B]], align 4
5386 // SIMD-ONLY13-NEXT: [[TMP2:%.*]] = load ptr, ptr [[TMP1]], align 4
5387 // SIMD-ONLY13-NEXT: [[INCDEC_PTR2:%.*]] = getelementptr inbounds double, ptr [[TMP2]], i32 1
5388 // SIMD-ONLY13-NEXT: store ptr [[INCDEC_PTR2]], ptr [[TMP1]], align 4
5389 // SIMD-ONLY13-NEXT: [[A3:%.*]] = getelementptr inbounds [[STRUCT_ST]], ptr [[THIS1]], i32 0, i32 0
5390 // SIMD-ONLY13-NEXT: [[TMP3:%.*]] = load ptr, ptr [[A3]], align 4
5391 // SIMD-ONLY13-NEXT: [[INCDEC_PTR4:%.*]] = getelementptr inbounds double, ptr [[TMP3]], i32 1
5392 // SIMD-ONLY13-NEXT: store ptr [[INCDEC_PTR4]], ptr [[A3]], align 4
5393 // SIMD-ONLY13-NEXT: [[B5:%.*]] = getelementptr inbounds [[STRUCT_ST]], ptr [[THIS1]], i32 0, i32 1
5394 // SIMD-ONLY13-NEXT: [[TMP4:%.*]] = load ptr, ptr [[B5]], align 4
5395 // SIMD-ONLY13-NEXT: [[TMP5:%.*]] = load ptr, ptr [[TMP4]], align 4
5396 // SIMD-ONLY13-NEXT: [[INCDEC_PTR6:%.*]] = getelementptr inbounds double, ptr [[TMP5]], i32 1
5397 // SIMD-ONLY13-NEXT: store ptr [[INCDEC_PTR6]], ptr [[TMP4]], align 4
5398 // SIMD-ONLY13-NEXT: ret void
5401 // SIMD-ONLY13-LABEL: define {{[^@]+}}@_ZN2STIdEC2ERPd
5402 // SIMD-ONLY13-SAME: (ptr noundef nonnull align 4 dereferenceable(8) [[THIS:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[B:%.*]]) unnamed_addr #[[ATTR1]] comdat align 2 {
5403 // SIMD-ONLY13-NEXT: entry:
5404 // SIMD-ONLY13-NEXT: [[THIS_ADDR:%.*]] = alloca ptr, align 4
5405 // SIMD-ONLY13-NEXT: [[B_ADDR:%.*]] = alloca ptr, align 4
5406 // SIMD-ONLY13-NEXT: store ptr [[THIS]], ptr [[THIS_ADDR]], align 4
5407 // SIMD-ONLY13-NEXT: store ptr [[B]], ptr [[B_ADDR]], align 4
5408 // SIMD-ONLY13-NEXT: [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4
5409 // SIMD-ONLY13-NEXT: [[A:%.*]] = getelementptr inbounds [[STRUCT_ST:%.*]], ptr [[THIS1]], i32 0, i32 0
5410 // SIMD-ONLY13-NEXT: store ptr null, ptr [[A]], align 4
5411 // SIMD-ONLY13-NEXT: [[B2:%.*]] = getelementptr inbounds [[STRUCT_ST]], ptr [[THIS1]], i32 0, i32 1
5412 // SIMD-ONLY13-NEXT: [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 4
5413 // SIMD-ONLY13-NEXT: store ptr [[TMP0]], ptr [[B2]], align 4
5414 // SIMD-ONLY13-NEXT: ret void
5417 // CK30-LABEL: define {{[^@]+}}@_Z3barv
5418 // CK30-SAME: () #[[ATTR0:[0-9]+]] {
5419 // CK30-NEXT: entry:
5420 // CK30-NEXT: [[PTR:%.*]] = alloca ptr, align 64
5421 // CK30-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 8
5422 // CK30-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 8
5423 // CK30-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 8
5424 // CK30-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8
5425 // CK30-NEXT: [[TMP0:%.*]] = load ptr, ptr [[PTR]], align 64
5426 // CK30-NEXT: [[TMP1:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
5427 // CK30-NEXT: store ptr [[TMP0]], ptr [[TMP1]], align 8
5428 // CK30-NEXT: [[TMP2:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0
5429 // CK30-NEXT: store ptr [[TMP0]], ptr [[TMP2]], align 8
5430 // CK30-NEXT: [[TMP3:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
5431 // CK30-NEXT: store ptr null, ptr [[TMP3]], align 8
5432 // CK30-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
5433 // CK30-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0
5434 // CK30-NEXT: [[TMP6:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0
5435 // CK30-NEXT: store i32 2, ptr [[TMP6]], align 4
5436 // CK30-NEXT: [[TMP7:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1
5437 // CK30-NEXT: store i32 1, ptr [[TMP7]], align 4
5438 // CK30-NEXT: [[TMP8:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2
5439 // CK30-NEXT: store ptr [[TMP4]], ptr [[TMP8]], align 8
5440 // CK30-NEXT: [[TMP9:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3
5441 // CK30-NEXT: store ptr [[TMP5]], ptr [[TMP9]], align 8
5442 // CK30-NEXT: [[TMP10:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4
5443 // CK30-NEXT: store ptr @.offload_sizes, ptr [[TMP10]], align 8
5444 // CK30-NEXT: [[TMP11:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5
5445 // CK30-NEXT: store ptr @.offload_maptypes, ptr [[TMP11]], align 8
5446 // CK30-NEXT: [[TMP12:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6
5447 // CK30-NEXT: store ptr null, ptr [[TMP12]], align 8
5448 // CK30-NEXT: [[TMP13:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7
5449 // CK30-NEXT: store ptr null, ptr [[TMP13]], align 8
5450 // CK30-NEXT: [[TMP14:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8
5451 // CK30-NEXT: store i64 0, ptr [[TMP14]], align 8
5452 // CK30-NEXT: [[TMP15:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9
5453 // CK30-NEXT: store i64 0, ptr [[TMP15]], align 8
5454 // CK30-NEXT: [[TMP16:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10
5455 // CK30-NEXT: store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP16]], align 4
5456 // CK30-NEXT: [[TMP17:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11
5457 // CK30-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP17]], align 4
5458 // CK30-NEXT: [[TMP18:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12
5459 // CK30-NEXT: store i32 0, ptr [[TMP18]], align 4
5460 // CK30-NEXT: [[TMP19:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1:[0-9]+]], i64 -1, i32 -1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3barv_l159.region_id, ptr [[KERNEL_ARGS]])
5461 // CK30-NEXT: [[TMP20:%.*]] = icmp ne i32 [[TMP19]], 0
5462 // CK30-NEXT: br i1 [[TMP20]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
5463 // CK30: omp_offload.failed:
5464 // CK30-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3barv_l159(ptr [[TMP0]]) #[[ATTR2:[0-9]+]]
5465 // CK30-NEXT: br label [[OMP_OFFLOAD_CONT]]
5466 // CK30: omp_offload.cont:
5467 // CK30-NEXT: ret void
5470 // CK30-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3barv_l159
5471 // CK30-SAME: (ptr noundef [[PTR:%.*]]) #[[ATTR1:[0-9]+]] {
5472 // CK30-NEXT: entry:
5473 // CK30-NEXT: [[PTR_ADDR:%.*]] = alloca ptr, align 8
5474 // CK30-NEXT: store ptr [[PTR]], ptr [[PTR_ADDR]], align 8
5475 // CK30-NEXT: [[TMP0:%.*]] = load ptr, ptr [[PTR_ADDR]], align 8
5476 // CK30-NEXT: store double 0.000000e+00, ptr [[TMP0]], align 8
5477 // CK30-NEXT: ret void
5480 // CK30-LABEL: define {{[^@]+}}@.omp_offloading.requires_reg
5481 // CK30-SAME: () #[[ATTR3:[0-9]+]] {
5482 // CK30-NEXT: entry:
5483 // CK30-NEXT: call void @__tgt_register_requires(i64 1)
5484 // CK30-NEXT: ret void
5487 // CK31-LABEL: define {{[^@]+}}@_Z3barv
5488 // CK31-SAME: () #[[ATTR0:[0-9]+]] {
5489 // CK31-NEXT: entry:
5490 // CK31-NEXT: [[PTR:%.*]] = alloca ptr, align 64
5491 // CK31-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 8
5492 // CK31-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 8
5493 // CK31-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 8
5494 // CK31-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8
5495 // CK31-NEXT: [[TMP0:%.*]] = load ptr, ptr [[PTR]], align 64
5496 // CK31-NEXT: [[TMP1:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
5497 // CK31-NEXT: store ptr [[TMP0]], ptr [[TMP1]], align 8
5498 // CK31-NEXT: [[TMP2:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0
5499 // CK31-NEXT: store ptr [[TMP0]], ptr [[TMP2]], align 8
5500 // CK31-NEXT: [[TMP3:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
5501 // CK31-NEXT: store ptr null, ptr [[TMP3]], align 8
5502 // CK31-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
5503 // CK31-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0
5504 // CK31-NEXT: [[TMP6:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0
5505 // CK31-NEXT: store i32 2, ptr [[TMP6]], align 4
5506 // CK31-NEXT: [[TMP7:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1
5507 // CK31-NEXT: store i32 1, ptr [[TMP7]], align 4
5508 // CK31-NEXT: [[TMP8:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2
5509 // CK31-NEXT: store ptr [[TMP4]], ptr [[TMP8]], align 8
5510 // CK31-NEXT: [[TMP9:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3
5511 // CK31-NEXT: store ptr [[TMP5]], ptr [[TMP9]], align 8
5512 // CK31-NEXT: [[TMP10:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4
5513 // CK31-NEXT: store ptr @.offload_sizes, ptr [[TMP10]], align 8
5514 // CK31-NEXT: [[TMP11:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5
5515 // CK31-NEXT: store ptr @.offload_maptypes, ptr [[TMP11]], align 8
5516 // CK31-NEXT: [[TMP12:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6
5517 // CK31-NEXT: store ptr null, ptr [[TMP12]], align 8
5518 // CK31-NEXT: [[TMP13:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7
5519 // CK31-NEXT: store ptr null, ptr [[TMP13]], align 8
5520 // CK31-NEXT: [[TMP14:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8
5521 // CK31-NEXT: store i64 0, ptr [[TMP14]], align 8
5522 // CK31-NEXT: [[TMP15:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9
5523 // CK31-NEXT: store i64 0, ptr [[TMP15]], align 8
5524 // CK31-NEXT: [[TMP16:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10
5525 // CK31-NEXT: store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP16]], align 4
5526 // CK31-NEXT: [[TMP17:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11
5527 // CK31-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP17]], align 4
5528 // CK31-NEXT: [[TMP18:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12
5529 // CK31-NEXT: store i32 0, ptr [[TMP18]], align 4
5530 // CK31-NEXT: [[TMP19:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1:[0-9]+]], i64 -1, i32 -1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3barv_l159.region_id, ptr [[KERNEL_ARGS]])
5531 // CK31-NEXT: [[TMP20:%.*]] = icmp ne i32 [[TMP19]], 0
5532 // CK31-NEXT: br i1 [[TMP20]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
5533 // CK31: omp_offload.failed:
5534 // CK31-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3barv_l159(ptr [[TMP0]]) #[[ATTR2:[0-9]+]]
5535 // CK31-NEXT: br label [[OMP_OFFLOAD_CONT]]
5536 // CK31: omp_offload.cont:
5537 // CK31-NEXT: ret void
5540 // CK31-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3barv_l159
5541 // CK31-SAME: (ptr noundef [[PTR:%.*]]) #[[ATTR1:[0-9]+]] {
5542 // CK31-NEXT: entry:
5543 // CK31-NEXT: [[PTR_ADDR:%.*]] = alloca ptr, align 8
5544 // CK31-NEXT: store ptr [[PTR]], ptr [[PTR_ADDR]], align 8
5545 // CK31-NEXT: [[TMP0:%.*]] = load ptr, ptr [[PTR_ADDR]], align 8
5546 // CK31-NEXT: store double 0.000000e+00, ptr [[TMP0]], align 8
5547 // CK31-NEXT: ret void
5550 // CK31-LABEL: define {{[^@]+}}@.omp_offloading.requires_reg
5551 // CK31-SAME: () #[[ATTR3:[0-9]+]] {
5552 // CK31-NEXT: entry:
5553 // CK31-NEXT: call void @__tgt_register_requires(i64 1)
5554 // CK31-NEXT: ret void
5557 // CK32-LABEL: define {{[^@]+}}@_Z3barv
5558 // CK32-SAME: () #[[ATTR0:[0-9]+]] {
5559 // CK32-NEXT: entry:
5560 // CK32-NEXT: [[PTR:%.*]] = alloca ptr, align 64
5561 // CK32-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 4
5562 // CK32-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 4
5563 // CK32-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 4
5564 // CK32-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8
5565 // CK32-NEXT: [[TMP0:%.*]] = load ptr, ptr [[PTR]], align 64
5566 // CK32-NEXT: [[TMP1:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
5567 // CK32-NEXT: store ptr [[TMP0]], ptr [[TMP1]], align 4
5568 // CK32-NEXT: [[TMP2:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0
5569 // CK32-NEXT: store ptr [[TMP0]], ptr [[TMP2]], align 4
5570 // CK32-NEXT: [[TMP3:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
5571 // CK32-NEXT: store ptr null, ptr [[TMP3]], align 4
5572 // CK32-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
5573 // CK32-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0
5574 // CK32-NEXT: [[TMP6:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0
5575 // CK32-NEXT: store i32 2, ptr [[TMP6]], align 4
5576 // CK32-NEXT: [[TMP7:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1
5577 // CK32-NEXT: store i32 1, ptr [[TMP7]], align 4
5578 // CK32-NEXT: [[TMP8:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2
5579 // CK32-NEXT: store ptr [[TMP4]], ptr [[TMP8]], align 4
5580 // CK32-NEXT: [[TMP9:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3
5581 // CK32-NEXT: store ptr [[TMP5]], ptr [[TMP9]], align 4
5582 // CK32-NEXT: [[TMP10:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4
5583 // CK32-NEXT: store ptr @.offload_sizes, ptr [[TMP10]], align 4
5584 // CK32-NEXT: [[TMP11:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5
5585 // CK32-NEXT: store ptr @.offload_maptypes, ptr [[TMP11]], align 4
5586 // CK32-NEXT: [[TMP12:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6
5587 // CK32-NEXT: store ptr null, ptr [[TMP12]], align 4
5588 // CK32-NEXT: [[TMP13:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7
5589 // CK32-NEXT: store ptr null, ptr [[TMP13]], align 4
5590 // CK32-NEXT: [[TMP14:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8
5591 // CK32-NEXT: store i64 0, ptr [[TMP14]], align 8
5592 // CK32-NEXT: [[TMP15:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9
5593 // CK32-NEXT: store i64 0, ptr [[TMP15]], align 8
5594 // CK32-NEXT: [[TMP16:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10
5595 // CK32-NEXT: store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP16]], align 4
5596 // CK32-NEXT: [[TMP17:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11
5597 // CK32-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP17]], align 4
5598 // CK32-NEXT: [[TMP18:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12
5599 // CK32-NEXT: store i32 0, ptr [[TMP18]], align 4
5600 // CK32-NEXT: [[TMP19:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1:[0-9]+]], i64 -1, i32 -1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3barv_l159.region_id, ptr [[KERNEL_ARGS]])
5601 // CK32-NEXT: [[TMP20:%.*]] = icmp ne i32 [[TMP19]], 0
5602 // CK32-NEXT: br i1 [[TMP20]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
5603 // CK32: omp_offload.failed:
5604 // CK32-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3barv_l159(ptr [[TMP0]]) #[[ATTR2:[0-9]+]]
5605 // CK32-NEXT: br label [[OMP_OFFLOAD_CONT]]
5606 // CK32: omp_offload.cont:
5607 // CK32-NEXT: ret void
5610 // CK32-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3barv_l159
5611 // CK32-SAME: (ptr noundef [[PTR:%.*]]) #[[ATTR1:[0-9]+]] {
5612 // CK32-NEXT: entry:
5613 // CK32-NEXT: [[PTR_ADDR:%.*]] = alloca ptr, align 4
5614 // CK32-NEXT: store ptr [[PTR]], ptr [[PTR_ADDR]], align 4
5615 // CK32-NEXT: [[TMP0:%.*]] = load ptr, ptr [[PTR_ADDR]], align 4
5616 // CK32-NEXT: store double 0.000000e+00, ptr [[TMP0]], align 4
5617 // CK32-NEXT: ret void
5620 // CK32-LABEL: define {{[^@]+}}@.omp_offloading.requires_reg
5621 // CK32-SAME: () #[[ATTR3:[0-9]+]] {
5622 // CK32-NEXT: entry:
5623 // CK32-NEXT: call void @__tgt_register_requires(i64 1)
5624 // CK32-NEXT: ret void
5627 // CK33-LABEL: define {{[^@]+}}@_Z3barv
5628 // CK33-SAME: () #[[ATTR0:[0-9]+]] {
5629 // CK33-NEXT: entry:
5630 // CK33-NEXT: [[PTR:%.*]] = alloca ptr, align 64
5631 // CK33-NEXT: [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 4
5632 // CK33-NEXT: [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 4
5633 // CK33-NEXT: [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 4
5634 // CK33-NEXT: [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8
5635 // CK33-NEXT: [[TMP0:%.*]] = load ptr, ptr [[PTR]], align 64
5636 // CK33-NEXT: [[TMP1:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
5637 // CK33-NEXT: store ptr [[TMP0]], ptr [[TMP1]], align 4
5638 // CK33-NEXT: [[TMP2:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0
5639 // CK33-NEXT: store ptr [[TMP0]], ptr [[TMP2]], align 4
5640 // CK33-NEXT: [[TMP3:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
5641 // CK33-NEXT: store ptr null, ptr [[TMP3]], align 4
5642 // CK33-NEXT: [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
5643 // CK33-NEXT: [[TMP5:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0
5644 // CK33-NEXT: [[TMP6:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0
5645 // CK33-NEXT: store i32 2, ptr [[TMP6]], align 4
5646 // CK33-NEXT: [[TMP7:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1
5647 // CK33-NEXT: store i32 1, ptr [[TMP7]], align 4
5648 // CK33-NEXT: [[TMP8:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2
5649 // CK33-NEXT: store ptr [[TMP4]], ptr [[TMP8]], align 4
5650 // CK33-NEXT: [[TMP9:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3
5651 // CK33-NEXT: store ptr [[TMP5]], ptr [[TMP9]], align 4
5652 // CK33-NEXT: [[TMP10:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4
5653 // CK33-NEXT: store ptr @.offload_sizes, ptr [[TMP10]], align 4
5654 // CK33-NEXT: [[TMP11:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5
5655 // CK33-NEXT: store ptr @.offload_maptypes, ptr [[TMP11]], align 4
5656 // CK33-NEXT: [[TMP12:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6
5657 // CK33-NEXT: store ptr null, ptr [[TMP12]], align 4
5658 // CK33-NEXT: [[TMP13:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7
5659 // CK33-NEXT: store ptr null, ptr [[TMP13]], align 4
5660 // CK33-NEXT: [[TMP14:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8
5661 // CK33-NEXT: store i64 0, ptr [[TMP14]], align 8
5662 // CK33-NEXT: [[TMP15:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9
5663 // CK33-NEXT: store i64 0, ptr [[TMP15]], align 8
5664 // CK33-NEXT: [[TMP16:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10
5665 // CK33-NEXT: store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP16]], align 4
5666 // CK33-NEXT: [[TMP17:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11
5667 // CK33-NEXT: store [3 x i32] zeroinitializer, ptr [[TMP17]], align 4
5668 // CK33-NEXT: [[TMP18:%.*]] = getelementptr inbounds [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12
5669 // CK33-NEXT: store i32 0, ptr [[TMP18]], align 4
5670 // CK33-NEXT: [[TMP19:%.*]] = call i32 @__tgt_target_kernel(ptr @[[GLOB1:[0-9]+]], i64 -1, i32 -1, i32 0, ptr @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3barv_l159.region_id, ptr [[KERNEL_ARGS]])
5671 // CK33-NEXT: [[TMP20:%.*]] = icmp ne i32 [[TMP19]], 0
5672 // CK33-NEXT: br i1 [[TMP20]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
5673 // CK33: omp_offload.failed:
5674 // CK33-NEXT: call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3barv_l159(ptr [[TMP0]]) #[[ATTR2:[0-9]+]]
5675 // CK33-NEXT: br label [[OMP_OFFLOAD_CONT]]
5676 // CK33: omp_offload.cont:
5677 // CK33-NEXT: ret void
5680 // CK33-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3barv_l159
5681 // CK33-SAME: (ptr noundef [[PTR:%.*]]) #[[ATTR1:[0-9]+]] {
5682 // CK33-NEXT: entry:
5683 // CK33-NEXT: [[PTR_ADDR:%.*]] = alloca ptr, align 4
5684 // CK33-NEXT: store ptr [[PTR]], ptr [[PTR_ADDR]], align 4
5685 // CK33-NEXT: [[TMP0:%.*]] = load ptr, ptr [[PTR_ADDR]], align 4
5686 // CK33-NEXT: store double 0.000000e+00, ptr [[TMP0]], align 4
5687 // CK33-NEXT: ret void
5690 // CK33-LABEL: define {{[^@]+}}@.omp_offloading.requires_reg
5691 // CK33-SAME: () #[[ATTR3:[0-9]+]] {
5692 // CK33-NEXT: entry:
5693 // CK33-NEXT: call void @__tgt_register_requires(i64 1)
5694 // CK33-NEXT: ret void
5697 // SIMD-ONLY20-LABEL: define {{[^@]+}}@_Z3barv
5698 // SIMD-ONLY20-SAME: () #[[ATTR0:[0-9]+]] {
5699 // SIMD-ONLY20-NEXT: entry:
5700 // SIMD-ONLY20-NEXT: [[PTR:%.*]] = alloca ptr, align 64
5701 // SIMD-ONLY20-NEXT: [[TMP0:%.*]] = load ptr, ptr [[PTR]], align 64
5702 // SIMD-ONLY20-NEXT: store double 0.000000e+00, ptr [[TMP0]], align 8
5703 // SIMD-ONLY20-NEXT: ret void
5706 // SIMD-ONLY21-LABEL: define {{[^@]+}}@_Z3barv
5707 // SIMD-ONLY21-SAME: () #[[ATTR0:[0-9]+]] {
5708 // SIMD-ONLY21-NEXT: entry:
5709 // SIMD-ONLY21-NEXT: [[PTR:%.*]] = alloca ptr, align 64
5710 // SIMD-ONLY21-NEXT: [[TMP0:%.*]] = load ptr, ptr [[PTR]], align 64
5711 // SIMD-ONLY21-NEXT: store double 0.000000e+00, ptr [[TMP0]], align 8
5712 // SIMD-ONLY21-NEXT: ret void
5715 // SIMD-ONLY22-LABEL: define {{[^@]+}}@_Z3barv
5716 // SIMD-ONLY22-SAME: () #[[ATTR0:[0-9]+]] {
5717 // SIMD-ONLY22-NEXT: entry:
5718 // SIMD-ONLY22-NEXT: [[PTR:%.*]] = alloca ptr, align 64
5719 // SIMD-ONLY22-NEXT: [[TMP0:%.*]] = load ptr, ptr [[PTR]], align 64
5720 // SIMD-ONLY22-NEXT: store double 0.000000e+00, ptr [[TMP0]], align 4
5721 // SIMD-ONLY22-NEXT: ret void
5724 // SIMD-ONLY23-LABEL: define {{[^@]+}}@_Z3barv
5725 // SIMD-ONLY23-SAME: () #[[ATTR0:[0-9]+]] {
5726 // SIMD-ONLY23-NEXT: entry:
5727 // SIMD-ONLY23-NEXT: [[PTR:%.*]] = alloca ptr, align 64
5728 // SIMD-ONLY23-NEXT: [[TMP0:%.*]] = load ptr, ptr [[PTR]], align 64
5729 // SIMD-ONLY23-NEXT: store double 0.000000e+00, ptr [[TMP0]], align 4
5730 // SIMD-ONLY23-NEXT: ret void