xref: /llvm-project/clang/test/OpenMP/target_is_device_ptr_codegen.cpp (revision 7eca38ce76d5d1915f4ab7e665964062c0b37697)
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
5 
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
13 
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
21 
22 double *g;
23 
24 
25 
26 
27 
28 
29 
30 
31 template<typename T>
32 void foo(float *&lr, T *&tr) {
33   float *l;
34   T *t;
35 
36 
37 #pragma omp target is_device_ptr(g)
38   {
39     ++g;
40   }
41 
42 
43 #pragma omp target is_device_ptr(l)
44   {
45     ++l;
46   }
47 
48 
49 #pragma omp target is_device_ptr(t)
50   {
51     ++t;
52   }
53 
54 
55 #pragma omp target is_device_ptr(lr)
56   {
57     ++lr;
58   }
59 
60 
61 #pragma omp target is_device_ptr(tr)
62   {
63     ++tr;
64   }
65 
66 
67 #pragma omp target is_device_ptr(tr, lr)
68   {
69     ++tr;
70   }
71 
72 
73 
74 #pragma omp target is_device_ptr(tr, lr)
75   {
76     ++tr,++lr;
77   }
78 }
79 
80 void bar(float *&a, int *&b) {
81   foo<int>(a,b);
82 }
83 
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
92 
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
100 
101 
102 template <typename T>
103 struct ST {
104   T *a;
105   double *&b;
106   ST(double *&b) : a(0), b(b) {}
107 
108   void foo(double *&arg) {
109     int *la = 0;
110 
111 
112 #pragma omp target is_device_ptr(a)
113     {
114       a++;
115     }
116 
117 
118 #pragma omp target is_device_ptr(b)
119     {
120       b++;
121     }
122 
123 
124 
125 #pragma omp target is_device_ptr(a, b)
126     {
127       a++;
128       b++;
129     }
130   }
131 };
132 
133 void bar(double *arg){
134   ST<double> A(arg);
135   A.foo(arg);
136   ++arg;
137 }
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
146 
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
154 
155 // OMP_MAP_TARGET_PARAM = 0x20 | OMP_MAP_TO = 0x1 = 0x21
156 void bar() {
157   __attribute__((aligned(64))) double *ptr;
158 
159 #pragma omp target is_device_ptr(ptr)
160   *ptr = 0;
161 }
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
1776 //
1777 //
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 nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0
1830 // CK10-NEXT:    store i32 3, ptr [[TMP6]], align 4
1831 // CK10-NEXT:    [[TMP7:%.*]] = getelementptr inbounds nuw [[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 nuw [[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 nuw [[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 nuw [[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 nuw [[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 nuw [[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 nuw [[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 nuw [[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 nuw [[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 nuw [[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 nuw [[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 nuw [[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 nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 0
1872 // CK10-NEXT:    store i32 3, ptr [[TMP27]], align 4
1873 // CK10-NEXT:    [[TMP28:%.*]] = getelementptr inbounds nuw [[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 nuw [[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 nuw [[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 nuw [[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 nuw [[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 nuw [[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 nuw [[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 nuw [[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 nuw [[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 nuw [[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 nuw [[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 nuw [[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 nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 0
1914 // CK10-NEXT:    store i32 3, ptr [[TMP48]], align 4
1915 // CK10-NEXT:    [[TMP49:%.*]] = getelementptr inbounds nuw [[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 nuw [[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 nuw [[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 nuw [[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 nuw [[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 nuw [[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 nuw [[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 nuw [[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 nuw [[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 nuw [[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 nuw [[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 nuw [[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 nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 0
1959 // CK10-NEXT:    store i32 3, ptr [[TMP71]], align 4
1960 // CK10-NEXT:    [[TMP72:%.*]] = getelementptr inbounds nuw [[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 nuw [[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 nuw [[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 nuw [[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 nuw [[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 nuw [[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 nuw [[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 nuw [[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 nuw [[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 nuw [[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 nuw [[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 nuw [[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 nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 0
2004 // CK10-NEXT:    store i32 3, ptr [[TMP94]], align 4
2005 // CK10-NEXT:    [[TMP95:%.*]] = getelementptr inbounds nuw [[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 nuw [[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 nuw [[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 nuw [[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 nuw [[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 nuw [[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 nuw [[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 nuw [[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 nuw [[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 nuw [[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 nuw [[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 nuw [[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 nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 0
2049 // CK10-NEXT:    store i32 3, ptr [[TMP117]], align 4
2050 // CK10-NEXT:    [[TMP118:%.*]] = getelementptr inbounds nuw [[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 nuw [[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 nuw [[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 nuw [[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 nuw [[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 nuw [[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 nuw [[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 nuw [[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 nuw [[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 nuw [[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 nuw [[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 nuw [[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 nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 0
2104 // CK10-NEXT:    store i32 3, ptr [[TMP146]], align 4
2105 // CK10-NEXT:    [[TMP147:%.*]] = getelementptr inbounds nuw [[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 nuw [[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 nuw [[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 nuw [[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 nuw [[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 nuw [[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 nuw [[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 nuw [[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 nuw [[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 nuw [[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 nuw [[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 nuw [[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
2137 //
2138 //
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 nuw double, ptr [[TMP0]], i32 1
2146 // CK10-NEXT:    store ptr [[INCDEC_PTR]], ptr [[G_ADDR]], align 8
2147 // CK10-NEXT:    ret void
2148 //
2149 //
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 nuw float, ptr [[TMP0]], i32 1
2157 // CK10-NEXT:    store ptr [[INCDEC_PTR]], ptr [[L_ADDR]], align 8
2158 // CK10-NEXT:    ret void
2159 //
2160 //
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 nuw i32, ptr [[TMP0]], i32 1
2168 // CK10-NEXT:    store ptr [[INCDEC_PTR]], ptr [[T_ADDR]], align 8
2169 // CK10-NEXT:    ret void
2170 //
2171 //
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 nuw float, ptr [[TMP1]], i32 1
2182 // CK10-NEXT:    store ptr [[INCDEC_PTR]], ptr [[TMP0]], align 8
2183 // CK10-NEXT:    ret void
2184 //
2185 //
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 nuw i32, ptr [[TMP1]], i32 1
2196 // CK10-NEXT:    store ptr [[INCDEC_PTR]], ptr [[TMP0]], align 8
2197 // CK10-NEXT:    ret void
2198 //
2199 //
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 nuw i32, ptr [[TMP1]], i32 1
2210 // CK10-NEXT:    store ptr [[INCDEC_PTR]], ptr [[TMP0]], align 8
2211 // CK10-NEXT:    ret void
2212 //
2213 //
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 nuw 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 nuw float, ptr [[TMP3]], i32 1
2232 // CK10-NEXT:    store ptr [[INCDEC_PTR2]], ptr [[TMP2]], align 8
2233 // CK10-NEXT:    ret void
2234 //
2235 //
2236 // CK11-LABEL: define {{[^@]+}}@_Z3barRPfRPi
2237 // CK11-SAME: (ptr noundef nonnull align 8 dereferenceable(8) [[A:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[B:%.*]]) #[[ATTR0:[0-9]+]] {
2238 // CK11-NEXT:  entry:
2239 // CK11-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 8
2240 // CK11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 8
2241 // CK11-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 8
2242 // CK11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 8
2243 // CK11-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 8
2244 // CK11-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[B_ADDR]], align 8
2245 // CK11-NEXT:    call void @_Z3fooIiEvRPfRPT_(ptr noundef nonnull align 8 dereferenceable(8) [[TMP0]], ptr noundef nonnull align 8 dereferenceable(8) [[TMP1]])
2246 // CK11-NEXT:    ret void
2247 //
2248 //
2249 // CK11-LABEL: define {{[^@]+}}@_Z3fooIiEvRPfRPT_
2250 // CK11-SAME: (ptr noundef nonnull align 8 dereferenceable(8) [[LR:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[TR:%.*]]) #[[ATTR0]] comdat {
2251 // CK11-NEXT:  entry:
2252 // CK11-NEXT:    [[LR_ADDR:%.*]] = alloca ptr, align 8
2253 // CK11-NEXT:    [[TR_ADDR:%.*]] = alloca ptr, align 8
2254 // CK11-NEXT:    [[L:%.*]] = alloca ptr, align 8
2255 // CK11-NEXT:    [[T:%.*]] = alloca ptr, align 8
2256 // CK11-NEXT:    [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 8
2257 // CK11-NEXT:    [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 8
2258 // CK11-NEXT:    [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 8
2259 // CK11-NEXT:    [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8
2260 // CK11-NEXT:    [[DOTOFFLOAD_BASEPTRS1:%.*]] = alloca [1 x ptr], align 8
2261 // CK11-NEXT:    [[DOTOFFLOAD_PTRS2:%.*]] = alloca [1 x ptr], align 8
2262 // CK11-NEXT:    [[DOTOFFLOAD_MAPPERS3:%.*]] = alloca [1 x ptr], align 8
2263 // CK11-NEXT:    [[KERNEL_ARGS4:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
2264 // CK11-NEXT:    [[DOTOFFLOAD_BASEPTRS7:%.*]] = alloca [1 x ptr], align 8
2265 // CK11-NEXT:    [[DOTOFFLOAD_PTRS8:%.*]] = alloca [1 x ptr], align 8
2266 // CK11-NEXT:    [[DOTOFFLOAD_MAPPERS9:%.*]] = alloca [1 x ptr], align 8
2267 // CK11-NEXT:    [[KERNEL_ARGS10:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
2268 // CK11-NEXT:    [[TMP:%.*]] = alloca ptr, align 8
2269 // CK11-NEXT:    [[DOTOFFLOAD_BASEPTRS13:%.*]] = alloca [1 x ptr], align 8
2270 // CK11-NEXT:    [[DOTOFFLOAD_PTRS14:%.*]] = alloca [1 x ptr], align 8
2271 // CK11-NEXT:    [[DOTOFFLOAD_MAPPERS15:%.*]] = alloca [1 x ptr], align 8
2272 // CK11-NEXT:    [[KERNEL_ARGS16:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
2273 // CK11-NEXT:    [[_TMP19:%.*]] = alloca ptr, align 8
2274 // CK11-NEXT:    [[DOTOFFLOAD_BASEPTRS20:%.*]] = alloca [1 x ptr], align 8
2275 // CK11-NEXT:    [[DOTOFFLOAD_PTRS21:%.*]] = alloca [1 x ptr], align 8
2276 // CK11-NEXT:    [[DOTOFFLOAD_MAPPERS22:%.*]] = alloca [1 x ptr], align 8
2277 // CK11-NEXT:    [[KERNEL_ARGS23:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
2278 // CK11-NEXT:    [[_TMP26:%.*]] = alloca ptr, align 8
2279 // CK11-NEXT:    [[DOTOFFLOAD_BASEPTRS27:%.*]] = alloca [1 x ptr], align 8
2280 // CK11-NEXT:    [[DOTOFFLOAD_PTRS28:%.*]] = alloca [1 x ptr], align 8
2281 // CK11-NEXT:    [[DOTOFFLOAD_MAPPERS29:%.*]] = alloca [1 x ptr], align 8
2282 // CK11-NEXT:    [[KERNEL_ARGS30:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
2283 // CK11-NEXT:    [[_TMP33:%.*]] = alloca ptr, align 8
2284 // CK11-NEXT:    [[_TMP34:%.*]] = alloca ptr, align 8
2285 // CK11-NEXT:    [[DOTOFFLOAD_BASEPTRS35:%.*]] = alloca [2 x ptr], align 8
2286 // CK11-NEXT:    [[DOTOFFLOAD_PTRS36:%.*]] = alloca [2 x ptr], align 8
2287 // CK11-NEXT:    [[DOTOFFLOAD_MAPPERS37:%.*]] = alloca [2 x ptr], align 8
2288 // CK11-NEXT:    [[KERNEL_ARGS38:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
2289 // CK11-NEXT:    store ptr [[LR]], ptr [[LR_ADDR]], align 8
2290 // CK11-NEXT:    store ptr [[TR]], ptr [[TR_ADDR]], align 8
2291 // CK11-NEXT:    [[TMP0:%.*]] = load ptr, ptr @g, align 8
2292 // CK11-NEXT:    [[TMP1:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
2293 // CK11-NEXT:    store ptr [[TMP0]], ptr [[TMP1]], align 8
2294 // CK11-NEXT:    [[TMP2:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0
2295 // CK11-NEXT:    store ptr [[TMP0]], ptr [[TMP2]], align 8
2296 // CK11-NEXT:    [[TMP3:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
2297 // CK11-NEXT:    store ptr null, ptr [[TMP3]], align 8
2298 // CK11-NEXT:    [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
2299 // CK11-NEXT:    [[TMP5:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0
2300 // CK11-NEXT:    [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0
2301 // CK11-NEXT:    store i32 3, ptr [[TMP6]], align 4
2302 // CK11-NEXT:    [[TMP7:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1
2303 // CK11-NEXT:    store i32 1, ptr [[TMP7]], align 4
2304 // CK11-NEXT:    [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2
2305 // CK11-NEXT:    store ptr [[TMP4]], ptr [[TMP8]], align 8
2306 // CK11-NEXT:    [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3
2307 // CK11-NEXT:    store ptr [[TMP5]], ptr [[TMP9]], align 8
2308 // CK11-NEXT:    [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4
2309 // CK11-NEXT:    store ptr @.offload_sizes, ptr [[TMP10]], align 8
2310 // CK11-NEXT:    [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5
2311 // CK11-NEXT:    store ptr @.offload_maptypes, ptr [[TMP11]], align 8
2312 // CK11-NEXT:    [[TMP12:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6
2313 // CK11-NEXT:    store ptr null, ptr [[TMP12]], align 8
2314 // CK11-NEXT:    [[TMP13:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7
2315 // CK11-NEXT:    store ptr null, ptr [[TMP13]], align 8
2316 // CK11-NEXT:    [[TMP14:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8
2317 // CK11-NEXT:    store i64 0, ptr [[TMP14]], align 8
2318 // CK11-NEXT:    [[TMP15:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9
2319 // CK11-NEXT:    store i64 0, ptr [[TMP15]], align 8
2320 // CK11-NEXT:    [[TMP16:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10
2321 // CK11-NEXT:    store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP16]], align 4
2322 // CK11-NEXT:    [[TMP17:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11
2323 // CK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP17]], align 4
2324 // CK11-NEXT:    [[TMP18:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12
2325 // CK11-NEXT:    store i32 0, ptr [[TMP18]], align 4
2326 // 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]])
2327 // CK11-NEXT:    [[TMP20:%.*]] = icmp ne i32 [[TMP19]], 0
2328 // CK11-NEXT:    br i1 [[TMP20]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
2329 // CK11:       omp_offload.failed:
2330 // CK11-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l37(ptr [[TMP0]]) #[[ATTR2:[0-9]+]]
2331 // CK11-NEXT:    br label [[OMP_OFFLOAD_CONT]]
2332 // CK11:       omp_offload.cont:
2333 // CK11-NEXT:    [[TMP21:%.*]] = load ptr, ptr [[L]], align 8
2334 // CK11-NEXT:    [[TMP22:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS1]], i32 0, i32 0
2335 // CK11-NEXT:    store ptr [[TMP21]], ptr [[TMP22]], align 8
2336 // CK11-NEXT:    [[TMP23:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS2]], i32 0, i32 0
2337 // CK11-NEXT:    store ptr [[TMP21]], ptr [[TMP23]], align 8
2338 // CK11-NEXT:    [[TMP24:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS3]], i64 0, i64 0
2339 // CK11-NEXT:    store ptr null, ptr [[TMP24]], align 8
2340 // CK11-NEXT:    [[TMP25:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS1]], i32 0, i32 0
2341 // CK11-NEXT:    [[TMP26:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS2]], i32 0, i32 0
2342 // CK11-NEXT:    [[TMP27:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 0
2343 // CK11-NEXT:    store i32 3, ptr [[TMP27]], align 4
2344 // CK11-NEXT:    [[TMP28:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 1
2345 // CK11-NEXT:    store i32 1, ptr [[TMP28]], align 4
2346 // CK11-NEXT:    [[TMP29:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 2
2347 // CK11-NEXT:    store ptr [[TMP25]], ptr [[TMP29]], align 8
2348 // CK11-NEXT:    [[TMP30:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 3
2349 // CK11-NEXT:    store ptr [[TMP26]], ptr [[TMP30]], align 8
2350 // CK11-NEXT:    [[TMP31:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 4
2351 // CK11-NEXT:    store ptr @.offload_sizes.1, ptr [[TMP31]], align 8
2352 // CK11-NEXT:    [[TMP32:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 5
2353 // CK11-NEXT:    store ptr @.offload_maptypes.2, ptr [[TMP32]], align 8
2354 // CK11-NEXT:    [[TMP33:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 6
2355 // CK11-NEXT:    store ptr null, ptr [[TMP33]], align 8
2356 // CK11-NEXT:    [[TMP34:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 7
2357 // CK11-NEXT:    store ptr null, ptr [[TMP34]], align 8
2358 // CK11-NEXT:    [[TMP35:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 8
2359 // CK11-NEXT:    store i64 0, ptr [[TMP35]], align 8
2360 // CK11-NEXT:    [[TMP36:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 9
2361 // CK11-NEXT:    store i64 0, ptr [[TMP36]], align 8
2362 // CK11-NEXT:    [[TMP37:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 10
2363 // CK11-NEXT:    store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP37]], align 4
2364 // CK11-NEXT:    [[TMP38:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 11
2365 // CK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP38]], align 4
2366 // CK11-NEXT:    [[TMP39:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 12
2367 // CK11-NEXT:    store i32 0, ptr [[TMP39]], align 4
2368 // 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]])
2369 // CK11-NEXT:    [[TMP41:%.*]] = icmp ne i32 [[TMP40]], 0
2370 // CK11-NEXT:    br i1 [[TMP41]], label [[OMP_OFFLOAD_FAILED5:%.*]], label [[OMP_OFFLOAD_CONT6:%.*]]
2371 // CK11:       omp_offload.failed5:
2372 // CK11-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l43(ptr [[TMP21]]) #[[ATTR2]]
2373 // CK11-NEXT:    br label [[OMP_OFFLOAD_CONT6]]
2374 // CK11:       omp_offload.cont6:
2375 // CK11-NEXT:    [[TMP42:%.*]] = load ptr, ptr [[T]], align 8
2376 // CK11-NEXT:    [[TMP43:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS7]], i32 0, i32 0
2377 // CK11-NEXT:    store ptr [[TMP42]], ptr [[TMP43]], align 8
2378 // CK11-NEXT:    [[TMP44:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS8]], i32 0, i32 0
2379 // CK11-NEXT:    store ptr [[TMP42]], ptr [[TMP44]], align 8
2380 // CK11-NEXT:    [[TMP45:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS9]], i64 0, i64 0
2381 // CK11-NEXT:    store ptr null, ptr [[TMP45]], align 8
2382 // CK11-NEXT:    [[TMP46:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS7]], i32 0, i32 0
2383 // CK11-NEXT:    [[TMP47:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS8]], i32 0, i32 0
2384 // CK11-NEXT:    [[TMP48:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 0
2385 // CK11-NEXT:    store i32 3, ptr [[TMP48]], align 4
2386 // CK11-NEXT:    [[TMP49:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 1
2387 // CK11-NEXT:    store i32 1, ptr [[TMP49]], align 4
2388 // CK11-NEXT:    [[TMP50:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 2
2389 // CK11-NEXT:    store ptr [[TMP46]], ptr [[TMP50]], align 8
2390 // CK11-NEXT:    [[TMP51:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 3
2391 // CK11-NEXT:    store ptr [[TMP47]], ptr [[TMP51]], align 8
2392 // CK11-NEXT:    [[TMP52:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 4
2393 // CK11-NEXT:    store ptr @.offload_sizes.3, ptr [[TMP52]], align 8
2394 // CK11-NEXT:    [[TMP53:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 5
2395 // CK11-NEXT:    store ptr @.offload_maptypes.4, ptr [[TMP53]], align 8
2396 // CK11-NEXT:    [[TMP54:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 6
2397 // CK11-NEXT:    store ptr null, ptr [[TMP54]], align 8
2398 // CK11-NEXT:    [[TMP55:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 7
2399 // CK11-NEXT:    store ptr null, ptr [[TMP55]], align 8
2400 // CK11-NEXT:    [[TMP56:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 8
2401 // CK11-NEXT:    store i64 0, ptr [[TMP56]], align 8
2402 // CK11-NEXT:    [[TMP57:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 9
2403 // CK11-NEXT:    store i64 0, ptr [[TMP57]], align 8
2404 // CK11-NEXT:    [[TMP58:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 10
2405 // CK11-NEXT:    store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP58]], align 4
2406 // CK11-NEXT:    [[TMP59:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 11
2407 // CK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP59]], align 4
2408 // CK11-NEXT:    [[TMP60:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 12
2409 // CK11-NEXT:    store i32 0, ptr [[TMP60]], align 4
2410 // 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]])
2411 // CK11-NEXT:    [[TMP62:%.*]] = icmp ne i32 [[TMP61]], 0
2412 // CK11-NEXT:    br i1 [[TMP62]], label [[OMP_OFFLOAD_FAILED11:%.*]], label [[OMP_OFFLOAD_CONT12:%.*]]
2413 // CK11:       omp_offload.failed11:
2414 // CK11-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l49(ptr [[TMP42]]) #[[ATTR2]]
2415 // CK11-NEXT:    br label [[OMP_OFFLOAD_CONT12]]
2416 // CK11:       omp_offload.cont12:
2417 // CK11-NEXT:    [[TMP63:%.*]] = load ptr, ptr [[LR_ADDR]], align 8
2418 // CK11-NEXT:    store ptr [[TMP63]], ptr [[TMP]], align 8
2419 // CK11-NEXT:    [[TMP64:%.*]] = load ptr, ptr [[TMP]], align 8
2420 // CK11-NEXT:    [[TMP65:%.*]] = load ptr, ptr [[TMP64]], align 8
2421 // CK11-NEXT:    [[TMP66:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS13]], i32 0, i32 0
2422 // CK11-NEXT:    store ptr [[TMP65]], ptr [[TMP66]], align 8
2423 // CK11-NEXT:    [[TMP67:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS14]], i32 0, i32 0
2424 // CK11-NEXT:    store ptr [[TMP65]], ptr [[TMP67]], align 8
2425 // CK11-NEXT:    [[TMP68:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS15]], i64 0, i64 0
2426 // CK11-NEXT:    store ptr null, ptr [[TMP68]], align 8
2427 // CK11-NEXT:    [[TMP69:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS13]], i32 0, i32 0
2428 // CK11-NEXT:    [[TMP70:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS14]], i32 0, i32 0
2429 // CK11-NEXT:    [[TMP71:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 0
2430 // CK11-NEXT:    store i32 3, ptr [[TMP71]], align 4
2431 // CK11-NEXT:    [[TMP72:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 1
2432 // CK11-NEXT:    store i32 1, ptr [[TMP72]], align 4
2433 // CK11-NEXT:    [[TMP73:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 2
2434 // CK11-NEXT:    store ptr [[TMP69]], ptr [[TMP73]], align 8
2435 // CK11-NEXT:    [[TMP74:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 3
2436 // CK11-NEXT:    store ptr [[TMP70]], ptr [[TMP74]], align 8
2437 // CK11-NEXT:    [[TMP75:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 4
2438 // CK11-NEXT:    store ptr @.offload_sizes.5, ptr [[TMP75]], align 8
2439 // CK11-NEXT:    [[TMP76:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 5
2440 // CK11-NEXT:    store ptr @.offload_maptypes.6, ptr [[TMP76]], align 8
2441 // CK11-NEXT:    [[TMP77:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 6
2442 // CK11-NEXT:    store ptr null, ptr [[TMP77]], align 8
2443 // CK11-NEXT:    [[TMP78:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 7
2444 // CK11-NEXT:    store ptr null, ptr [[TMP78]], align 8
2445 // CK11-NEXT:    [[TMP79:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 8
2446 // CK11-NEXT:    store i64 0, ptr [[TMP79]], align 8
2447 // CK11-NEXT:    [[TMP80:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 9
2448 // CK11-NEXT:    store i64 0, ptr [[TMP80]], align 8
2449 // CK11-NEXT:    [[TMP81:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 10
2450 // CK11-NEXT:    store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP81]], align 4
2451 // CK11-NEXT:    [[TMP82:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 11
2452 // CK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP82]], align 4
2453 // CK11-NEXT:    [[TMP83:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 12
2454 // CK11-NEXT:    store i32 0, ptr [[TMP83]], align 4
2455 // 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]])
2456 // CK11-NEXT:    [[TMP85:%.*]] = icmp ne i32 [[TMP84]], 0
2457 // CK11-NEXT:    br i1 [[TMP85]], label [[OMP_OFFLOAD_FAILED17:%.*]], label [[OMP_OFFLOAD_CONT18:%.*]]
2458 // CK11:       omp_offload.failed17:
2459 // CK11-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l55(ptr [[TMP65]]) #[[ATTR2]]
2460 // CK11-NEXT:    br label [[OMP_OFFLOAD_CONT18]]
2461 // CK11:       omp_offload.cont18:
2462 // CK11-NEXT:    [[TMP86:%.*]] = load ptr, ptr [[TR_ADDR]], align 8
2463 // CK11-NEXT:    store ptr [[TMP86]], ptr [[_TMP19]], align 8
2464 // CK11-NEXT:    [[TMP87:%.*]] = load ptr, ptr [[_TMP19]], align 8
2465 // CK11-NEXT:    [[TMP88:%.*]] = load ptr, ptr [[TMP87]], align 8
2466 // CK11-NEXT:    [[TMP89:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS20]], i32 0, i32 0
2467 // CK11-NEXT:    store ptr [[TMP88]], ptr [[TMP89]], align 8
2468 // CK11-NEXT:    [[TMP90:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS21]], i32 0, i32 0
2469 // CK11-NEXT:    store ptr [[TMP88]], ptr [[TMP90]], align 8
2470 // CK11-NEXT:    [[TMP91:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS22]], i64 0, i64 0
2471 // CK11-NEXT:    store ptr null, ptr [[TMP91]], align 8
2472 // CK11-NEXT:    [[TMP92:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS20]], i32 0, i32 0
2473 // CK11-NEXT:    [[TMP93:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS21]], i32 0, i32 0
2474 // CK11-NEXT:    [[TMP94:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 0
2475 // CK11-NEXT:    store i32 3, ptr [[TMP94]], align 4
2476 // CK11-NEXT:    [[TMP95:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 1
2477 // CK11-NEXT:    store i32 1, ptr [[TMP95]], align 4
2478 // CK11-NEXT:    [[TMP96:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 2
2479 // CK11-NEXT:    store ptr [[TMP92]], ptr [[TMP96]], align 8
2480 // CK11-NEXT:    [[TMP97:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 3
2481 // CK11-NEXT:    store ptr [[TMP93]], ptr [[TMP97]], align 8
2482 // CK11-NEXT:    [[TMP98:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 4
2483 // CK11-NEXT:    store ptr @.offload_sizes.7, ptr [[TMP98]], align 8
2484 // CK11-NEXT:    [[TMP99:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 5
2485 // CK11-NEXT:    store ptr @.offload_maptypes.8, ptr [[TMP99]], align 8
2486 // CK11-NEXT:    [[TMP100:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 6
2487 // CK11-NEXT:    store ptr null, ptr [[TMP100]], align 8
2488 // CK11-NEXT:    [[TMP101:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 7
2489 // CK11-NEXT:    store ptr null, ptr [[TMP101]], align 8
2490 // CK11-NEXT:    [[TMP102:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 8
2491 // CK11-NEXT:    store i64 0, ptr [[TMP102]], align 8
2492 // CK11-NEXT:    [[TMP103:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 9
2493 // CK11-NEXT:    store i64 0, ptr [[TMP103]], align 8
2494 // CK11-NEXT:    [[TMP104:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 10
2495 // CK11-NEXT:    store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP104]], align 4
2496 // CK11-NEXT:    [[TMP105:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 11
2497 // CK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP105]], align 4
2498 // CK11-NEXT:    [[TMP106:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 12
2499 // CK11-NEXT:    store i32 0, ptr [[TMP106]], align 4
2500 // 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]])
2501 // CK11-NEXT:    [[TMP108:%.*]] = icmp ne i32 [[TMP107]], 0
2502 // CK11-NEXT:    br i1 [[TMP108]], label [[OMP_OFFLOAD_FAILED24:%.*]], label [[OMP_OFFLOAD_CONT25:%.*]]
2503 // CK11:       omp_offload.failed24:
2504 // CK11-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l61(ptr [[TMP88]]) #[[ATTR2]]
2505 // CK11-NEXT:    br label [[OMP_OFFLOAD_CONT25]]
2506 // CK11:       omp_offload.cont25:
2507 // CK11-NEXT:    [[TMP109:%.*]] = load ptr, ptr [[TR_ADDR]], align 8
2508 // CK11-NEXT:    store ptr [[TMP109]], ptr [[_TMP26]], align 8
2509 // CK11-NEXT:    [[TMP110:%.*]] = load ptr, ptr [[_TMP26]], align 8
2510 // CK11-NEXT:    [[TMP111:%.*]] = load ptr, ptr [[TMP110]], align 8
2511 // CK11-NEXT:    [[TMP112:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS27]], i32 0, i32 0
2512 // CK11-NEXT:    store ptr [[TMP111]], ptr [[TMP112]], align 8
2513 // CK11-NEXT:    [[TMP113:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS28]], i32 0, i32 0
2514 // CK11-NEXT:    store ptr [[TMP111]], ptr [[TMP113]], align 8
2515 // CK11-NEXT:    [[TMP114:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS29]], i64 0, i64 0
2516 // CK11-NEXT:    store ptr null, ptr [[TMP114]], align 8
2517 // CK11-NEXT:    [[TMP115:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS27]], i32 0, i32 0
2518 // CK11-NEXT:    [[TMP116:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS28]], i32 0, i32 0
2519 // CK11-NEXT:    [[TMP117:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 0
2520 // CK11-NEXT:    store i32 3, ptr [[TMP117]], align 4
2521 // CK11-NEXT:    [[TMP118:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 1
2522 // CK11-NEXT:    store i32 1, ptr [[TMP118]], align 4
2523 // CK11-NEXT:    [[TMP119:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 2
2524 // CK11-NEXT:    store ptr [[TMP115]], ptr [[TMP119]], align 8
2525 // CK11-NEXT:    [[TMP120:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 3
2526 // CK11-NEXT:    store ptr [[TMP116]], ptr [[TMP120]], align 8
2527 // CK11-NEXT:    [[TMP121:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 4
2528 // CK11-NEXT:    store ptr @.offload_sizes.9, ptr [[TMP121]], align 8
2529 // CK11-NEXT:    [[TMP122:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 5
2530 // CK11-NEXT:    store ptr @.offload_maptypes.10, ptr [[TMP122]], align 8
2531 // CK11-NEXT:    [[TMP123:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 6
2532 // CK11-NEXT:    store ptr null, ptr [[TMP123]], align 8
2533 // CK11-NEXT:    [[TMP124:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 7
2534 // CK11-NEXT:    store ptr null, ptr [[TMP124]], align 8
2535 // CK11-NEXT:    [[TMP125:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 8
2536 // CK11-NEXT:    store i64 0, ptr [[TMP125]], align 8
2537 // CK11-NEXT:    [[TMP126:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 9
2538 // CK11-NEXT:    store i64 0, ptr [[TMP126]], align 8
2539 // CK11-NEXT:    [[TMP127:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 10
2540 // CK11-NEXT:    store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP127]], align 4
2541 // CK11-NEXT:    [[TMP128:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 11
2542 // CK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP128]], align 4
2543 // CK11-NEXT:    [[TMP129:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 12
2544 // CK11-NEXT:    store i32 0, ptr [[TMP129]], align 4
2545 // 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]])
2546 // CK11-NEXT:    [[TMP131:%.*]] = icmp ne i32 [[TMP130]], 0
2547 // CK11-NEXT:    br i1 [[TMP131]], label [[OMP_OFFLOAD_FAILED31:%.*]], label [[OMP_OFFLOAD_CONT32:%.*]]
2548 // CK11:       omp_offload.failed31:
2549 // CK11-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l67(ptr [[TMP111]]) #[[ATTR2]]
2550 // CK11-NEXT:    br label [[OMP_OFFLOAD_CONT32]]
2551 // CK11:       omp_offload.cont32:
2552 // CK11-NEXT:    [[TMP132:%.*]] = load ptr, ptr [[TR_ADDR]], align 8
2553 // CK11-NEXT:    store ptr [[TMP132]], ptr [[_TMP33]], align 8
2554 // CK11-NEXT:    [[TMP133:%.*]] = load ptr, ptr [[LR_ADDR]], align 8
2555 // CK11-NEXT:    store ptr [[TMP133]], ptr [[_TMP34]], align 8
2556 // CK11-NEXT:    [[TMP134:%.*]] = load ptr, ptr [[_TMP33]], align 8
2557 // CK11-NEXT:    [[TMP135:%.*]] = load ptr, ptr [[TMP134]], align 8
2558 // CK11-NEXT:    [[TMP136:%.*]] = load ptr, ptr [[_TMP34]], align 8
2559 // CK11-NEXT:    [[TMP137:%.*]] = load ptr, ptr [[TMP136]], align 8
2560 // CK11-NEXT:    [[TMP138:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS35]], i32 0, i32 0
2561 // CK11-NEXT:    store ptr [[TMP135]], ptr [[TMP138]], align 8
2562 // CK11-NEXT:    [[TMP139:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS36]], i32 0, i32 0
2563 // CK11-NEXT:    store ptr [[TMP135]], ptr [[TMP139]], align 8
2564 // CK11-NEXT:    [[TMP140:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_MAPPERS37]], i64 0, i64 0
2565 // CK11-NEXT:    store ptr null, ptr [[TMP140]], align 8
2566 // CK11-NEXT:    [[TMP141:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS35]], i32 0, i32 1
2567 // CK11-NEXT:    store ptr [[TMP137]], ptr [[TMP141]], align 8
2568 // CK11-NEXT:    [[TMP142:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS36]], i32 0, i32 1
2569 // CK11-NEXT:    store ptr [[TMP137]], ptr [[TMP142]], align 8
2570 // CK11-NEXT:    [[TMP143:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_MAPPERS37]], i64 0, i64 1
2571 // CK11-NEXT:    store ptr null, ptr [[TMP143]], align 8
2572 // CK11-NEXT:    [[TMP144:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS35]], i32 0, i32 0
2573 // CK11-NEXT:    [[TMP145:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS36]], i32 0, i32 0
2574 // CK11-NEXT:    [[TMP146:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 0
2575 // CK11-NEXT:    store i32 3, ptr [[TMP146]], align 4
2576 // CK11-NEXT:    [[TMP147:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 1
2577 // CK11-NEXT:    store i32 2, ptr [[TMP147]], align 4
2578 // CK11-NEXT:    [[TMP148:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 2
2579 // CK11-NEXT:    store ptr [[TMP144]], ptr [[TMP148]], align 8
2580 // CK11-NEXT:    [[TMP149:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 3
2581 // CK11-NEXT:    store ptr [[TMP145]], ptr [[TMP149]], align 8
2582 // CK11-NEXT:    [[TMP150:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 4
2583 // CK11-NEXT:    store ptr @.offload_sizes.11, ptr [[TMP150]], align 8
2584 // CK11-NEXT:    [[TMP151:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 5
2585 // CK11-NEXT:    store ptr @.offload_maptypes.12, ptr [[TMP151]], align 8
2586 // CK11-NEXT:    [[TMP152:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 6
2587 // CK11-NEXT:    store ptr null, ptr [[TMP152]], align 8
2588 // CK11-NEXT:    [[TMP153:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 7
2589 // CK11-NEXT:    store ptr null, ptr [[TMP153]], align 8
2590 // CK11-NEXT:    [[TMP154:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 8
2591 // CK11-NEXT:    store i64 0, ptr [[TMP154]], align 8
2592 // CK11-NEXT:    [[TMP155:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 9
2593 // CK11-NEXT:    store i64 0, ptr [[TMP155]], align 8
2594 // CK11-NEXT:    [[TMP156:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 10
2595 // CK11-NEXT:    store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP156]], align 4
2596 // CK11-NEXT:    [[TMP157:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 11
2597 // CK11-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP157]], align 4
2598 // CK11-NEXT:    [[TMP158:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 12
2599 // CK11-NEXT:    store i32 0, ptr [[TMP158]], align 4
2600 // 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]])
2601 // CK11-NEXT:    [[TMP160:%.*]] = icmp ne i32 [[TMP159]], 0
2602 // CK11-NEXT:    br i1 [[TMP160]], label [[OMP_OFFLOAD_FAILED39:%.*]], label [[OMP_OFFLOAD_CONT40:%.*]]
2603 // CK11:       omp_offload.failed39:
2604 // CK11-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l74(ptr [[TMP135]], ptr [[TMP137]]) #[[ATTR2]]
2605 // CK11-NEXT:    br label [[OMP_OFFLOAD_CONT40]]
2606 // CK11:       omp_offload.cont40:
2607 // CK11-NEXT:    ret void
2608 //
2609 //
2610 // CK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l37
2611 // CK11-SAME: (ptr noundef [[G:%.*]]) #[[ATTR1:[0-9]+]] {
2612 // CK11-NEXT:  entry:
2613 // CK11-NEXT:    [[G_ADDR:%.*]] = alloca ptr, align 8
2614 // CK11-NEXT:    store ptr [[G]], ptr [[G_ADDR]], align 8
2615 // CK11-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[G_ADDR]], align 8
2616 // CK11-NEXT:    [[INCDEC_PTR:%.*]] = getelementptr inbounds nuw double, ptr [[TMP0]], i32 1
2617 // CK11-NEXT:    store ptr [[INCDEC_PTR]], ptr [[G_ADDR]], align 8
2618 // CK11-NEXT:    ret void
2619 //
2620 //
2621 // CK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l43
2622 // CK11-SAME: (ptr noundef [[L:%.*]]) #[[ATTR1]] {
2623 // CK11-NEXT:  entry:
2624 // CK11-NEXT:    [[L_ADDR:%.*]] = alloca ptr, align 8
2625 // CK11-NEXT:    store ptr [[L]], ptr [[L_ADDR]], align 8
2626 // CK11-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[L_ADDR]], align 8
2627 // CK11-NEXT:    [[INCDEC_PTR:%.*]] = getelementptr inbounds nuw float, ptr [[TMP0]], i32 1
2628 // CK11-NEXT:    store ptr [[INCDEC_PTR]], ptr [[L_ADDR]], align 8
2629 // CK11-NEXT:    ret void
2630 //
2631 //
2632 // CK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l49
2633 // CK11-SAME: (ptr noundef [[T:%.*]]) #[[ATTR1]] {
2634 // CK11-NEXT:  entry:
2635 // CK11-NEXT:    [[T_ADDR:%.*]] = alloca ptr, align 8
2636 // CK11-NEXT:    store ptr [[T]], ptr [[T_ADDR]], align 8
2637 // CK11-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[T_ADDR]], align 8
2638 // CK11-NEXT:    [[INCDEC_PTR:%.*]] = getelementptr inbounds nuw i32, ptr [[TMP0]], i32 1
2639 // CK11-NEXT:    store ptr [[INCDEC_PTR]], ptr [[T_ADDR]], align 8
2640 // CK11-NEXT:    ret void
2641 //
2642 //
2643 // CK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l55
2644 // CK11-SAME: (ptr noundef [[LR:%.*]]) #[[ATTR1]] {
2645 // CK11-NEXT:  entry:
2646 // CK11-NEXT:    [[LR_ADDR:%.*]] = alloca ptr, align 8
2647 // CK11-NEXT:    [[TMP:%.*]] = alloca ptr, align 8
2648 // CK11-NEXT:    store ptr [[LR]], ptr [[LR_ADDR]], align 8
2649 // CK11-NEXT:    store ptr [[LR_ADDR]], ptr [[TMP]], align 8
2650 // CK11-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[TMP]], align 8
2651 // CK11-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[TMP0]], align 8
2652 // CK11-NEXT:    [[INCDEC_PTR:%.*]] = getelementptr inbounds nuw float, ptr [[TMP1]], i32 1
2653 // CK11-NEXT:    store ptr [[INCDEC_PTR]], ptr [[TMP0]], align 8
2654 // CK11-NEXT:    ret void
2655 //
2656 //
2657 // CK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l61
2658 // CK11-SAME: (ptr noundef [[TR:%.*]]) #[[ATTR1]] {
2659 // CK11-NEXT:  entry:
2660 // CK11-NEXT:    [[TR_ADDR:%.*]] = alloca ptr, align 8
2661 // CK11-NEXT:    [[TMP:%.*]] = alloca ptr, align 8
2662 // CK11-NEXT:    store ptr [[TR]], ptr [[TR_ADDR]], align 8
2663 // CK11-NEXT:    store ptr [[TR_ADDR]], ptr [[TMP]], align 8
2664 // CK11-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[TMP]], align 8
2665 // CK11-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[TMP0]], align 8
2666 // CK11-NEXT:    [[INCDEC_PTR:%.*]] = getelementptr inbounds nuw i32, ptr [[TMP1]], i32 1
2667 // CK11-NEXT:    store ptr [[INCDEC_PTR]], ptr [[TMP0]], align 8
2668 // CK11-NEXT:    ret void
2669 //
2670 //
2671 // CK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l67
2672 // CK11-SAME: (ptr noundef [[TR:%.*]]) #[[ATTR1]] {
2673 // CK11-NEXT:  entry:
2674 // CK11-NEXT:    [[TR_ADDR:%.*]] = alloca ptr, align 8
2675 // CK11-NEXT:    [[TMP:%.*]] = alloca ptr, align 8
2676 // CK11-NEXT:    store ptr [[TR]], ptr [[TR_ADDR]], align 8
2677 // CK11-NEXT:    store ptr [[TR_ADDR]], ptr [[TMP]], align 8
2678 // CK11-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[TMP]], align 8
2679 // CK11-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[TMP0]], align 8
2680 // CK11-NEXT:    [[INCDEC_PTR:%.*]] = getelementptr inbounds nuw i32, ptr [[TMP1]], i32 1
2681 // CK11-NEXT:    store ptr [[INCDEC_PTR]], ptr [[TMP0]], align 8
2682 // CK11-NEXT:    ret void
2683 //
2684 //
2685 // CK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l74
2686 // CK11-SAME: (ptr noundef [[TR:%.*]], ptr noundef [[LR:%.*]]) #[[ATTR1]] {
2687 // CK11-NEXT:  entry:
2688 // CK11-NEXT:    [[TR_ADDR:%.*]] = alloca ptr, align 8
2689 // CK11-NEXT:    [[LR_ADDR:%.*]] = alloca ptr, align 8
2690 // CK11-NEXT:    [[TMP:%.*]] = alloca ptr, align 8
2691 // CK11-NEXT:    [[_TMP1:%.*]] = alloca ptr, align 8
2692 // CK11-NEXT:    store ptr [[TR]], ptr [[TR_ADDR]], align 8
2693 // CK11-NEXT:    store ptr [[LR]], ptr [[LR_ADDR]], align 8
2694 // CK11-NEXT:    store ptr [[TR_ADDR]], ptr [[TMP]], align 8
2695 // CK11-NEXT:    store ptr [[LR_ADDR]], ptr [[_TMP1]], align 8
2696 // CK11-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[TMP]], align 8
2697 // CK11-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[TMP0]], align 8
2698 // CK11-NEXT:    [[INCDEC_PTR:%.*]] = getelementptr inbounds nuw i32, ptr [[TMP1]], i32 1
2699 // CK11-NEXT:    store ptr [[INCDEC_PTR]], ptr [[TMP0]], align 8
2700 // CK11-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[_TMP1]], align 8
2701 // CK11-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[TMP2]], align 8
2702 // CK11-NEXT:    [[INCDEC_PTR2:%.*]] = getelementptr inbounds nuw float, ptr [[TMP3]], i32 1
2703 // CK11-NEXT:    store ptr [[INCDEC_PTR2]], ptr [[TMP2]], align 8
2704 // CK11-NEXT:    ret void
2705 //
2706 //
2707 // CK12-LABEL: define {{[^@]+}}@_Z3barRPfRPi
2708 // CK12-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[A:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[B:%.*]]) #[[ATTR0:[0-9]+]] {
2709 // CK12-NEXT:  entry:
2710 // CK12-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 4
2711 // CK12-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 4
2712 // CK12-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 4
2713 // CK12-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 4
2714 // CK12-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 4
2715 // CK12-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[B_ADDR]], align 4
2716 // CK12-NEXT:    call void @_Z3fooIiEvRPfRPT_(ptr noundef nonnull align 4 dereferenceable(4) [[TMP0]], ptr noundef nonnull align 4 dereferenceable(4) [[TMP1]])
2717 // CK12-NEXT:    ret void
2718 //
2719 //
2720 // CK12-LABEL: define {{[^@]+}}@_Z3fooIiEvRPfRPT_
2721 // CK12-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[LR:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[TR:%.*]]) #[[ATTR0]] comdat {
2722 // CK12-NEXT:  entry:
2723 // CK12-NEXT:    [[LR_ADDR:%.*]] = alloca ptr, align 4
2724 // CK12-NEXT:    [[TR_ADDR:%.*]] = alloca ptr, align 4
2725 // CK12-NEXT:    [[L:%.*]] = alloca ptr, align 4
2726 // CK12-NEXT:    [[T:%.*]] = alloca ptr, align 4
2727 // CK12-NEXT:    [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 4
2728 // CK12-NEXT:    [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 4
2729 // CK12-NEXT:    [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 4
2730 // CK12-NEXT:    [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8
2731 // CK12-NEXT:    [[DOTOFFLOAD_BASEPTRS1:%.*]] = alloca [1 x ptr], align 4
2732 // CK12-NEXT:    [[DOTOFFLOAD_PTRS2:%.*]] = alloca [1 x ptr], align 4
2733 // CK12-NEXT:    [[DOTOFFLOAD_MAPPERS3:%.*]] = alloca [1 x ptr], align 4
2734 // CK12-NEXT:    [[KERNEL_ARGS4:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
2735 // CK12-NEXT:    [[DOTOFFLOAD_BASEPTRS7:%.*]] = alloca [1 x ptr], align 4
2736 // CK12-NEXT:    [[DOTOFFLOAD_PTRS8:%.*]] = alloca [1 x ptr], align 4
2737 // CK12-NEXT:    [[DOTOFFLOAD_MAPPERS9:%.*]] = alloca [1 x ptr], align 4
2738 // CK12-NEXT:    [[KERNEL_ARGS10:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
2739 // CK12-NEXT:    [[TMP:%.*]] = alloca ptr, align 4
2740 // CK12-NEXT:    [[DOTOFFLOAD_BASEPTRS13:%.*]] = alloca [1 x ptr], align 4
2741 // CK12-NEXT:    [[DOTOFFLOAD_PTRS14:%.*]] = alloca [1 x ptr], align 4
2742 // CK12-NEXT:    [[DOTOFFLOAD_MAPPERS15:%.*]] = alloca [1 x ptr], align 4
2743 // CK12-NEXT:    [[KERNEL_ARGS16:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
2744 // CK12-NEXT:    [[_TMP19:%.*]] = alloca ptr, align 4
2745 // CK12-NEXT:    [[DOTOFFLOAD_BASEPTRS20:%.*]] = alloca [1 x ptr], align 4
2746 // CK12-NEXT:    [[DOTOFFLOAD_PTRS21:%.*]] = alloca [1 x ptr], align 4
2747 // CK12-NEXT:    [[DOTOFFLOAD_MAPPERS22:%.*]] = alloca [1 x ptr], align 4
2748 // CK12-NEXT:    [[KERNEL_ARGS23:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
2749 // CK12-NEXT:    [[_TMP26:%.*]] = alloca ptr, align 4
2750 // CK12-NEXT:    [[DOTOFFLOAD_BASEPTRS27:%.*]] = alloca [1 x ptr], align 4
2751 // CK12-NEXT:    [[DOTOFFLOAD_PTRS28:%.*]] = alloca [1 x ptr], align 4
2752 // CK12-NEXT:    [[DOTOFFLOAD_MAPPERS29:%.*]] = alloca [1 x ptr], align 4
2753 // CK12-NEXT:    [[KERNEL_ARGS30:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
2754 // CK12-NEXT:    [[_TMP33:%.*]] = alloca ptr, align 4
2755 // CK12-NEXT:    [[_TMP34:%.*]] = alloca ptr, align 4
2756 // CK12-NEXT:    [[DOTOFFLOAD_BASEPTRS35:%.*]] = alloca [2 x ptr], align 4
2757 // CK12-NEXT:    [[DOTOFFLOAD_PTRS36:%.*]] = alloca [2 x ptr], align 4
2758 // CK12-NEXT:    [[DOTOFFLOAD_MAPPERS37:%.*]] = alloca [2 x ptr], align 4
2759 // CK12-NEXT:    [[KERNEL_ARGS38:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
2760 // CK12-NEXT:    store ptr [[LR]], ptr [[LR_ADDR]], align 4
2761 // CK12-NEXT:    store ptr [[TR]], ptr [[TR_ADDR]], align 4
2762 // CK12-NEXT:    [[TMP0:%.*]] = load ptr, ptr @g, align 4
2763 // CK12-NEXT:    [[TMP1:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
2764 // CK12-NEXT:    store ptr [[TMP0]], ptr [[TMP1]], align 4
2765 // CK12-NEXT:    [[TMP2:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0
2766 // CK12-NEXT:    store ptr [[TMP0]], ptr [[TMP2]], align 4
2767 // CK12-NEXT:    [[TMP3:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
2768 // CK12-NEXT:    store ptr null, ptr [[TMP3]], align 4
2769 // CK12-NEXT:    [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
2770 // CK12-NEXT:    [[TMP5:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0
2771 // CK12-NEXT:    [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0
2772 // CK12-NEXT:    store i32 3, ptr [[TMP6]], align 4
2773 // CK12-NEXT:    [[TMP7:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1
2774 // CK12-NEXT:    store i32 1, ptr [[TMP7]], align 4
2775 // CK12-NEXT:    [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2
2776 // CK12-NEXT:    store ptr [[TMP4]], ptr [[TMP8]], align 4
2777 // CK12-NEXT:    [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3
2778 // CK12-NEXT:    store ptr [[TMP5]], ptr [[TMP9]], align 4
2779 // CK12-NEXT:    [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4
2780 // CK12-NEXT:    store ptr @.offload_sizes, ptr [[TMP10]], align 4
2781 // CK12-NEXT:    [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5
2782 // CK12-NEXT:    store ptr @.offload_maptypes, ptr [[TMP11]], align 4
2783 // CK12-NEXT:    [[TMP12:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6
2784 // CK12-NEXT:    store ptr null, ptr [[TMP12]], align 4
2785 // CK12-NEXT:    [[TMP13:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7
2786 // CK12-NEXT:    store ptr null, ptr [[TMP13]], align 4
2787 // CK12-NEXT:    [[TMP14:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8
2788 // CK12-NEXT:    store i64 0, ptr [[TMP14]], align 8
2789 // CK12-NEXT:    [[TMP15:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9
2790 // CK12-NEXT:    store i64 0, ptr [[TMP15]], align 8
2791 // CK12-NEXT:    [[TMP16:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10
2792 // CK12-NEXT:    store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP16]], align 4
2793 // CK12-NEXT:    [[TMP17:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11
2794 // CK12-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP17]], align 4
2795 // CK12-NEXT:    [[TMP18:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12
2796 // CK12-NEXT:    store i32 0, ptr [[TMP18]], align 4
2797 // 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]])
2798 // CK12-NEXT:    [[TMP20:%.*]] = icmp ne i32 [[TMP19]], 0
2799 // CK12-NEXT:    br i1 [[TMP20]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
2800 // CK12:       omp_offload.failed:
2801 // CK12-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l37(ptr [[TMP0]]) #[[ATTR2:[0-9]+]]
2802 // CK12-NEXT:    br label [[OMP_OFFLOAD_CONT]]
2803 // CK12:       omp_offload.cont:
2804 // CK12-NEXT:    [[TMP21:%.*]] = load ptr, ptr [[L]], align 4
2805 // CK12-NEXT:    [[TMP22:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS1]], i32 0, i32 0
2806 // CK12-NEXT:    store ptr [[TMP21]], ptr [[TMP22]], align 4
2807 // CK12-NEXT:    [[TMP23:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS2]], i32 0, i32 0
2808 // CK12-NEXT:    store ptr [[TMP21]], ptr [[TMP23]], align 4
2809 // CK12-NEXT:    [[TMP24:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS3]], i32 0, i32 0
2810 // CK12-NEXT:    store ptr null, ptr [[TMP24]], align 4
2811 // CK12-NEXT:    [[TMP25:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS1]], i32 0, i32 0
2812 // CK12-NEXT:    [[TMP26:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS2]], i32 0, i32 0
2813 // CK12-NEXT:    [[TMP27:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 0
2814 // CK12-NEXT:    store i32 3, ptr [[TMP27]], align 4
2815 // CK12-NEXT:    [[TMP28:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 1
2816 // CK12-NEXT:    store i32 1, ptr [[TMP28]], align 4
2817 // CK12-NEXT:    [[TMP29:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 2
2818 // CK12-NEXT:    store ptr [[TMP25]], ptr [[TMP29]], align 4
2819 // CK12-NEXT:    [[TMP30:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 3
2820 // CK12-NEXT:    store ptr [[TMP26]], ptr [[TMP30]], align 4
2821 // CK12-NEXT:    [[TMP31:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 4
2822 // CK12-NEXT:    store ptr @.offload_sizes.1, ptr [[TMP31]], align 4
2823 // CK12-NEXT:    [[TMP32:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 5
2824 // CK12-NEXT:    store ptr @.offload_maptypes.2, ptr [[TMP32]], align 4
2825 // CK12-NEXT:    [[TMP33:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 6
2826 // CK12-NEXT:    store ptr null, ptr [[TMP33]], align 4
2827 // CK12-NEXT:    [[TMP34:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 7
2828 // CK12-NEXT:    store ptr null, ptr [[TMP34]], align 4
2829 // CK12-NEXT:    [[TMP35:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 8
2830 // CK12-NEXT:    store i64 0, ptr [[TMP35]], align 8
2831 // CK12-NEXT:    [[TMP36:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 9
2832 // CK12-NEXT:    store i64 0, ptr [[TMP36]], align 8
2833 // CK12-NEXT:    [[TMP37:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 10
2834 // CK12-NEXT:    store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP37]], align 4
2835 // CK12-NEXT:    [[TMP38:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 11
2836 // CK12-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP38]], align 4
2837 // CK12-NEXT:    [[TMP39:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 12
2838 // CK12-NEXT:    store i32 0, ptr [[TMP39]], align 4
2839 // 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]])
2840 // CK12-NEXT:    [[TMP41:%.*]] = icmp ne i32 [[TMP40]], 0
2841 // CK12-NEXT:    br i1 [[TMP41]], label [[OMP_OFFLOAD_FAILED5:%.*]], label [[OMP_OFFLOAD_CONT6:%.*]]
2842 // CK12:       omp_offload.failed5:
2843 // CK12-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l43(ptr [[TMP21]]) #[[ATTR2]]
2844 // CK12-NEXT:    br label [[OMP_OFFLOAD_CONT6]]
2845 // CK12:       omp_offload.cont6:
2846 // CK12-NEXT:    [[TMP42:%.*]] = load ptr, ptr [[T]], align 4
2847 // CK12-NEXT:    [[TMP43:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS7]], i32 0, i32 0
2848 // CK12-NEXT:    store ptr [[TMP42]], ptr [[TMP43]], align 4
2849 // CK12-NEXT:    [[TMP44:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS8]], i32 0, i32 0
2850 // CK12-NEXT:    store ptr [[TMP42]], ptr [[TMP44]], align 4
2851 // CK12-NEXT:    [[TMP45:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS9]], i32 0, i32 0
2852 // CK12-NEXT:    store ptr null, ptr [[TMP45]], align 4
2853 // CK12-NEXT:    [[TMP46:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS7]], i32 0, i32 0
2854 // CK12-NEXT:    [[TMP47:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS8]], i32 0, i32 0
2855 // CK12-NEXT:    [[TMP48:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 0
2856 // CK12-NEXT:    store i32 3, ptr [[TMP48]], align 4
2857 // CK12-NEXT:    [[TMP49:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 1
2858 // CK12-NEXT:    store i32 1, ptr [[TMP49]], align 4
2859 // CK12-NEXT:    [[TMP50:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 2
2860 // CK12-NEXT:    store ptr [[TMP46]], ptr [[TMP50]], align 4
2861 // CK12-NEXT:    [[TMP51:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 3
2862 // CK12-NEXT:    store ptr [[TMP47]], ptr [[TMP51]], align 4
2863 // CK12-NEXT:    [[TMP52:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 4
2864 // CK12-NEXT:    store ptr @.offload_sizes.3, ptr [[TMP52]], align 4
2865 // CK12-NEXT:    [[TMP53:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 5
2866 // CK12-NEXT:    store ptr @.offload_maptypes.4, ptr [[TMP53]], align 4
2867 // CK12-NEXT:    [[TMP54:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 6
2868 // CK12-NEXT:    store ptr null, ptr [[TMP54]], align 4
2869 // CK12-NEXT:    [[TMP55:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 7
2870 // CK12-NEXT:    store ptr null, ptr [[TMP55]], align 4
2871 // CK12-NEXT:    [[TMP56:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 8
2872 // CK12-NEXT:    store i64 0, ptr [[TMP56]], align 8
2873 // CK12-NEXT:    [[TMP57:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 9
2874 // CK12-NEXT:    store i64 0, ptr [[TMP57]], align 8
2875 // CK12-NEXT:    [[TMP58:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 10
2876 // CK12-NEXT:    store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP58]], align 4
2877 // CK12-NEXT:    [[TMP59:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 11
2878 // CK12-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP59]], align 4
2879 // CK12-NEXT:    [[TMP60:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 12
2880 // CK12-NEXT:    store i32 0, ptr [[TMP60]], align 4
2881 // 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]])
2882 // CK12-NEXT:    [[TMP62:%.*]] = icmp ne i32 [[TMP61]], 0
2883 // CK12-NEXT:    br i1 [[TMP62]], label [[OMP_OFFLOAD_FAILED11:%.*]], label [[OMP_OFFLOAD_CONT12:%.*]]
2884 // CK12:       omp_offload.failed11:
2885 // CK12-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l49(ptr [[TMP42]]) #[[ATTR2]]
2886 // CK12-NEXT:    br label [[OMP_OFFLOAD_CONT12]]
2887 // CK12:       omp_offload.cont12:
2888 // CK12-NEXT:    [[TMP63:%.*]] = load ptr, ptr [[LR_ADDR]], align 4
2889 // CK12-NEXT:    store ptr [[TMP63]], ptr [[TMP]], align 4
2890 // CK12-NEXT:    [[TMP64:%.*]] = load ptr, ptr [[TMP]], align 4
2891 // CK12-NEXT:    [[TMP65:%.*]] = load ptr, ptr [[TMP64]], align 4
2892 // CK12-NEXT:    [[TMP66:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS13]], i32 0, i32 0
2893 // CK12-NEXT:    store ptr [[TMP65]], ptr [[TMP66]], align 4
2894 // CK12-NEXT:    [[TMP67:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS14]], i32 0, i32 0
2895 // CK12-NEXT:    store ptr [[TMP65]], ptr [[TMP67]], align 4
2896 // CK12-NEXT:    [[TMP68:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS15]], i32 0, i32 0
2897 // CK12-NEXT:    store ptr null, ptr [[TMP68]], align 4
2898 // CK12-NEXT:    [[TMP69:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS13]], i32 0, i32 0
2899 // CK12-NEXT:    [[TMP70:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS14]], i32 0, i32 0
2900 // CK12-NEXT:    [[TMP71:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 0
2901 // CK12-NEXT:    store i32 3, ptr [[TMP71]], align 4
2902 // CK12-NEXT:    [[TMP72:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 1
2903 // CK12-NEXT:    store i32 1, ptr [[TMP72]], align 4
2904 // CK12-NEXT:    [[TMP73:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 2
2905 // CK12-NEXT:    store ptr [[TMP69]], ptr [[TMP73]], align 4
2906 // CK12-NEXT:    [[TMP74:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 3
2907 // CK12-NEXT:    store ptr [[TMP70]], ptr [[TMP74]], align 4
2908 // CK12-NEXT:    [[TMP75:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 4
2909 // CK12-NEXT:    store ptr @.offload_sizes.5, ptr [[TMP75]], align 4
2910 // CK12-NEXT:    [[TMP76:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 5
2911 // CK12-NEXT:    store ptr @.offload_maptypes.6, ptr [[TMP76]], align 4
2912 // CK12-NEXT:    [[TMP77:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 6
2913 // CK12-NEXT:    store ptr null, ptr [[TMP77]], align 4
2914 // CK12-NEXT:    [[TMP78:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 7
2915 // CK12-NEXT:    store ptr null, ptr [[TMP78]], align 4
2916 // CK12-NEXT:    [[TMP79:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 8
2917 // CK12-NEXT:    store i64 0, ptr [[TMP79]], align 8
2918 // CK12-NEXT:    [[TMP80:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 9
2919 // CK12-NEXT:    store i64 0, ptr [[TMP80]], align 8
2920 // CK12-NEXT:    [[TMP81:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 10
2921 // CK12-NEXT:    store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP81]], align 4
2922 // CK12-NEXT:    [[TMP82:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 11
2923 // CK12-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP82]], align 4
2924 // CK12-NEXT:    [[TMP83:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 12
2925 // CK12-NEXT:    store i32 0, ptr [[TMP83]], align 4
2926 // 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]])
2927 // CK12-NEXT:    [[TMP85:%.*]] = icmp ne i32 [[TMP84]], 0
2928 // CK12-NEXT:    br i1 [[TMP85]], label [[OMP_OFFLOAD_FAILED17:%.*]], label [[OMP_OFFLOAD_CONT18:%.*]]
2929 // CK12:       omp_offload.failed17:
2930 // CK12-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l55(ptr [[TMP65]]) #[[ATTR2]]
2931 // CK12-NEXT:    br label [[OMP_OFFLOAD_CONT18]]
2932 // CK12:       omp_offload.cont18:
2933 // CK12-NEXT:    [[TMP86:%.*]] = load ptr, ptr [[TR_ADDR]], align 4
2934 // CK12-NEXT:    store ptr [[TMP86]], ptr [[_TMP19]], align 4
2935 // CK12-NEXT:    [[TMP87:%.*]] = load ptr, ptr [[_TMP19]], align 4
2936 // CK12-NEXT:    [[TMP88:%.*]] = load ptr, ptr [[TMP87]], align 4
2937 // CK12-NEXT:    [[TMP89:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS20]], i32 0, i32 0
2938 // CK12-NEXT:    store ptr [[TMP88]], ptr [[TMP89]], align 4
2939 // CK12-NEXT:    [[TMP90:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS21]], i32 0, i32 0
2940 // CK12-NEXT:    store ptr [[TMP88]], ptr [[TMP90]], align 4
2941 // CK12-NEXT:    [[TMP91:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS22]], i32 0, i32 0
2942 // CK12-NEXT:    store ptr null, ptr [[TMP91]], align 4
2943 // CK12-NEXT:    [[TMP92:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS20]], i32 0, i32 0
2944 // CK12-NEXT:    [[TMP93:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS21]], i32 0, i32 0
2945 // CK12-NEXT:    [[TMP94:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 0
2946 // CK12-NEXT:    store i32 3, ptr [[TMP94]], align 4
2947 // CK12-NEXT:    [[TMP95:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 1
2948 // CK12-NEXT:    store i32 1, ptr [[TMP95]], align 4
2949 // CK12-NEXT:    [[TMP96:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 2
2950 // CK12-NEXT:    store ptr [[TMP92]], ptr [[TMP96]], align 4
2951 // CK12-NEXT:    [[TMP97:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 3
2952 // CK12-NEXT:    store ptr [[TMP93]], ptr [[TMP97]], align 4
2953 // CK12-NEXT:    [[TMP98:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 4
2954 // CK12-NEXT:    store ptr @.offload_sizes.7, ptr [[TMP98]], align 4
2955 // CK12-NEXT:    [[TMP99:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 5
2956 // CK12-NEXT:    store ptr @.offload_maptypes.8, ptr [[TMP99]], align 4
2957 // CK12-NEXT:    [[TMP100:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 6
2958 // CK12-NEXT:    store ptr null, ptr [[TMP100]], align 4
2959 // CK12-NEXT:    [[TMP101:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 7
2960 // CK12-NEXT:    store ptr null, ptr [[TMP101]], align 4
2961 // CK12-NEXT:    [[TMP102:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 8
2962 // CK12-NEXT:    store i64 0, ptr [[TMP102]], align 8
2963 // CK12-NEXT:    [[TMP103:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 9
2964 // CK12-NEXT:    store i64 0, ptr [[TMP103]], align 8
2965 // CK12-NEXT:    [[TMP104:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 10
2966 // CK12-NEXT:    store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP104]], align 4
2967 // CK12-NEXT:    [[TMP105:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 11
2968 // CK12-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP105]], align 4
2969 // CK12-NEXT:    [[TMP106:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 12
2970 // CK12-NEXT:    store i32 0, ptr [[TMP106]], align 4
2971 // 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]])
2972 // CK12-NEXT:    [[TMP108:%.*]] = icmp ne i32 [[TMP107]], 0
2973 // CK12-NEXT:    br i1 [[TMP108]], label [[OMP_OFFLOAD_FAILED24:%.*]], label [[OMP_OFFLOAD_CONT25:%.*]]
2974 // CK12:       omp_offload.failed24:
2975 // CK12-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l61(ptr [[TMP88]]) #[[ATTR2]]
2976 // CK12-NEXT:    br label [[OMP_OFFLOAD_CONT25]]
2977 // CK12:       omp_offload.cont25:
2978 // CK12-NEXT:    [[TMP109:%.*]] = load ptr, ptr [[TR_ADDR]], align 4
2979 // CK12-NEXT:    store ptr [[TMP109]], ptr [[_TMP26]], align 4
2980 // CK12-NEXT:    [[TMP110:%.*]] = load ptr, ptr [[_TMP26]], align 4
2981 // CK12-NEXT:    [[TMP111:%.*]] = load ptr, ptr [[TMP110]], align 4
2982 // CK12-NEXT:    [[TMP112:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS27]], i32 0, i32 0
2983 // CK12-NEXT:    store ptr [[TMP111]], ptr [[TMP112]], align 4
2984 // CK12-NEXT:    [[TMP113:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS28]], i32 0, i32 0
2985 // CK12-NEXT:    store ptr [[TMP111]], ptr [[TMP113]], align 4
2986 // CK12-NEXT:    [[TMP114:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS29]], i32 0, i32 0
2987 // CK12-NEXT:    store ptr null, ptr [[TMP114]], align 4
2988 // CK12-NEXT:    [[TMP115:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS27]], i32 0, i32 0
2989 // CK12-NEXT:    [[TMP116:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS28]], i32 0, i32 0
2990 // CK12-NEXT:    [[TMP117:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 0
2991 // CK12-NEXT:    store i32 3, ptr [[TMP117]], align 4
2992 // CK12-NEXT:    [[TMP118:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 1
2993 // CK12-NEXT:    store i32 1, ptr [[TMP118]], align 4
2994 // CK12-NEXT:    [[TMP119:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 2
2995 // CK12-NEXT:    store ptr [[TMP115]], ptr [[TMP119]], align 4
2996 // CK12-NEXT:    [[TMP120:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 3
2997 // CK12-NEXT:    store ptr [[TMP116]], ptr [[TMP120]], align 4
2998 // CK12-NEXT:    [[TMP121:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 4
2999 // CK12-NEXT:    store ptr @.offload_sizes.9, ptr [[TMP121]], align 4
3000 // CK12-NEXT:    [[TMP122:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 5
3001 // CK12-NEXT:    store ptr @.offload_maptypes.10, ptr [[TMP122]], align 4
3002 // CK12-NEXT:    [[TMP123:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 6
3003 // CK12-NEXT:    store ptr null, ptr [[TMP123]], align 4
3004 // CK12-NEXT:    [[TMP124:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 7
3005 // CK12-NEXT:    store ptr null, ptr [[TMP124]], align 4
3006 // CK12-NEXT:    [[TMP125:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 8
3007 // CK12-NEXT:    store i64 0, ptr [[TMP125]], align 8
3008 // CK12-NEXT:    [[TMP126:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 9
3009 // CK12-NEXT:    store i64 0, ptr [[TMP126]], align 8
3010 // CK12-NEXT:    [[TMP127:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 10
3011 // CK12-NEXT:    store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP127]], align 4
3012 // CK12-NEXT:    [[TMP128:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 11
3013 // CK12-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP128]], align 4
3014 // CK12-NEXT:    [[TMP129:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 12
3015 // CK12-NEXT:    store i32 0, ptr [[TMP129]], align 4
3016 // 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]])
3017 // CK12-NEXT:    [[TMP131:%.*]] = icmp ne i32 [[TMP130]], 0
3018 // CK12-NEXT:    br i1 [[TMP131]], label [[OMP_OFFLOAD_FAILED31:%.*]], label [[OMP_OFFLOAD_CONT32:%.*]]
3019 // CK12:       omp_offload.failed31:
3020 // CK12-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l67(ptr [[TMP111]]) #[[ATTR2]]
3021 // CK12-NEXT:    br label [[OMP_OFFLOAD_CONT32]]
3022 // CK12:       omp_offload.cont32:
3023 // CK12-NEXT:    [[TMP132:%.*]] = load ptr, ptr [[TR_ADDR]], align 4
3024 // CK12-NEXT:    store ptr [[TMP132]], ptr [[_TMP33]], align 4
3025 // CK12-NEXT:    [[TMP133:%.*]] = load ptr, ptr [[LR_ADDR]], align 4
3026 // CK12-NEXT:    store ptr [[TMP133]], ptr [[_TMP34]], align 4
3027 // CK12-NEXT:    [[TMP134:%.*]] = load ptr, ptr [[_TMP33]], align 4
3028 // CK12-NEXT:    [[TMP135:%.*]] = load ptr, ptr [[TMP134]], align 4
3029 // CK12-NEXT:    [[TMP136:%.*]] = load ptr, ptr [[_TMP34]], align 4
3030 // CK12-NEXT:    [[TMP137:%.*]] = load ptr, ptr [[TMP136]], align 4
3031 // CK12-NEXT:    [[TMP138:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS35]], i32 0, i32 0
3032 // CK12-NEXT:    store ptr [[TMP135]], ptr [[TMP138]], align 4
3033 // CK12-NEXT:    [[TMP139:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS36]], i32 0, i32 0
3034 // CK12-NEXT:    store ptr [[TMP135]], ptr [[TMP139]], align 4
3035 // CK12-NEXT:    [[TMP140:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_MAPPERS37]], i32 0, i32 0
3036 // CK12-NEXT:    store ptr null, ptr [[TMP140]], align 4
3037 // CK12-NEXT:    [[TMP141:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS35]], i32 0, i32 1
3038 // CK12-NEXT:    store ptr [[TMP137]], ptr [[TMP141]], align 4
3039 // CK12-NEXT:    [[TMP142:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS36]], i32 0, i32 1
3040 // CK12-NEXT:    store ptr [[TMP137]], ptr [[TMP142]], align 4
3041 // CK12-NEXT:    [[TMP143:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_MAPPERS37]], i32 0, i32 1
3042 // CK12-NEXT:    store ptr null, ptr [[TMP143]], align 4
3043 // CK12-NEXT:    [[TMP144:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS35]], i32 0, i32 0
3044 // CK12-NEXT:    [[TMP145:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS36]], i32 0, i32 0
3045 // CK12-NEXT:    [[TMP146:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 0
3046 // CK12-NEXT:    store i32 3, ptr [[TMP146]], align 4
3047 // CK12-NEXT:    [[TMP147:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 1
3048 // CK12-NEXT:    store i32 2, ptr [[TMP147]], align 4
3049 // CK12-NEXT:    [[TMP148:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 2
3050 // CK12-NEXT:    store ptr [[TMP144]], ptr [[TMP148]], align 4
3051 // CK12-NEXT:    [[TMP149:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 3
3052 // CK12-NEXT:    store ptr [[TMP145]], ptr [[TMP149]], align 4
3053 // CK12-NEXT:    [[TMP150:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 4
3054 // CK12-NEXT:    store ptr @.offload_sizes.11, ptr [[TMP150]], align 4
3055 // CK12-NEXT:    [[TMP151:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 5
3056 // CK12-NEXT:    store ptr @.offload_maptypes.12, ptr [[TMP151]], align 4
3057 // CK12-NEXT:    [[TMP152:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 6
3058 // CK12-NEXT:    store ptr null, ptr [[TMP152]], align 4
3059 // CK12-NEXT:    [[TMP153:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 7
3060 // CK12-NEXT:    store ptr null, ptr [[TMP153]], align 4
3061 // CK12-NEXT:    [[TMP154:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 8
3062 // CK12-NEXT:    store i64 0, ptr [[TMP154]], align 8
3063 // CK12-NEXT:    [[TMP155:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 9
3064 // CK12-NEXT:    store i64 0, ptr [[TMP155]], align 8
3065 // CK12-NEXT:    [[TMP156:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 10
3066 // CK12-NEXT:    store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP156]], align 4
3067 // CK12-NEXT:    [[TMP157:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 11
3068 // CK12-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP157]], align 4
3069 // CK12-NEXT:    [[TMP158:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 12
3070 // CK12-NEXT:    store i32 0, ptr [[TMP158]], align 4
3071 // 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]])
3072 // CK12-NEXT:    [[TMP160:%.*]] = icmp ne i32 [[TMP159]], 0
3073 // CK12-NEXT:    br i1 [[TMP160]], label [[OMP_OFFLOAD_FAILED39:%.*]], label [[OMP_OFFLOAD_CONT40:%.*]]
3074 // CK12:       omp_offload.failed39:
3075 // CK12-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l74(ptr [[TMP135]], ptr [[TMP137]]) #[[ATTR2]]
3076 // CK12-NEXT:    br label [[OMP_OFFLOAD_CONT40]]
3077 // CK12:       omp_offload.cont40:
3078 // CK12-NEXT:    ret void
3079 //
3080 //
3081 // CK12-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l37
3082 // CK12-SAME: (ptr noundef [[G:%.*]]) #[[ATTR1:[0-9]+]] {
3083 // CK12-NEXT:  entry:
3084 // CK12-NEXT:    [[G_ADDR:%.*]] = alloca ptr, align 4
3085 // CK12-NEXT:    store ptr [[G]], ptr [[G_ADDR]], align 4
3086 // CK12-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[G_ADDR]], align 4
3087 // CK12-NEXT:    [[INCDEC_PTR:%.*]] = getelementptr inbounds nuw double, ptr [[TMP0]], i32 1
3088 // CK12-NEXT:    store ptr [[INCDEC_PTR]], ptr [[G_ADDR]], align 4
3089 // CK12-NEXT:    ret void
3090 //
3091 //
3092 // CK12-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l43
3093 // CK12-SAME: (ptr noundef [[L:%.*]]) #[[ATTR1]] {
3094 // CK12-NEXT:  entry:
3095 // CK12-NEXT:    [[L_ADDR:%.*]] = alloca ptr, align 4
3096 // CK12-NEXT:    store ptr [[L]], ptr [[L_ADDR]], align 4
3097 // CK12-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[L_ADDR]], align 4
3098 // CK12-NEXT:    [[INCDEC_PTR:%.*]] = getelementptr inbounds nuw float, ptr [[TMP0]], i32 1
3099 // CK12-NEXT:    store ptr [[INCDEC_PTR]], ptr [[L_ADDR]], align 4
3100 // CK12-NEXT:    ret void
3101 //
3102 //
3103 // CK12-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l49
3104 // CK12-SAME: (ptr noundef [[T:%.*]]) #[[ATTR1]] {
3105 // CK12-NEXT:  entry:
3106 // CK12-NEXT:    [[T_ADDR:%.*]] = alloca ptr, align 4
3107 // CK12-NEXT:    store ptr [[T]], ptr [[T_ADDR]], align 4
3108 // CK12-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[T_ADDR]], align 4
3109 // CK12-NEXT:    [[INCDEC_PTR:%.*]] = getelementptr inbounds nuw i32, ptr [[TMP0]], i32 1
3110 // CK12-NEXT:    store ptr [[INCDEC_PTR]], ptr [[T_ADDR]], align 4
3111 // CK12-NEXT:    ret void
3112 //
3113 //
3114 // CK12-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l55
3115 // CK12-SAME: (ptr noundef [[LR:%.*]]) #[[ATTR1]] {
3116 // CK12-NEXT:  entry:
3117 // CK12-NEXT:    [[LR_ADDR:%.*]] = alloca ptr, align 4
3118 // CK12-NEXT:    [[TMP:%.*]] = alloca ptr, align 4
3119 // CK12-NEXT:    store ptr [[LR]], ptr [[LR_ADDR]], align 4
3120 // CK12-NEXT:    store ptr [[LR_ADDR]], ptr [[TMP]], align 4
3121 // CK12-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[TMP]], align 4
3122 // CK12-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[TMP0]], align 4
3123 // CK12-NEXT:    [[INCDEC_PTR:%.*]] = getelementptr inbounds nuw float, ptr [[TMP1]], i32 1
3124 // CK12-NEXT:    store ptr [[INCDEC_PTR]], ptr [[TMP0]], align 4
3125 // CK12-NEXT:    ret void
3126 //
3127 //
3128 // CK12-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l61
3129 // CK12-SAME: (ptr noundef [[TR:%.*]]) #[[ATTR1]] {
3130 // CK12-NEXT:  entry:
3131 // CK12-NEXT:    [[TR_ADDR:%.*]] = alloca ptr, align 4
3132 // CK12-NEXT:    [[TMP:%.*]] = alloca ptr, align 4
3133 // CK12-NEXT:    store ptr [[TR]], ptr [[TR_ADDR]], align 4
3134 // CK12-NEXT:    store ptr [[TR_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 nuw i32, ptr [[TMP1]], i32 1
3138 // CK12-NEXT:    store ptr [[INCDEC_PTR]], ptr [[TMP0]], align 4
3139 // CK12-NEXT:    ret void
3140 //
3141 //
3142 // CK12-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l67
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 nuw i32, ptr [[TMP1]], i32 1
3152 // CK12-NEXT:    store ptr [[INCDEC_PTR]], ptr [[TMP0]], align 4
3153 // CK12-NEXT:    ret void
3154 //
3155 //
3156 // CK12-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l74
3157 // CK12-SAME: (ptr noundef [[TR:%.*]], ptr noundef [[LR:%.*]]) #[[ATTR1]] {
3158 // CK12-NEXT:  entry:
3159 // CK12-NEXT:    [[TR_ADDR:%.*]] = alloca ptr, align 4
3160 // CK12-NEXT:    [[LR_ADDR:%.*]] = alloca ptr, align 4
3161 // CK12-NEXT:    [[TMP:%.*]] = alloca ptr, align 4
3162 // CK12-NEXT:    [[_TMP1:%.*]] = alloca ptr, align 4
3163 // CK12-NEXT:    store ptr [[TR]], ptr [[TR_ADDR]], align 4
3164 // CK12-NEXT:    store ptr [[LR]], ptr [[LR_ADDR]], align 4
3165 // CK12-NEXT:    store ptr [[TR_ADDR]], ptr [[TMP]], align 4
3166 // CK12-NEXT:    store ptr [[LR_ADDR]], ptr [[_TMP1]], align 4
3167 // CK12-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[TMP]], align 4
3168 // CK12-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[TMP0]], align 4
3169 // CK12-NEXT:    [[INCDEC_PTR:%.*]] = getelementptr inbounds nuw i32, ptr [[TMP1]], i32 1
3170 // CK12-NEXT:    store ptr [[INCDEC_PTR]], ptr [[TMP0]], align 4
3171 // CK12-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[_TMP1]], align 4
3172 // CK12-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[TMP2]], align 4
3173 // CK12-NEXT:    [[INCDEC_PTR2:%.*]] = getelementptr inbounds nuw float, ptr [[TMP3]], i32 1
3174 // CK12-NEXT:    store ptr [[INCDEC_PTR2]], ptr [[TMP2]], align 4
3175 // CK12-NEXT:    ret void
3176 //
3177 //
3178 // CK13-LABEL: define {{[^@]+}}@_Z3barRPfRPi
3179 // CK13-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[A:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[B:%.*]]) #[[ATTR0:[0-9]+]] {
3180 // CK13-NEXT:  entry:
3181 // CK13-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 4
3182 // CK13-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 4
3183 // CK13-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 4
3184 // CK13-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 4
3185 // CK13-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 4
3186 // CK13-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[B_ADDR]], align 4
3187 // CK13-NEXT:    call void @_Z3fooIiEvRPfRPT_(ptr noundef nonnull align 4 dereferenceable(4) [[TMP0]], ptr noundef nonnull align 4 dereferenceable(4) [[TMP1]])
3188 // CK13-NEXT:    ret void
3189 //
3190 //
3191 // CK13-LABEL: define {{[^@]+}}@_Z3fooIiEvRPfRPT_
3192 // CK13-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[LR:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[TR:%.*]]) #[[ATTR0]] comdat {
3193 // CK13-NEXT:  entry:
3194 // CK13-NEXT:    [[LR_ADDR:%.*]] = alloca ptr, align 4
3195 // CK13-NEXT:    [[TR_ADDR:%.*]] = alloca ptr, align 4
3196 // CK13-NEXT:    [[L:%.*]] = alloca ptr, align 4
3197 // CK13-NEXT:    [[T:%.*]] = alloca ptr, align 4
3198 // CK13-NEXT:    [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 4
3199 // CK13-NEXT:    [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 4
3200 // CK13-NEXT:    [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 4
3201 // CK13-NEXT:    [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8
3202 // CK13-NEXT:    [[DOTOFFLOAD_BASEPTRS1:%.*]] = alloca [1 x ptr], align 4
3203 // CK13-NEXT:    [[DOTOFFLOAD_PTRS2:%.*]] = alloca [1 x ptr], align 4
3204 // CK13-NEXT:    [[DOTOFFLOAD_MAPPERS3:%.*]] = alloca [1 x ptr], align 4
3205 // CK13-NEXT:    [[KERNEL_ARGS4:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
3206 // CK13-NEXT:    [[DOTOFFLOAD_BASEPTRS7:%.*]] = alloca [1 x ptr], align 4
3207 // CK13-NEXT:    [[DOTOFFLOAD_PTRS8:%.*]] = alloca [1 x ptr], align 4
3208 // CK13-NEXT:    [[DOTOFFLOAD_MAPPERS9:%.*]] = alloca [1 x ptr], align 4
3209 // CK13-NEXT:    [[KERNEL_ARGS10:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
3210 // CK13-NEXT:    [[TMP:%.*]] = alloca ptr, align 4
3211 // CK13-NEXT:    [[DOTOFFLOAD_BASEPTRS13:%.*]] = alloca [1 x ptr], align 4
3212 // CK13-NEXT:    [[DOTOFFLOAD_PTRS14:%.*]] = alloca [1 x ptr], align 4
3213 // CK13-NEXT:    [[DOTOFFLOAD_MAPPERS15:%.*]] = alloca [1 x ptr], align 4
3214 // CK13-NEXT:    [[KERNEL_ARGS16:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
3215 // CK13-NEXT:    [[_TMP19:%.*]] = alloca ptr, align 4
3216 // CK13-NEXT:    [[DOTOFFLOAD_BASEPTRS20:%.*]] = alloca [1 x ptr], align 4
3217 // CK13-NEXT:    [[DOTOFFLOAD_PTRS21:%.*]] = alloca [1 x ptr], align 4
3218 // CK13-NEXT:    [[DOTOFFLOAD_MAPPERS22:%.*]] = alloca [1 x ptr], align 4
3219 // CK13-NEXT:    [[KERNEL_ARGS23:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
3220 // CK13-NEXT:    [[_TMP26:%.*]] = alloca ptr, align 4
3221 // CK13-NEXT:    [[DOTOFFLOAD_BASEPTRS27:%.*]] = alloca [1 x ptr], align 4
3222 // CK13-NEXT:    [[DOTOFFLOAD_PTRS28:%.*]] = alloca [1 x ptr], align 4
3223 // CK13-NEXT:    [[DOTOFFLOAD_MAPPERS29:%.*]] = alloca [1 x ptr], align 4
3224 // CK13-NEXT:    [[KERNEL_ARGS30:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
3225 // CK13-NEXT:    [[_TMP33:%.*]] = alloca ptr, align 4
3226 // CK13-NEXT:    [[_TMP34:%.*]] = alloca ptr, align 4
3227 // CK13-NEXT:    [[DOTOFFLOAD_BASEPTRS35:%.*]] = alloca [2 x ptr], align 4
3228 // CK13-NEXT:    [[DOTOFFLOAD_PTRS36:%.*]] = alloca [2 x ptr], align 4
3229 // CK13-NEXT:    [[DOTOFFLOAD_MAPPERS37:%.*]] = alloca [2 x ptr], align 4
3230 // CK13-NEXT:    [[KERNEL_ARGS38:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
3231 // CK13-NEXT:    store ptr [[LR]], ptr [[LR_ADDR]], align 4
3232 // CK13-NEXT:    store ptr [[TR]], ptr [[TR_ADDR]], align 4
3233 // CK13-NEXT:    [[TMP0:%.*]] = load ptr, ptr @g, align 4
3234 // CK13-NEXT:    [[TMP1:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
3235 // CK13-NEXT:    store ptr [[TMP0]], ptr [[TMP1]], align 4
3236 // CK13-NEXT:    [[TMP2:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0
3237 // CK13-NEXT:    store ptr [[TMP0]], ptr [[TMP2]], align 4
3238 // CK13-NEXT:    [[TMP3:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
3239 // CK13-NEXT:    store ptr null, ptr [[TMP3]], align 4
3240 // CK13-NEXT:    [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
3241 // CK13-NEXT:    [[TMP5:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0
3242 // CK13-NEXT:    [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0
3243 // CK13-NEXT:    store i32 3, ptr [[TMP6]], align 4
3244 // CK13-NEXT:    [[TMP7:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1
3245 // CK13-NEXT:    store i32 1, ptr [[TMP7]], align 4
3246 // CK13-NEXT:    [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2
3247 // CK13-NEXT:    store ptr [[TMP4]], ptr [[TMP8]], align 4
3248 // CK13-NEXT:    [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3
3249 // CK13-NEXT:    store ptr [[TMP5]], ptr [[TMP9]], align 4
3250 // CK13-NEXT:    [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4
3251 // CK13-NEXT:    store ptr @.offload_sizes, ptr [[TMP10]], align 4
3252 // CK13-NEXT:    [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5
3253 // CK13-NEXT:    store ptr @.offload_maptypes, ptr [[TMP11]], align 4
3254 // CK13-NEXT:    [[TMP12:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6
3255 // CK13-NEXT:    store ptr null, ptr [[TMP12]], align 4
3256 // CK13-NEXT:    [[TMP13:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7
3257 // CK13-NEXT:    store ptr null, ptr [[TMP13]], align 4
3258 // CK13-NEXT:    [[TMP14:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8
3259 // CK13-NEXT:    store i64 0, ptr [[TMP14]], align 8
3260 // CK13-NEXT:    [[TMP15:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9
3261 // CK13-NEXT:    store i64 0, ptr [[TMP15]], align 8
3262 // CK13-NEXT:    [[TMP16:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10
3263 // CK13-NEXT:    store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP16]], align 4
3264 // CK13-NEXT:    [[TMP17:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11
3265 // CK13-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP17]], align 4
3266 // CK13-NEXT:    [[TMP18:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12
3267 // CK13-NEXT:    store i32 0, ptr [[TMP18]], align 4
3268 // 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]])
3269 // CK13-NEXT:    [[TMP20:%.*]] = icmp ne i32 [[TMP19]], 0
3270 // CK13-NEXT:    br i1 [[TMP20]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
3271 // CK13:       omp_offload.failed:
3272 // CK13-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l37(ptr [[TMP0]]) #[[ATTR2:[0-9]+]]
3273 // CK13-NEXT:    br label [[OMP_OFFLOAD_CONT]]
3274 // CK13:       omp_offload.cont:
3275 // CK13-NEXT:    [[TMP21:%.*]] = load ptr, ptr [[L]], align 4
3276 // CK13-NEXT:    [[TMP22:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS1]], i32 0, i32 0
3277 // CK13-NEXT:    store ptr [[TMP21]], ptr [[TMP22]], align 4
3278 // CK13-NEXT:    [[TMP23:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS2]], i32 0, i32 0
3279 // CK13-NEXT:    store ptr [[TMP21]], ptr [[TMP23]], align 4
3280 // CK13-NEXT:    [[TMP24:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS3]], i32 0, i32 0
3281 // CK13-NEXT:    store ptr null, ptr [[TMP24]], align 4
3282 // CK13-NEXT:    [[TMP25:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS1]], i32 0, i32 0
3283 // CK13-NEXT:    [[TMP26:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS2]], i32 0, i32 0
3284 // CK13-NEXT:    [[TMP27:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 0
3285 // CK13-NEXT:    store i32 3, ptr [[TMP27]], align 4
3286 // CK13-NEXT:    [[TMP28:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 1
3287 // CK13-NEXT:    store i32 1, ptr [[TMP28]], align 4
3288 // CK13-NEXT:    [[TMP29:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 2
3289 // CK13-NEXT:    store ptr [[TMP25]], ptr [[TMP29]], align 4
3290 // CK13-NEXT:    [[TMP30:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 3
3291 // CK13-NEXT:    store ptr [[TMP26]], ptr [[TMP30]], align 4
3292 // CK13-NEXT:    [[TMP31:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 4
3293 // CK13-NEXT:    store ptr @.offload_sizes.1, ptr [[TMP31]], align 4
3294 // CK13-NEXT:    [[TMP32:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 5
3295 // CK13-NEXT:    store ptr @.offload_maptypes.2, ptr [[TMP32]], align 4
3296 // CK13-NEXT:    [[TMP33:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 6
3297 // CK13-NEXT:    store ptr null, ptr [[TMP33]], align 4
3298 // CK13-NEXT:    [[TMP34:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 7
3299 // CK13-NEXT:    store ptr null, ptr [[TMP34]], align 4
3300 // CK13-NEXT:    [[TMP35:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 8
3301 // CK13-NEXT:    store i64 0, ptr [[TMP35]], align 8
3302 // CK13-NEXT:    [[TMP36:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 9
3303 // CK13-NEXT:    store i64 0, ptr [[TMP36]], align 8
3304 // CK13-NEXT:    [[TMP37:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 10
3305 // CK13-NEXT:    store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP37]], align 4
3306 // CK13-NEXT:    [[TMP38:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 11
3307 // CK13-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP38]], align 4
3308 // CK13-NEXT:    [[TMP39:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS4]], i32 0, i32 12
3309 // CK13-NEXT:    store i32 0, ptr [[TMP39]], align 4
3310 // 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]])
3311 // CK13-NEXT:    [[TMP41:%.*]] = icmp ne i32 [[TMP40]], 0
3312 // CK13-NEXT:    br i1 [[TMP41]], label [[OMP_OFFLOAD_FAILED5:%.*]], label [[OMP_OFFLOAD_CONT6:%.*]]
3313 // CK13:       omp_offload.failed5:
3314 // CK13-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l43(ptr [[TMP21]]) #[[ATTR2]]
3315 // CK13-NEXT:    br label [[OMP_OFFLOAD_CONT6]]
3316 // CK13:       omp_offload.cont6:
3317 // CK13-NEXT:    [[TMP42:%.*]] = load ptr, ptr [[T]], align 4
3318 // CK13-NEXT:    [[TMP43:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS7]], i32 0, i32 0
3319 // CK13-NEXT:    store ptr [[TMP42]], ptr [[TMP43]], align 4
3320 // CK13-NEXT:    [[TMP44:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS8]], i32 0, i32 0
3321 // CK13-NEXT:    store ptr [[TMP42]], ptr [[TMP44]], align 4
3322 // CK13-NEXT:    [[TMP45:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS9]], i32 0, i32 0
3323 // CK13-NEXT:    store ptr null, ptr [[TMP45]], align 4
3324 // CK13-NEXT:    [[TMP46:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS7]], i32 0, i32 0
3325 // CK13-NEXT:    [[TMP47:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS8]], i32 0, i32 0
3326 // CK13-NEXT:    [[TMP48:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 0
3327 // CK13-NEXT:    store i32 3, ptr [[TMP48]], align 4
3328 // CK13-NEXT:    [[TMP49:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 1
3329 // CK13-NEXT:    store i32 1, ptr [[TMP49]], align 4
3330 // CK13-NEXT:    [[TMP50:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 2
3331 // CK13-NEXT:    store ptr [[TMP46]], ptr [[TMP50]], align 4
3332 // CK13-NEXT:    [[TMP51:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 3
3333 // CK13-NEXT:    store ptr [[TMP47]], ptr [[TMP51]], align 4
3334 // CK13-NEXT:    [[TMP52:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 4
3335 // CK13-NEXT:    store ptr @.offload_sizes.3, ptr [[TMP52]], align 4
3336 // CK13-NEXT:    [[TMP53:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 5
3337 // CK13-NEXT:    store ptr @.offload_maptypes.4, ptr [[TMP53]], align 4
3338 // CK13-NEXT:    [[TMP54:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 6
3339 // CK13-NEXT:    store ptr null, ptr [[TMP54]], align 4
3340 // CK13-NEXT:    [[TMP55:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 7
3341 // CK13-NEXT:    store ptr null, ptr [[TMP55]], align 4
3342 // CK13-NEXT:    [[TMP56:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 8
3343 // CK13-NEXT:    store i64 0, ptr [[TMP56]], align 8
3344 // CK13-NEXT:    [[TMP57:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 9
3345 // CK13-NEXT:    store i64 0, ptr [[TMP57]], align 8
3346 // CK13-NEXT:    [[TMP58:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 10
3347 // CK13-NEXT:    store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP58]], align 4
3348 // CK13-NEXT:    [[TMP59:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 11
3349 // CK13-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP59]], align 4
3350 // CK13-NEXT:    [[TMP60:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS10]], i32 0, i32 12
3351 // CK13-NEXT:    store i32 0, ptr [[TMP60]], align 4
3352 // 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]])
3353 // CK13-NEXT:    [[TMP62:%.*]] = icmp ne i32 [[TMP61]], 0
3354 // CK13-NEXT:    br i1 [[TMP62]], label [[OMP_OFFLOAD_FAILED11:%.*]], label [[OMP_OFFLOAD_CONT12:%.*]]
3355 // CK13:       omp_offload.failed11:
3356 // CK13-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l49(ptr [[TMP42]]) #[[ATTR2]]
3357 // CK13-NEXT:    br label [[OMP_OFFLOAD_CONT12]]
3358 // CK13:       omp_offload.cont12:
3359 // CK13-NEXT:    [[TMP63:%.*]] = load ptr, ptr [[LR_ADDR]], align 4
3360 // CK13-NEXT:    store ptr [[TMP63]], ptr [[TMP]], align 4
3361 // CK13-NEXT:    [[TMP64:%.*]] = load ptr, ptr [[TMP]], align 4
3362 // CK13-NEXT:    [[TMP65:%.*]] = load ptr, ptr [[TMP64]], align 4
3363 // CK13-NEXT:    [[TMP66:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS13]], i32 0, i32 0
3364 // CK13-NEXT:    store ptr [[TMP65]], ptr [[TMP66]], align 4
3365 // CK13-NEXT:    [[TMP67:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS14]], i32 0, i32 0
3366 // CK13-NEXT:    store ptr [[TMP65]], ptr [[TMP67]], align 4
3367 // CK13-NEXT:    [[TMP68:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS15]], i32 0, i32 0
3368 // CK13-NEXT:    store ptr null, ptr [[TMP68]], align 4
3369 // CK13-NEXT:    [[TMP69:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS13]], i32 0, i32 0
3370 // CK13-NEXT:    [[TMP70:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS14]], i32 0, i32 0
3371 // CK13-NEXT:    [[TMP71:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 0
3372 // CK13-NEXT:    store i32 3, ptr [[TMP71]], align 4
3373 // CK13-NEXT:    [[TMP72:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 1
3374 // CK13-NEXT:    store i32 1, ptr [[TMP72]], align 4
3375 // CK13-NEXT:    [[TMP73:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 2
3376 // CK13-NEXT:    store ptr [[TMP69]], ptr [[TMP73]], align 4
3377 // CK13-NEXT:    [[TMP74:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 3
3378 // CK13-NEXT:    store ptr [[TMP70]], ptr [[TMP74]], align 4
3379 // CK13-NEXT:    [[TMP75:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 4
3380 // CK13-NEXT:    store ptr @.offload_sizes.5, ptr [[TMP75]], align 4
3381 // CK13-NEXT:    [[TMP76:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 5
3382 // CK13-NEXT:    store ptr @.offload_maptypes.6, ptr [[TMP76]], align 4
3383 // CK13-NEXT:    [[TMP77:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 6
3384 // CK13-NEXT:    store ptr null, ptr [[TMP77]], align 4
3385 // CK13-NEXT:    [[TMP78:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 7
3386 // CK13-NEXT:    store ptr null, ptr [[TMP78]], align 4
3387 // CK13-NEXT:    [[TMP79:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 8
3388 // CK13-NEXT:    store i64 0, ptr [[TMP79]], align 8
3389 // CK13-NEXT:    [[TMP80:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 9
3390 // CK13-NEXT:    store i64 0, ptr [[TMP80]], align 8
3391 // CK13-NEXT:    [[TMP81:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 10
3392 // CK13-NEXT:    store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP81]], align 4
3393 // CK13-NEXT:    [[TMP82:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 11
3394 // CK13-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP82]], align 4
3395 // CK13-NEXT:    [[TMP83:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS16]], i32 0, i32 12
3396 // CK13-NEXT:    store i32 0, ptr [[TMP83]], align 4
3397 // 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]])
3398 // CK13-NEXT:    [[TMP85:%.*]] = icmp ne i32 [[TMP84]], 0
3399 // CK13-NEXT:    br i1 [[TMP85]], label [[OMP_OFFLOAD_FAILED17:%.*]], label [[OMP_OFFLOAD_CONT18:%.*]]
3400 // CK13:       omp_offload.failed17:
3401 // CK13-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l55(ptr [[TMP65]]) #[[ATTR2]]
3402 // CK13-NEXT:    br label [[OMP_OFFLOAD_CONT18]]
3403 // CK13:       omp_offload.cont18:
3404 // CK13-NEXT:    [[TMP86:%.*]] = load ptr, ptr [[TR_ADDR]], align 4
3405 // CK13-NEXT:    store ptr [[TMP86]], ptr [[_TMP19]], align 4
3406 // CK13-NEXT:    [[TMP87:%.*]] = load ptr, ptr [[_TMP19]], align 4
3407 // CK13-NEXT:    [[TMP88:%.*]] = load ptr, ptr [[TMP87]], align 4
3408 // CK13-NEXT:    [[TMP89:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS20]], i32 0, i32 0
3409 // CK13-NEXT:    store ptr [[TMP88]], ptr [[TMP89]], align 4
3410 // CK13-NEXT:    [[TMP90:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS21]], i32 0, i32 0
3411 // CK13-NEXT:    store ptr [[TMP88]], ptr [[TMP90]], align 4
3412 // CK13-NEXT:    [[TMP91:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS22]], i32 0, i32 0
3413 // CK13-NEXT:    store ptr null, ptr [[TMP91]], align 4
3414 // CK13-NEXT:    [[TMP92:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS20]], i32 0, i32 0
3415 // CK13-NEXT:    [[TMP93:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS21]], i32 0, i32 0
3416 // CK13-NEXT:    [[TMP94:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 0
3417 // CK13-NEXT:    store i32 3, ptr [[TMP94]], align 4
3418 // CK13-NEXT:    [[TMP95:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 1
3419 // CK13-NEXT:    store i32 1, ptr [[TMP95]], align 4
3420 // CK13-NEXT:    [[TMP96:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 2
3421 // CK13-NEXT:    store ptr [[TMP92]], ptr [[TMP96]], align 4
3422 // CK13-NEXT:    [[TMP97:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 3
3423 // CK13-NEXT:    store ptr [[TMP93]], ptr [[TMP97]], align 4
3424 // CK13-NEXT:    [[TMP98:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 4
3425 // CK13-NEXT:    store ptr @.offload_sizes.7, ptr [[TMP98]], align 4
3426 // CK13-NEXT:    [[TMP99:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 5
3427 // CK13-NEXT:    store ptr @.offload_maptypes.8, ptr [[TMP99]], align 4
3428 // CK13-NEXT:    [[TMP100:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 6
3429 // CK13-NEXT:    store ptr null, ptr [[TMP100]], align 4
3430 // CK13-NEXT:    [[TMP101:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 7
3431 // CK13-NEXT:    store ptr null, ptr [[TMP101]], align 4
3432 // CK13-NEXT:    [[TMP102:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 8
3433 // CK13-NEXT:    store i64 0, ptr [[TMP102]], align 8
3434 // CK13-NEXT:    [[TMP103:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 9
3435 // CK13-NEXT:    store i64 0, ptr [[TMP103]], align 8
3436 // CK13-NEXT:    [[TMP104:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 10
3437 // CK13-NEXT:    store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP104]], align 4
3438 // CK13-NEXT:    [[TMP105:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 11
3439 // CK13-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP105]], align 4
3440 // CK13-NEXT:    [[TMP106:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS23]], i32 0, i32 12
3441 // CK13-NEXT:    store i32 0, ptr [[TMP106]], align 4
3442 // 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]])
3443 // CK13-NEXT:    [[TMP108:%.*]] = icmp ne i32 [[TMP107]], 0
3444 // CK13-NEXT:    br i1 [[TMP108]], label [[OMP_OFFLOAD_FAILED24:%.*]], label [[OMP_OFFLOAD_CONT25:%.*]]
3445 // CK13:       omp_offload.failed24:
3446 // CK13-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l61(ptr [[TMP88]]) #[[ATTR2]]
3447 // CK13-NEXT:    br label [[OMP_OFFLOAD_CONT25]]
3448 // CK13:       omp_offload.cont25:
3449 // CK13-NEXT:    [[TMP109:%.*]] = load ptr, ptr [[TR_ADDR]], align 4
3450 // CK13-NEXT:    store ptr [[TMP109]], ptr [[_TMP26]], align 4
3451 // CK13-NEXT:    [[TMP110:%.*]] = load ptr, ptr [[_TMP26]], align 4
3452 // CK13-NEXT:    [[TMP111:%.*]] = load ptr, ptr [[TMP110]], align 4
3453 // CK13-NEXT:    [[TMP112:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS27]], i32 0, i32 0
3454 // CK13-NEXT:    store ptr [[TMP111]], ptr [[TMP112]], align 4
3455 // CK13-NEXT:    [[TMP113:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS28]], i32 0, i32 0
3456 // CK13-NEXT:    store ptr [[TMP111]], ptr [[TMP113]], align 4
3457 // CK13-NEXT:    [[TMP114:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS29]], i32 0, i32 0
3458 // CK13-NEXT:    store ptr null, ptr [[TMP114]], align 4
3459 // CK13-NEXT:    [[TMP115:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS27]], i32 0, i32 0
3460 // CK13-NEXT:    [[TMP116:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS28]], i32 0, i32 0
3461 // CK13-NEXT:    [[TMP117:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 0
3462 // CK13-NEXT:    store i32 3, ptr [[TMP117]], align 4
3463 // CK13-NEXT:    [[TMP118:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 1
3464 // CK13-NEXT:    store i32 1, ptr [[TMP118]], align 4
3465 // CK13-NEXT:    [[TMP119:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 2
3466 // CK13-NEXT:    store ptr [[TMP115]], ptr [[TMP119]], align 4
3467 // CK13-NEXT:    [[TMP120:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 3
3468 // CK13-NEXT:    store ptr [[TMP116]], ptr [[TMP120]], align 4
3469 // CK13-NEXT:    [[TMP121:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 4
3470 // CK13-NEXT:    store ptr @.offload_sizes.9, ptr [[TMP121]], align 4
3471 // CK13-NEXT:    [[TMP122:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 5
3472 // CK13-NEXT:    store ptr @.offload_maptypes.10, ptr [[TMP122]], align 4
3473 // CK13-NEXT:    [[TMP123:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 6
3474 // CK13-NEXT:    store ptr null, ptr [[TMP123]], align 4
3475 // CK13-NEXT:    [[TMP124:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 7
3476 // CK13-NEXT:    store ptr null, ptr [[TMP124]], align 4
3477 // CK13-NEXT:    [[TMP125:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 8
3478 // CK13-NEXT:    store i64 0, ptr [[TMP125]], align 8
3479 // CK13-NEXT:    [[TMP126:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 9
3480 // CK13-NEXT:    store i64 0, ptr [[TMP126]], align 8
3481 // CK13-NEXT:    [[TMP127:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 10
3482 // CK13-NEXT:    store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP127]], align 4
3483 // CK13-NEXT:    [[TMP128:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 11
3484 // CK13-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP128]], align 4
3485 // CK13-NEXT:    [[TMP129:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS30]], i32 0, i32 12
3486 // CK13-NEXT:    store i32 0, ptr [[TMP129]], align 4
3487 // 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]])
3488 // CK13-NEXT:    [[TMP131:%.*]] = icmp ne i32 [[TMP130]], 0
3489 // CK13-NEXT:    br i1 [[TMP131]], label [[OMP_OFFLOAD_FAILED31:%.*]], label [[OMP_OFFLOAD_CONT32:%.*]]
3490 // CK13:       omp_offload.failed31:
3491 // CK13-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l67(ptr [[TMP111]]) #[[ATTR2]]
3492 // CK13-NEXT:    br label [[OMP_OFFLOAD_CONT32]]
3493 // CK13:       omp_offload.cont32:
3494 // CK13-NEXT:    [[TMP132:%.*]] = load ptr, ptr [[TR_ADDR]], align 4
3495 // CK13-NEXT:    store ptr [[TMP132]], ptr [[_TMP33]], align 4
3496 // CK13-NEXT:    [[TMP133:%.*]] = load ptr, ptr [[LR_ADDR]], align 4
3497 // CK13-NEXT:    store ptr [[TMP133]], ptr [[_TMP34]], align 4
3498 // CK13-NEXT:    [[TMP134:%.*]] = load ptr, ptr [[_TMP33]], align 4
3499 // CK13-NEXT:    [[TMP135:%.*]] = load ptr, ptr [[TMP134]], align 4
3500 // CK13-NEXT:    [[TMP136:%.*]] = load ptr, ptr [[_TMP34]], align 4
3501 // CK13-NEXT:    [[TMP137:%.*]] = load ptr, ptr [[TMP136]], align 4
3502 // CK13-NEXT:    [[TMP138:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS35]], i32 0, i32 0
3503 // CK13-NEXT:    store ptr [[TMP135]], ptr [[TMP138]], align 4
3504 // CK13-NEXT:    [[TMP139:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS36]], i32 0, i32 0
3505 // CK13-NEXT:    store ptr [[TMP135]], ptr [[TMP139]], align 4
3506 // CK13-NEXT:    [[TMP140:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_MAPPERS37]], i32 0, i32 0
3507 // CK13-NEXT:    store ptr null, ptr [[TMP140]], align 4
3508 // CK13-NEXT:    [[TMP141:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS35]], i32 0, i32 1
3509 // CK13-NEXT:    store ptr [[TMP137]], ptr [[TMP141]], align 4
3510 // CK13-NEXT:    [[TMP142:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS36]], i32 0, i32 1
3511 // CK13-NEXT:    store ptr [[TMP137]], ptr [[TMP142]], align 4
3512 // CK13-NEXT:    [[TMP143:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_MAPPERS37]], i32 0, i32 1
3513 // CK13-NEXT:    store ptr null, ptr [[TMP143]], align 4
3514 // CK13-NEXT:    [[TMP144:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS35]], i32 0, i32 0
3515 // CK13-NEXT:    [[TMP145:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS36]], i32 0, i32 0
3516 // CK13-NEXT:    [[TMP146:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 0
3517 // CK13-NEXT:    store i32 3, ptr [[TMP146]], align 4
3518 // CK13-NEXT:    [[TMP147:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 1
3519 // CK13-NEXT:    store i32 2, ptr [[TMP147]], align 4
3520 // CK13-NEXT:    [[TMP148:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 2
3521 // CK13-NEXT:    store ptr [[TMP144]], ptr [[TMP148]], align 4
3522 // CK13-NEXT:    [[TMP149:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 3
3523 // CK13-NEXT:    store ptr [[TMP145]], ptr [[TMP149]], align 4
3524 // CK13-NEXT:    [[TMP150:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 4
3525 // CK13-NEXT:    store ptr @.offload_sizes.11, ptr [[TMP150]], align 4
3526 // CK13-NEXT:    [[TMP151:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 5
3527 // CK13-NEXT:    store ptr @.offload_maptypes.12, ptr [[TMP151]], align 4
3528 // CK13-NEXT:    [[TMP152:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 6
3529 // CK13-NEXT:    store ptr null, ptr [[TMP152]], align 4
3530 // CK13-NEXT:    [[TMP153:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 7
3531 // CK13-NEXT:    store ptr null, ptr [[TMP153]], align 4
3532 // CK13-NEXT:    [[TMP154:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 8
3533 // CK13-NEXT:    store i64 0, ptr [[TMP154]], align 8
3534 // CK13-NEXT:    [[TMP155:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 9
3535 // CK13-NEXT:    store i64 0, ptr [[TMP155]], align 8
3536 // CK13-NEXT:    [[TMP156:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 10
3537 // CK13-NEXT:    store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP156]], align 4
3538 // CK13-NEXT:    [[TMP157:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 11
3539 // CK13-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP157]], align 4
3540 // CK13-NEXT:    [[TMP158:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS38]], i32 0, i32 12
3541 // CK13-NEXT:    store i32 0, ptr [[TMP158]], align 4
3542 // 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]])
3543 // CK13-NEXT:    [[TMP160:%.*]] = icmp ne i32 [[TMP159]], 0
3544 // CK13-NEXT:    br i1 [[TMP160]], label [[OMP_OFFLOAD_FAILED39:%.*]], label [[OMP_OFFLOAD_CONT40:%.*]]
3545 // CK13:       omp_offload.failed39:
3546 // CK13-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l74(ptr [[TMP135]], ptr [[TMP137]]) #[[ATTR2]]
3547 // CK13-NEXT:    br label [[OMP_OFFLOAD_CONT40]]
3548 // CK13:       omp_offload.cont40:
3549 // CK13-NEXT:    ret void
3550 //
3551 //
3552 // CK13-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l37
3553 // CK13-SAME: (ptr noundef [[G:%.*]]) #[[ATTR1:[0-9]+]] {
3554 // CK13-NEXT:  entry:
3555 // CK13-NEXT:    [[G_ADDR:%.*]] = alloca ptr, align 4
3556 // CK13-NEXT:    store ptr [[G]], ptr [[G_ADDR]], align 4
3557 // CK13-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[G_ADDR]], align 4
3558 // CK13-NEXT:    [[INCDEC_PTR:%.*]] = getelementptr inbounds nuw double, ptr [[TMP0]], i32 1
3559 // CK13-NEXT:    store ptr [[INCDEC_PTR]], ptr [[G_ADDR]], align 4
3560 // CK13-NEXT:    ret void
3561 //
3562 //
3563 // CK13-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l43
3564 // CK13-SAME: (ptr noundef [[L:%.*]]) #[[ATTR1]] {
3565 // CK13-NEXT:  entry:
3566 // CK13-NEXT:    [[L_ADDR:%.*]] = alloca ptr, align 4
3567 // CK13-NEXT:    store ptr [[L]], ptr [[L_ADDR]], align 4
3568 // CK13-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[L_ADDR]], align 4
3569 // CK13-NEXT:    [[INCDEC_PTR:%.*]] = getelementptr inbounds nuw float, ptr [[TMP0]], i32 1
3570 // CK13-NEXT:    store ptr [[INCDEC_PTR]], ptr [[L_ADDR]], align 4
3571 // CK13-NEXT:    ret void
3572 //
3573 //
3574 // CK13-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l49
3575 // CK13-SAME: (ptr noundef [[T:%.*]]) #[[ATTR1]] {
3576 // CK13-NEXT:  entry:
3577 // CK13-NEXT:    [[T_ADDR:%.*]] = alloca ptr, align 4
3578 // CK13-NEXT:    store ptr [[T]], ptr [[T_ADDR]], align 4
3579 // CK13-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[T_ADDR]], align 4
3580 // CK13-NEXT:    [[INCDEC_PTR:%.*]] = getelementptr inbounds nuw i32, ptr [[TMP0]], i32 1
3581 // CK13-NEXT:    store ptr [[INCDEC_PTR]], ptr [[T_ADDR]], align 4
3582 // CK13-NEXT:    ret void
3583 //
3584 //
3585 // CK13-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l55
3586 // CK13-SAME: (ptr noundef [[LR:%.*]]) #[[ATTR1]] {
3587 // CK13-NEXT:  entry:
3588 // CK13-NEXT:    [[LR_ADDR:%.*]] = alloca ptr, align 4
3589 // CK13-NEXT:    [[TMP:%.*]] = alloca ptr, align 4
3590 // CK13-NEXT:    store ptr [[LR]], ptr [[LR_ADDR]], align 4
3591 // CK13-NEXT:    store ptr [[LR_ADDR]], ptr [[TMP]], align 4
3592 // CK13-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[TMP]], align 4
3593 // CK13-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[TMP0]], align 4
3594 // CK13-NEXT:    [[INCDEC_PTR:%.*]] = getelementptr inbounds nuw float, ptr [[TMP1]], i32 1
3595 // CK13-NEXT:    store ptr [[INCDEC_PTR]], ptr [[TMP0]], align 4
3596 // CK13-NEXT:    ret void
3597 //
3598 //
3599 // CK13-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l61
3600 // CK13-SAME: (ptr noundef [[TR:%.*]]) #[[ATTR1]] {
3601 // CK13-NEXT:  entry:
3602 // CK13-NEXT:    [[TR_ADDR:%.*]] = alloca ptr, align 4
3603 // CK13-NEXT:    [[TMP:%.*]] = alloca ptr, align 4
3604 // CK13-NEXT:    store ptr [[TR]], ptr [[TR_ADDR]], align 4
3605 // CK13-NEXT:    store ptr [[TR_ADDR]], ptr [[TMP]], align 4
3606 // CK13-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[TMP]], align 4
3607 // CK13-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[TMP0]], align 4
3608 // CK13-NEXT:    [[INCDEC_PTR:%.*]] = getelementptr inbounds nuw i32, ptr [[TMP1]], i32 1
3609 // CK13-NEXT:    store ptr [[INCDEC_PTR]], ptr [[TMP0]], align 4
3610 // CK13-NEXT:    ret void
3611 //
3612 //
3613 // CK13-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l67
3614 // CK13-SAME: (ptr noundef [[TR:%.*]]) #[[ATTR1]] {
3615 // CK13-NEXT:  entry:
3616 // CK13-NEXT:    [[TR_ADDR:%.*]] = alloca ptr, align 4
3617 // CK13-NEXT:    [[TMP:%.*]] = alloca ptr, align 4
3618 // CK13-NEXT:    store ptr [[TR]], ptr [[TR_ADDR]], align 4
3619 // CK13-NEXT:    store ptr [[TR_ADDR]], ptr [[TMP]], align 4
3620 // CK13-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[TMP]], align 4
3621 // CK13-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[TMP0]], align 4
3622 // CK13-NEXT:    [[INCDEC_PTR:%.*]] = getelementptr inbounds nuw i32, ptr [[TMP1]], i32 1
3623 // CK13-NEXT:    store ptr [[INCDEC_PTR]], ptr [[TMP0]], align 4
3624 // CK13-NEXT:    ret void
3625 //
3626 //
3627 // CK13-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooIiEvRPfRPT__l74
3628 // CK13-SAME: (ptr noundef [[TR:%.*]], ptr noundef [[LR:%.*]]) #[[ATTR1]] {
3629 // CK13-NEXT:  entry:
3630 // CK13-NEXT:    [[TR_ADDR:%.*]] = alloca ptr, align 4
3631 // CK13-NEXT:    [[LR_ADDR:%.*]] = alloca ptr, align 4
3632 // CK13-NEXT:    [[TMP:%.*]] = alloca ptr, align 4
3633 // CK13-NEXT:    [[_TMP1:%.*]] = alloca ptr, align 4
3634 // CK13-NEXT:    store ptr [[TR]], ptr [[TR_ADDR]], align 4
3635 // CK13-NEXT:    store ptr [[LR]], ptr [[LR_ADDR]], align 4
3636 // CK13-NEXT:    store ptr [[TR_ADDR]], ptr [[TMP]], align 4
3637 // CK13-NEXT:    store ptr [[LR_ADDR]], ptr [[_TMP1]], align 4
3638 // CK13-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[TMP]], align 4
3639 // CK13-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[TMP0]], align 4
3640 // CK13-NEXT:    [[INCDEC_PTR:%.*]] = getelementptr inbounds nuw i32, ptr [[TMP1]], i32 1
3641 // CK13-NEXT:    store ptr [[INCDEC_PTR]], ptr [[TMP0]], align 4
3642 // CK13-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[_TMP1]], align 4
3643 // CK13-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[TMP2]], align 4
3644 // CK13-NEXT:    [[INCDEC_PTR2:%.*]] = getelementptr inbounds nuw float, ptr [[TMP3]], i32 1
3645 // CK13-NEXT:    store ptr [[INCDEC_PTR2]], ptr [[TMP2]], align 4
3646 // CK13-NEXT:    ret void
3647 //
3648 //
3649 // SIMD-ONLY00-LABEL: define {{[^@]+}}@_Z3barRPfRPi
3650 // SIMD-ONLY00-SAME: (ptr noundef nonnull align 8 dereferenceable(8) [[A:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[B:%.*]]) #[[ATTR0:[0-9]+]] {
3651 // SIMD-ONLY00-NEXT:  entry:
3652 // SIMD-ONLY00-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 8
3653 // SIMD-ONLY00-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 8
3654 // SIMD-ONLY00-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 8
3655 // SIMD-ONLY00-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 8
3656 // SIMD-ONLY00-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 8
3657 // SIMD-ONLY00-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[B_ADDR]], align 8
3658 // SIMD-ONLY00-NEXT:    call void @_Z3fooIiEvRPfRPT_(ptr noundef nonnull align 8 dereferenceable(8) [[TMP0]], ptr noundef nonnull align 8 dereferenceable(8) [[TMP1]])
3659 // SIMD-ONLY00-NEXT:    ret void
3660 //
3661 //
3662 // SIMD-ONLY00-LABEL: define {{[^@]+}}@_Z3fooIiEvRPfRPT_
3663 // SIMD-ONLY00-SAME: (ptr noundef nonnull align 8 dereferenceable(8) [[LR:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[TR:%.*]]) #[[ATTR0]] comdat {
3664 // SIMD-ONLY00-NEXT:  entry:
3665 // SIMD-ONLY00-NEXT:    [[LR_ADDR:%.*]] = alloca ptr, align 8
3666 // SIMD-ONLY00-NEXT:    [[TR_ADDR:%.*]] = alloca ptr, align 8
3667 // SIMD-ONLY00-NEXT:    [[L:%.*]] = alloca ptr, align 8
3668 // SIMD-ONLY00-NEXT:    [[T:%.*]] = alloca ptr, align 8
3669 // SIMD-ONLY00-NEXT:    [[TMP:%.*]] = alloca ptr, align 8
3670 // SIMD-ONLY00-NEXT:    [[_TMP4:%.*]] = alloca ptr, align 8
3671 // SIMD-ONLY00-NEXT:    [[_TMP6:%.*]] = alloca ptr, align 8
3672 // SIMD-ONLY00-NEXT:    [[_TMP8:%.*]] = alloca ptr, align 8
3673 // SIMD-ONLY00-NEXT:    [[_TMP9:%.*]] = alloca ptr, align 8
3674 // SIMD-ONLY00-NEXT:    store ptr [[LR]], ptr [[LR_ADDR]], align 8
3675 // SIMD-ONLY00-NEXT:    store ptr [[TR]], ptr [[TR_ADDR]], align 8
3676 // SIMD-ONLY00-NEXT:    [[TMP0:%.*]] = load ptr, ptr @g, align 8
3677 // SIMD-ONLY00-NEXT:    [[INCDEC_PTR:%.*]] = getelementptr inbounds nuw double, ptr [[TMP0]], i32 1
3678 // SIMD-ONLY00-NEXT:    store ptr [[INCDEC_PTR]], ptr @g, align 8
3679 // SIMD-ONLY00-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[L]], align 8
3680 // SIMD-ONLY00-NEXT:    [[INCDEC_PTR1:%.*]] = getelementptr inbounds nuw float, ptr [[TMP1]], i32 1
3681 // SIMD-ONLY00-NEXT:    store ptr [[INCDEC_PTR1]], ptr [[L]], align 8
3682 // SIMD-ONLY00-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[T]], align 8
3683 // SIMD-ONLY00-NEXT:    [[INCDEC_PTR2:%.*]] = getelementptr inbounds nuw i32, ptr [[TMP2]], i32 1
3684 // SIMD-ONLY00-NEXT:    store ptr [[INCDEC_PTR2]], ptr [[T]], align 8
3685 // SIMD-ONLY00-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[LR_ADDR]], align 8
3686 // SIMD-ONLY00-NEXT:    store ptr [[TMP3]], ptr [[TMP]], align 8
3687 // SIMD-ONLY00-NEXT:    [[TMP4:%.*]] = load ptr, ptr [[LR_ADDR]], align 8
3688 // SIMD-ONLY00-NEXT:    [[TMP5:%.*]] = load ptr, ptr [[TMP]], align 8
3689 // SIMD-ONLY00-NEXT:    [[TMP6:%.*]] = load ptr, ptr [[TMP5]], align 8
3690 // SIMD-ONLY00-NEXT:    [[INCDEC_PTR3:%.*]] = getelementptr inbounds nuw float, ptr [[TMP6]], i32 1
3691 // SIMD-ONLY00-NEXT:    store ptr [[INCDEC_PTR3]], ptr [[TMP5]], align 8
3692 // SIMD-ONLY00-NEXT:    [[TMP7:%.*]] = load ptr, ptr [[TR_ADDR]], align 8
3693 // SIMD-ONLY00-NEXT:    store ptr [[TMP7]], ptr [[_TMP4]], align 8
3694 // SIMD-ONLY00-NEXT:    [[TMP8:%.*]] = load ptr, ptr [[TR_ADDR]], align 8
3695 // SIMD-ONLY00-NEXT:    [[TMP9:%.*]] = load ptr, ptr [[_TMP4]], align 8
3696 // SIMD-ONLY00-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[TMP9]], align 8
3697 // SIMD-ONLY00-NEXT:    [[INCDEC_PTR5:%.*]] = getelementptr inbounds nuw i32, ptr [[TMP10]], i32 1
3698 // SIMD-ONLY00-NEXT:    store ptr [[INCDEC_PTR5]], ptr [[TMP9]], align 8
3699 // SIMD-ONLY00-NEXT:    [[TMP11:%.*]] = load ptr, ptr [[TR_ADDR]], align 8
3700 // SIMD-ONLY00-NEXT:    store ptr [[TMP11]], ptr [[_TMP6]], align 8
3701 // SIMD-ONLY00-NEXT:    [[TMP12:%.*]] = load ptr, ptr [[TR_ADDR]], align 8
3702 // SIMD-ONLY00-NEXT:    [[TMP13:%.*]] = load ptr, ptr [[_TMP6]], align 8
3703 // SIMD-ONLY00-NEXT:    [[TMP14:%.*]] = load ptr, ptr [[TMP13]], align 8
3704 // SIMD-ONLY00-NEXT:    [[INCDEC_PTR7:%.*]] = getelementptr inbounds nuw i32, ptr [[TMP14]], i32 1
3705 // SIMD-ONLY00-NEXT:    store ptr [[INCDEC_PTR7]], ptr [[TMP13]], align 8
3706 // SIMD-ONLY00-NEXT:    [[TMP15:%.*]] = load ptr, ptr [[TR_ADDR]], align 8
3707 // SIMD-ONLY00-NEXT:    store ptr [[TMP15]], ptr [[_TMP8]], align 8
3708 // SIMD-ONLY00-NEXT:    [[TMP16:%.*]] = load ptr, ptr [[LR_ADDR]], align 8
3709 // SIMD-ONLY00-NEXT:    store ptr [[TMP16]], ptr [[_TMP9]], align 8
3710 // SIMD-ONLY00-NEXT:    [[TMP17:%.*]] = load ptr, ptr [[TR_ADDR]], align 8
3711 // SIMD-ONLY00-NEXT:    [[TMP18:%.*]] = load ptr, ptr [[LR_ADDR]], align 8
3712 // SIMD-ONLY00-NEXT:    [[TMP19:%.*]] = load ptr, ptr [[_TMP8]], align 8
3713 // SIMD-ONLY00-NEXT:    [[TMP20:%.*]] = load ptr, ptr [[TMP19]], align 8
3714 // SIMD-ONLY00-NEXT:    [[INCDEC_PTR10:%.*]] = getelementptr inbounds nuw i32, ptr [[TMP20]], i32 1
3715 // SIMD-ONLY00-NEXT:    store ptr [[INCDEC_PTR10]], ptr [[TMP19]], align 8
3716 // SIMD-ONLY00-NEXT:    [[TMP21:%.*]] = load ptr, ptr [[_TMP9]], align 8
3717 // SIMD-ONLY00-NEXT:    [[TMP22:%.*]] = load ptr, ptr [[TMP21]], align 8
3718 // SIMD-ONLY00-NEXT:    [[INCDEC_PTR11:%.*]] = getelementptr inbounds nuw float, ptr [[TMP22]], i32 1
3719 // SIMD-ONLY00-NEXT:    store ptr [[INCDEC_PTR11]], ptr [[TMP21]], align 8
3720 // SIMD-ONLY00-NEXT:    ret void
3721 //
3722 //
3723 // SIMD-ONLY01-LABEL: define {{[^@]+}}@_Z3barRPfRPi
3724 // SIMD-ONLY01-SAME: (ptr noundef nonnull align 8 dereferenceable(8) [[A:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[B:%.*]]) #[[ATTR0:[0-9]+]] {
3725 // SIMD-ONLY01-NEXT:  entry:
3726 // SIMD-ONLY01-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 8
3727 // SIMD-ONLY01-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 8
3728 // SIMD-ONLY01-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 8
3729 // SIMD-ONLY01-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 8
3730 // SIMD-ONLY01-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 8
3731 // SIMD-ONLY01-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[B_ADDR]], align 8
3732 // SIMD-ONLY01-NEXT:    call void @_Z3fooIiEvRPfRPT_(ptr noundef nonnull align 8 dereferenceable(8) [[TMP0]], ptr noundef nonnull align 8 dereferenceable(8) [[TMP1]])
3733 // SIMD-ONLY01-NEXT:    ret void
3734 //
3735 //
3736 // SIMD-ONLY01-LABEL: define {{[^@]+}}@_Z3fooIiEvRPfRPT_
3737 // SIMD-ONLY01-SAME: (ptr noundef nonnull align 8 dereferenceable(8) [[LR:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[TR:%.*]]) #[[ATTR0]] comdat {
3738 // SIMD-ONLY01-NEXT:  entry:
3739 // SIMD-ONLY01-NEXT:    [[LR_ADDR:%.*]] = alloca ptr, align 8
3740 // SIMD-ONLY01-NEXT:    [[TR_ADDR:%.*]] = alloca ptr, align 8
3741 // SIMD-ONLY01-NEXT:    [[L:%.*]] = alloca ptr, align 8
3742 // SIMD-ONLY01-NEXT:    [[T:%.*]] = alloca ptr, align 8
3743 // SIMD-ONLY01-NEXT:    [[TMP:%.*]] = alloca ptr, align 8
3744 // SIMD-ONLY01-NEXT:    [[_TMP4:%.*]] = alloca ptr, align 8
3745 // SIMD-ONLY01-NEXT:    [[_TMP6:%.*]] = alloca ptr, align 8
3746 // SIMD-ONLY01-NEXT:    [[_TMP8:%.*]] = alloca ptr, align 8
3747 // SIMD-ONLY01-NEXT:    [[_TMP9:%.*]] = alloca ptr, align 8
3748 // SIMD-ONLY01-NEXT:    store ptr [[LR]], ptr [[LR_ADDR]], align 8
3749 // SIMD-ONLY01-NEXT:    store ptr [[TR]], ptr [[TR_ADDR]], align 8
3750 // SIMD-ONLY01-NEXT:    [[TMP0:%.*]] = load ptr, ptr @g, align 8
3751 // SIMD-ONLY01-NEXT:    [[INCDEC_PTR:%.*]] = getelementptr inbounds nuw double, ptr [[TMP0]], i32 1
3752 // SIMD-ONLY01-NEXT:    store ptr [[INCDEC_PTR]], ptr @g, align 8
3753 // SIMD-ONLY01-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[L]], align 8
3754 // SIMD-ONLY01-NEXT:    [[INCDEC_PTR1:%.*]] = getelementptr inbounds nuw float, ptr [[TMP1]], i32 1
3755 // SIMD-ONLY01-NEXT:    store ptr [[INCDEC_PTR1]], ptr [[L]], align 8
3756 // SIMD-ONLY01-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[T]], align 8
3757 // SIMD-ONLY01-NEXT:    [[INCDEC_PTR2:%.*]] = getelementptr inbounds nuw i32, ptr [[TMP2]], i32 1
3758 // SIMD-ONLY01-NEXT:    store ptr [[INCDEC_PTR2]], ptr [[T]], align 8
3759 // SIMD-ONLY01-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[LR_ADDR]], align 8
3760 // SIMD-ONLY01-NEXT:    store ptr [[TMP3]], ptr [[TMP]], align 8
3761 // SIMD-ONLY01-NEXT:    [[TMP4:%.*]] = load ptr, ptr [[LR_ADDR]], align 8
3762 // SIMD-ONLY01-NEXT:    [[TMP5:%.*]] = load ptr, ptr [[TMP]], align 8
3763 // SIMD-ONLY01-NEXT:    [[TMP6:%.*]] = load ptr, ptr [[TMP5]], align 8
3764 // SIMD-ONLY01-NEXT:    [[INCDEC_PTR3:%.*]] = getelementptr inbounds nuw float, ptr [[TMP6]], i32 1
3765 // SIMD-ONLY01-NEXT:    store ptr [[INCDEC_PTR3]], ptr [[TMP5]], align 8
3766 // SIMD-ONLY01-NEXT:    [[TMP7:%.*]] = load ptr, ptr [[TR_ADDR]], align 8
3767 // SIMD-ONLY01-NEXT:    store ptr [[TMP7]], ptr [[_TMP4]], align 8
3768 // SIMD-ONLY01-NEXT:    [[TMP8:%.*]] = load ptr, ptr [[TR_ADDR]], align 8
3769 // SIMD-ONLY01-NEXT:    [[TMP9:%.*]] = load ptr, ptr [[_TMP4]], align 8
3770 // SIMD-ONLY01-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[TMP9]], align 8
3771 // SIMD-ONLY01-NEXT:    [[INCDEC_PTR5:%.*]] = getelementptr inbounds nuw i32, ptr [[TMP10]], i32 1
3772 // SIMD-ONLY01-NEXT:    store ptr [[INCDEC_PTR5]], ptr [[TMP9]], align 8
3773 // SIMD-ONLY01-NEXT:    [[TMP11:%.*]] = load ptr, ptr [[TR_ADDR]], align 8
3774 // SIMD-ONLY01-NEXT:    store ptr [[TMP11]], ptr [[_TMP6]], align 8
3775 // SIMD-ONLY01-NEXT:    [[TMP12:%.*]] = load ptr, ptr [[TR_ADDR]], align 8
3776 // SIMD-ONLY01-NEXT:    [[TMP13:%.*]] = load ptr, ptr [[_TMP6]], align 8
3777 // SIMD-ONLY01-NEXT:    [[TMP14:%.*]] = load ptr, ptr [[TMP13]], align 8
3778 // SIMD-ONLY01-NEXT:    [[INCDEC_PTR7:%.*]] = getelementptr inbounds nuw i32, ptr [[TMP14]], i32 1
3779 // SIMD-ONLY01-NEXT:    store ptr [[INCDEC_PTR7]], ptr [[TMP13]], align 8
3780 // SIMD-ONLY01-NEXT:    [[TMP15:%.*]] = load ptr, ptr [[TR_ADDR]], align 8
3781 // SIMD-ONLY01-NEXT:    store ptr [[TMP15]], ptr [[_TMP8]], align 8
3782 // SIMD-ONLY01-NEXT:    [[TMP16:%.*]] = load ptr, ptr [[LR_ADDR]], align 8
3783 // SIMD-ONLY01-NEXT:    store ptr [[TMP16]], ptr [[_TMP9]], align 8
3784 // SIMD-ONLY01-NEXT:    [[TMP17:%.*]] = load ptr, ptr [[TR_ADDR]], align 8
3785 // SIMD-ONLY01-NEXT:    [[TMP18:%.*]] = load ptr, ptr [[LR_ADDR]], align 8
3786 // SIMD-ONLY01-NEXT:    [[TMP19:%.*]] = load ptr, ptr [[_TMP8]], align 8
3787 // SIMD-ONLY01-NEXT:    [[TMP20:%.*]] = load ptr, ptr [[TMP19]], align 8
3788 // SIMD-ONLY01-NEXT:    [[INCDEC_PTR10:%.*]] = getelementptr inbounds nuw i32, ptr [[TMP20]], i32 1
3789 // SIMD-ONLY01-NEXT:    store ptr [[INCDEC_PTR10]], ptr [[TMP19]], align 8
3790 // SIMD-ONLY01-NEXT:    [[TMP21:%.*]] = load ptr, ptr [[_TMP9]], align 8
3791 // SIMD-ONLY01-NEXT:    [[TMP22:%.*]] = load ptr, ptr [[TMP21]], align 8
3792 // SIMD-ONLY01-NEXT:    [[INCDEC_PTR11:%.*]] = getelementptr inbounds nuw float, ptr [[TMP22]], i32 1
3793 // SIMD-ONLY01-NEXT:    store ptr [[INCDEC_PTR11]], ptr [[TMP21]], align 8
3794 // SIMD-ONLY01-NEXT:    ret void
3795 //
3796 //
3797 // SIMD-ONLY02-LABEL: define {{[^@]+}}@_Z3barRPfRPi
3798 // SIMD-ONLY02-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[A:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[B:%.*]]) #[[ATTR0:[0-9]+]] {
3799 // SIMD-ONLY02-NEXT:  entry:
3800 // SIMD-ONLY02-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 4
3801 // SIMD-ONLY02-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 4
3802 // SIMD-ONLY02-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 4
3803 // SIMD-ONLY02-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 4
3804 // SIMD-ONLY02-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 4
3805 // SIMD-ONLY02-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[B_ADDR]], align 4
3806 // SIMD-ONLY02-NEXT:    call void @_Z3fooIiEvRPfRPT_(ptr noundef nonnull align 4 dereferenceable(4) [[TMP0]], ptr noundef nonnull align 4 dereferenceable(4) [[TMP1]])
3807 // SIMD-ONLY02-NEXT:    ret void
3808 //
3809 //
3810 // SIMD-ONLY02-LABEL: define {{[^@]+}}@_Z3fooIiEvRPfRPT_
3811 // SIMD-ONLY02-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[LR:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[TR:%.*]]) #[[ATTR0]] comdat {
3812 // SIMD-ONLY02-NEXT:  entry:
3813 // SIMD-ONLY02-NEXT:    [[LR_ADDR:%.*]] = alloca ptr, align 4
3814 // SIMD-ONLY02-NEXT:    [[TR_ADDR:%.*]] = alloca ptr, align 4
3815 // SIMD-ONLY02-NEXT:    [[L:%.*]] = alloca ptr, align 4
3816 // SIMD-ONLY02-NEXT:    [[T:%.*]] = alloca ptr, align 4
3817 // SIMD-ONLY02-NEXT:    [[TMP:%.*]] = alloca ptr, align 4
3818 // SIMD-ONLY02-NEXT:    [[_TMP4:%.*]] = alloca ptr, align 4
3819 // SIMD-ONLY02-NEXT:    [[_TMP6:%.*]] = alloca ptr, align 4
3820 // SIMD-ONLY02-NEXT:    [[_TMP8:%.*]] = alloca ptr, align 4
3821 // SIMD-ONLY02-NEXT:    [[_TMP9:%.*]] = alloca ptr, align 4
3822 // SIMD-ONLY02-NEXT:    store ptr [[LR]], ptr [[LR_ADDR]], align 4
3823 // SIMD-ONLY02-NEXT:    store ptr [[TR]], ptr [[TR_ADDR]], align 4
3824 // SIMD-ONLY02-NEXT:    [[TMP0:%.*]] = load ptr, ptr @g, align 4
3825 // SIMD-ONLY02-NEXT:    [[INCDEC_PTR:%.*]] = getelementptr inbounds nuw double, ptr [[TMP0]], i32 1
3826 // SIMD-ONLY02-NEXT:    store ptr [[INCDEC_PTR]], ptr @g, align 4
3827 // SIMD-ONLY02-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[L]], align 4
3828 // SIMD-ONLY02-NEXT:    [[INCDEC_PTR1:%.*]] = getelementptr inbounds nuw float, ptr [[TMP1]], i32 1
3829 // SIMD-ONLY02-NEXT:    store ptr [[INCDEC_PTR1]], ptr [[L]], align 4
3830 // SIMD-ONLY02-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[T]], align 4
3831 // SIMD-ONLY02-NEXT:    [[INCDEC_PTR2:%.*]] = getelementptr inbounds nuw i32, ptr [[TMP2]], i32 1
3832 // SIMD-ONLY02-NEXT:    store ptr [[INCDEC_PTR2]], ptr [[T]], align 4
3833 // SIMD-ONLY02-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[LR_ADDR]], align 4
3834 // SIMD-ONLY02-NEXT:    store ptr [[TMP3]], ptr [[TMP]], align 4
3835 // SIMD-ONLY02-NEXT:    [[TMP4:%.*]] = load ptr, ptr [[LR_ADDR]], align 4
3836 // SIMD-ONLY02-NEXT:    [[TMP5:%.*]] = load ptr, ptr [[TMP]], align 4
3837 // SIMD-ONLY02-NEXT:    [[TMP6:%.*]] = load ptr, ptr [[TMP5]], align 4
3838 // SIMD-ONLY02-NEXT:    [[INCDEC_PTR3:%.*]] = getelementptr inbounds nuw float, ptr [[TMP6]], i32 1
3839 // SIMD-ONLY02-NEXT:    store ptr [[INCDEC_PTR3]], ptr [[TMP5]], align 4
3840 // SIMD-ONLY02-NEXT:    [[TMP7:%.*]] = load ptr, ptr [[TR_ADDR]], align 4
3841 // SIMD-ONLY02-NEXT:    store ptr [[TMP7]], ptr [[_TMP4]], align 4
3842 // SIMD-ONLY02-NEXT:    [[TMP8:%.*]] = load ptr, ptr [[TR_ADDR]], align 4
3843 // SIMD-ONLY02-NEXT:    [[TMP9:%.*]] = load ptr, ptr [[_TMP4]], align 4
3844 // SIMD-ONLY02-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[TMP9]], align 4
3845 // SIMD-ONLY02-NEXT:    [[INCDEC_PTR5:%.*]] = getelementptr inbounds nuw i32, ptr [[TMP10]], i32 1
3846 // SIMD-ONLY02-NEXT:    store ptr [[INCDEC_PTR5]], ptr [[TMP9]], align 4
3847 // SIMD-ONLY02-NEXT:    [[TMP11:%.*]] = load ptr, ptr [[TR_ADDR]], align 4
3848 // SIMD-ONLY02-NEXT:    store ptr [[TMP11]], ptr [[_TMP6]], align 4
3849 // SIMD-ONLY02-NEXT:    [[TMP12:%.*]] = load ptr, ptr [[TR_ADDR]], align 4
3850 // SIMD-ONLY02-NEXT:    [[TMP13:%.*]] = load ptr, ptr [[_TMP6]], align 4
3851 // SIMD-ONLY02-NEXT:    [[TMP14:%.*]] = load ptr, ptr [[TMP13]], align 4
3852 // SIMD-ONLY02-NEXT:    [[INCDEC_PTR7:%.*]] = getelementptr inbounds nuw i32, ptr [[TMP14]], i32 1
3853 // SIMD-ONLY02-NEXT:    store ptr [[INCDEC_PTR7]], ptr [[TMP13]], align 4
3854 // SIMD-ONLY02-NEXT:    [[TMP15:%.*]] = load ptr, ptr [[TR_ADDR]], align 4
3855 // SIMD-ONLY02-NEXT:    store ptr [[TMP15]], ptr [[_TMP8]], align 4
3856 // SIMD-ONLY02-NEXT:    [[TMP16:%.*]] = load ptr, ptr [[LR_ADDR]], align 4
3857 // SIMD-ONLY02-NEXT:    store ptr [[TMP16]], ptr [[_TMP9]], align 4
3858 // SIMD-ONLY02-NEXT:    [[TMP17:%.*]] = load ptr, ptr [[TR_ADDR]], align 4
3859 // SIMD-ONLY02-NEXT:    [[TMP18:%.*]] = load ptr, ptr [[LR_ADDR]], align 4
3860 // SIMD-ONLY02-NEXT:    [[TMP19:%.*]] = load ptr, ptr [[_TMP8]], align 4
3861 // SIMD-ONLY02-NEXT:    [[TMP20:%.*]] = load ptr, ptr [[TMP19]], align 4
3862 // SIMD-ONLY02-NEXT:    [[INCDEC_PTR10:%.*]] = getelementptr inbounds nuw i32, ptr [[TMP20]], i32 1
3863 // SIMD-ONLY02-NEXT:    store ptr [[INCDEC_PTR10]], ptr [[TMP19]], align 4
3864 // SIMD-ONLY02-NEXT:    [[TMP21:%.*]] = load ptr, ptr [[_TMP9]], align 4
3865 // SIMD-ONLY02-NEXT:    [[TMP22:%.*]] = load ptr, ptr [[TMP21]], align 4
3866 // SIMD-ONLY02-NEXT:    [[INCDEC_PTR11:%.*]] = getelementptr inbounds nuw float, ptr [[TMP22]], i32 1
3867 // SIMD-ONLY02-NEXT:    store ptr [[INCDEC_PTR11]], ptr [[TMP21]], align 4
3868 // SIMD-ONLY02-NEXT:    ret void
3869 //
3870 //
3871 // SIMD-ONLY03-LABEL: define {{[^@]+}}@_Z3barRPfRPi
3872 // SIMD-ONLY03-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[A:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[B:%.*]]) #[[ATTR0:[0-9]+]] {
3873 // SIMD-ONLY03-NEXT:  entry:
3874 // SIMD-ONLY03-NEXT:    [[A_ADDR:%.*]] = alloca ptr, align 4
3875 // SIMD-ONLY03-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 4
3876 // SIMD-ONLY03-NEXT:    store ptr [[A]], ptr [[A_ADDR]], align 4
3877 // SIMD-ONLY03-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 4
3878 // SIMD-ONLY03-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[A_ADDR]], align 4
3879 // SIMD-ONLY03-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[B_ADDR]], align 4
3880 // SIMD-ONLY03-NEXT:    call void @_Z3fooIiEvRPfRPT_(ptr noundef nonnull align 4 dereferenceable(4) [[TMP0]], ptr noundef nonnull align 4 dereferenceable(4) [[TMP1]])
3881 // SIMD-ONLY03-NEXT:    ret void
3882 //
3883 //
3884 // SIMD-ONLY03-LABEL: define {{[^@]+}}@_Z3fooIiEvRPfRPT_
3885 // SIMD-ONLY03-SAME: (ptr noundef nonnull align 4 dereferenceable(4) [[LR:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[TR:%.*]]) #[[ATTR0]] comdat {
3886 // SIMD-ONLY03-NEXT:  entry:
3887 // SIMD-ONLY03-NEXT:    [[LR_ADDR:%.*]] = alloca ptr, align 4
3888 // SIMD-ONLY03-NEXT:    [[TR_ADDR:%.*]] = alloca ptr, align 4
3889 // SIMD-ONLY03-NEXT:    [[L:%.*]] = alloca ptr, align 4
3890 // SIMD-ONLY03-NEXT:    [[T:%.*]] = alloca ptr, align 4
3891 // SIMD-ONLY03-NEXT:    [[TMP:%.*]] = alloca ptr, align 4
3892 // SIMD-ONLY03-NEXT:    [[_TMP4:%.*]] = alloca ptr, align 4
3893 // SIMD-ONLY03-NEXT:    [[_TMP6:%.*]] = alloca ptr, align 4
3894 // SIMD-ONLY03-NEXT:    [[_TMP8:%.*]] = alloca ptr, align 4
3895 // SIMD-ONLY03-NEXT:    [[_TMP9:%.*]] = alloca ptr, align 4
3896 // SIMD-ONLY03-NEXT:    store ptr [[LR]], ptr [[LR_ADDR]], align 4
3897 // SIMD-ONLY03-NEXT:    store ptr [[TR]], ptr [[TR_ADDR]], align 4
3898 // SIMD-ONLY03-NEXT:    [[TMP0:%.*]] = load ptr, ptr @g, align 4
3899 // SIMD-ONLY03-NEXT:    [[INCDEC_PTR:%.*]] = getelementptr inbounds nuw double, ptr [[TMP0]], i32 1
3900 // SIMD-ONLY03-NEXT:    store ptr [[INCDEC_PTR]], ptr @g, align 4
3901 // SIMD-ONLY03-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[L]], align 4
3902 // SIMD-ONLY03-NEXT:    [[INCDEC_PTR1:%.*]] = getelementptr inbounds nuw float, ptr [[TMP1]], i32 1
3903 // SIMD-ONLY03-NEXT:    store ptr [[INCDEC_PTR1]], ptr [[L]], align 4
3904 // SIMD-ONLY03-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[T]], align 4
3905 // SIMD-ONLY03-NEXT:    [[INCDEC_PTR2:%.*]] = getelementptr inbounds nuw i32, ptr [[TMP2]], i32 1
3906 // SIMD-ONLY03-NEXT:    store ptr [[INCDEC_PTR2]], ptr [[T]], align 4
3907 // SIMD-ONLY03-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[LR_ADDR]], align 4
3908 // SIMD-ONLY03-NEXT:    store ptr [[TMP3]], ptr [[TMP]], align 4
3909 // SIMD-ONLY03-NEXT:    [[TMP4:%.*]] = load ptr, ptr [[LR_ADDR]], align 4
3910 // SIMD-ONLY03-NEXT:    [[TMP5:%.*]] = load ptr, ptr [[TMP]], align 4
3911 // SIMD-ONLY03-NEXT:    [[TMP6:%.*]] = load ptr, ptr [[TMP5]], align 4
3912 // SIMD-ONLY03-NEXT:    [[INCDEC_PTR3:%.*]] = getelementptr inbounds nuw float, ptr [[TMP6]], i32 1
3913 // SIMD-ONLY03-NEXT:    store ptr [[INCDEC_PTR3]], ptr [[TMP5]], align 4
3914 // SIMD-ONLY03-NEXT:    [[TMP7:%.*]] = load ptr, ptr [[TR_ADDR]], align 4
3915 // SIMD-ONLY03-NEXT:    store ptr [[TMP7]], ptr [[_TMP4]], align 4
3916 // SIMD-ONLY03-NEXT:    [[TMP8:%.*]] = load ptr, ptr [[TR_ADDR]], align 4
3917 // SIMD-ONLY03-NEXT:    [[TMP9:%.*]] = load ptr, ptr [[_TMP4]], align 4
3918 // SIMD-ONLY03-NEXT:    [[TMP10:%.*]] = load ptr, ptr [[TMP9]], align 4
3919 // SIMD-ONLY03-NEXT:    [[INCDEC_PTR5:%.*]] = getelementptr inbounds nuw i32, ptr [[TMP10]], i32 1
3920 // SIMD-ONLY03-NEXT:    store ptr [[INCDEC_PTR5]], ptr [[TMP9]], align 4
3921 // SIMD-ONLY03-NEXT:    [[TMP11:%.*]] = load ptr, ptr [[TR_ADDR]], align 4
3922 // SIMD-ONLY03-NEXT:    store ptr [[TMP11]], ptr [[_TMP6]], align 4
3923 // SIMD-ONLY03-NEXT:    [[TMP12:%.*]] = load ptr, ptr [[TR_ADDR]], align 4
3924 // SIMD-ONLY03-NEXT:    [[TMP13:%.*]] = load ptr, ptr [[_TMP6]], align 4
3925 // SIMD-ONLY03-NEXT:    [[TMP14:%.*]] = load ptr, ptr [[TMP13]], align 4
3926 // SIMD-ONLY03-NEXT:    [[INCDEC_PTR7:%.*]] = getelementptr inbounds nuw i32, ptr [[TMP14]], i32 1
3927 // SIMD-ONLY03-NEXT:    store ptr [[INCDEC_PTR7]], ptr [[TMP13]], align 4
3928 // SIMD-ONLY03-NEXT:    [[TMP15:%.*]] = load ptr, ptr [[TR_ADDR]], align 4
3929 // SIMD-ONLY03-NEXT:    store ptr [[TMP15]], ptr [[_TMP8]], align 4
3930 // SIMD-ONLY03-NEXT:    [[TMP16:%.*]] = load ptr, ptr [[LR_ADDR]], align 4
3931 // SIMD-ONLY03-NEXT:    store ptr [[TMP16]], ptr [[_TMP9]], align 4
3932 // SIMD-ONLY03-NEXT:    [[TMP17:%.*]] = load ptr, ptr [[TR_ADDR]], align 4
3933 // SIMD-ONLY03-NEXT:    [[TMP18:%.*]] = load ptr, ptr [[LR_ADDR]], align 4
3934 // SIMD-ONLY03-NEXT:    [[TMP19:%.*]] = load ptr, ptr [[_TMP8]], align 4
3935 // SIMD-ONLY03-NEXT:    [[TMP20:%.*]] = load ptr, ptr [[TMP19]], align 4
3936 // SIMD-ONLY03-NEXT:    [[INCDEC_PTR10:%.*]] = getelementptr inbounds nuw i32, ptr [[TMP20]], i32 1
3937 // SIMD-ONLY03-NEXT:    store ptr [[INCDEC_PTR10]], ptr [[TMP19]], align 4
3938 // SIMD-ONLY03-NEXT:    [[TMP21:%.*]] = load ptr, ptr [[_TMP9]], align 4
3939 // SIMD-ONLY03-NEXT:    [[TMP22:%.*]] = load ptr, ptr [[TMP21]], align 4
3940 // SIMD-ONLY03-NEXT:    [[INCDEC_PTR11:%.*]] = getelementptr inbounds nuw float, ptr [[TMP22]], i32 1
3941 // SIMD-ONLY03-NEXT:    store ptr [[INCDEC_PTR11]], ptr [[TMP21]], align 4
3942 // SIMD-ONLY03-NEXT:    ret void
3943 //
3944 //
3945 // CK20-LABEL: define {{[^@]+}}@_Z3barPd
3946 // CK20-SAME: (ptr noundef [[ARG:%.*]]) #[[ATTR0:[0-9]+]] {
3947 // CK20-NEXT:  entry:
3948 // CK20-NEXT:    [[ARG_ADDR:%.*]] = alloca ptr, align 8
3949 // CK20-NEXT:    [[A:%.*]] = alloca [[STRUCT_ST:%.*]], align 8
3950 // CK20-NEXT:    store ptr [[ARG]], ptr [[ARG_ADDR]], align 8
3951 // CK20-NEXT:    call void @_ZN2STIdEC1ERPd(ptr noundef nonnull align 8 dereferenceable(16) [[A]], ptr noundef nonnull align 8 dereferenceable(8) [[ARG_ADDR]])
3952 // CK20-NEXT:    call void @_ZN2STIdE3fooERPd(ptr noundef nonnull align 8 dereferenceable(16) [[A]], ptr noundef nonnull align 8 dereferenceable(8) [[ARG_ADDR]])
3953 // CK20-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[ARG_ADDR]], align 8
3954 // CK20-NEXT:    [[INCDEC_PTR:%.*]] = getelementptr inbounds nuw double, ptr [[TMP0]], i32 1
3955 // CK20-NEXT:    store ptr [[INCDEC_PTR]], ptr [[ARG_ADDR]], align 8
3956 // CK20-NEXT:    ret void
3957 //
3958 //
3959 // CK20-LABEL: define {{[^@]+}}@_ZN2STIdEC1ERPd
3960 // CK20-SAME: (ptr noundef nonnull align 8 dereferenceable(16) [[THIS:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[B:%.*]]) unnamed_addr #[[ATTR0]] comdat {
3961 // CK20-NEXT:  entry:
3962 // CK20-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 8
3963 // CK20-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 8
3964 // CK20-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 8
3965 // CK20-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 8
3966 // CK20-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8
3967 // CK20-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 8
3968 // CK20-NEXT:    call void @_ZN2STIdEC2ERPd(ptr noundef nonnull align 8 dereferenceable(16) [[THIS1]], ptr noundef nonnull align 8 dereferenceable(8) [[TMP0]])
3969 // CK20-NEXT:    ret void
3970 //
3971 //
3972 // CK20-LABEL: define {{[^@]+}}@_ZN2STIdE3fooERPd
3973 // CK20-SAME: (ptr noundef nonnull align 8 dereferenceable(16) [[THIS:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[ARG:%.*]]) #[[ATTR0]] comdat {
3974 // CK20-NEXT:  entry:
3975 // CK20-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 8
3976 // CK20-NEXT:    [[ARG_ADDR:%.*]] = alloca ptr, align 8
3977 // CK20-NEXT:    [[LA:%.*]] = alloca ptr, align 8
3978 // CK20-NEXT:    [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 8
3979 // CK20-NEXT:    [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 8
3980 // CK20-NEXT:    [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 8
3981 // CK20-NEXT:    [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8
3982 // CK20-NEXT:    [[DOTOFFLOAD_BASEPTRS2:%.*]] = alloca [2 x ptr], align 8
3983 // CK20-NEXT:    [[DOTOFFLOAD_PTRS3:%.*]] = alloca [2 x ptr], align 8
3984 // CK20-NEXT:    [[DOTOFFLOAD_MAPPERS4:%.*]] = alloca [2 x ptr], align 8
3985 // CK20-NEXT:    [[DOTOFFLOAD_SIZES:%.*]] = alloca [2 x i64], align 8
3986 // CK20-NEXT:    [[KERNEL_ARGS5:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
3987 // CK20-NEXT:    [[DOTOFFLOAD_BASEPTRS10:%.*]] = alloca [3 x ptr], align 8
3988 // CK20-NEXT:    [[DOTOFFLOAD_PTRS11:%.*]] = alloca [3 x ptr], align 8
3989 // CK20-NEXT:    [[DOTOFFLOAD_MAPPERS12:%.*]] = alloca [3 x ptr], align 8
3990 // CK20-NEXT:    [[DOTOFFLOAD_SIZES13:%.*]] = alloca [3 x i64], align 8
3991 // CK20-NEXT:    [[KERNEL_ARGS14:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
3992 // CK20-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 8
3993 // CK20-NEXT:    store ptr [[ARG]], ptr [[ARG_ADDR]], align 8
3994 // CK20-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8
3995 // CK20-NEXT:    store ptr null, ptr [[LA]], align 8
3996 // CK20-NEXT:    [[A:%.*]] = getelementptr inbounds nuw [[STRUCT_ST:%.*]], ptr [[THIS1]], i32 0, i32 0
3997 // CK20-NEXT:    [[TMP0:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
3998 // CK20-NEXT:    store ptr [[THIS1]], ptr [[TMP0]], align 8
3999 // CK20-NEXT:    [[TMP1:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0
4000 // CK20-NEXT:    store ptr [[A]], ptr [[TMP1]], align 8
4001 // CK20-NEXT:    [[TMP2:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
4002 // CK20-NEXT:    store ptr null, ptr [[TMP2]], align 8
4003 // CK20-NEXT:    [[TMP3:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
4004 // CK20-NEXT:    [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0
4005 // CK20-NEXT:    [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0
4006 // CK20-NEXT:    store i32 3, ptr [[TMP5]], align 4
4007 // CK20-NEXT:    [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1
4008 // CK20-NEXT:    store i32 1, ptr [[TMP6]], align 4
4009 // CK20-NEXT:    [[TMP7:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2
4010 // CK20-NEXT:    store ptr [[TMP3]], ptr [[TMP7]], align 8
4011 // CK20-NEXT:    [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3
4012 // CK20-NEXT:    store ptr [[TMP4]], ptr [[TMP8]], align 8
4013 // CK20-NEXT:    [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4
4014 // CK20-NEXT:    store ptr @.offload_sizes, ptr [[TMP9]], align 8
4015 // CK20-NEXT:    [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5
4016 // CK20-NEXT:    store ptr @.offload_maptypes, ptr [[TMP10]], align 8
4017 // CK20-NEXT:    [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6
4018 // CK20-NEXT:    store ptr null, ptr [[TMP11]], align 8
4019 // CK20-NEXT:    [[TMP12:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7
4020 // CK20-NEXT:    store ptr null, ptr [[TMP12]], align 8
4021 // CK20-NEXT:    [[TMP13:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8
4022 // CK20-NEXT:    store i64 0, ptr [[TMP13]], align 8
4023 // CK20-NEXT:    [[TMP14:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9
4024 // CK20-NEXT:    store i64 0, ptr [[TMP14]], align 8
4025 // CK20-NEXT:    [[TMP15:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10
4026 // CK20-NEXT:    store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP15]], align 4
4027 // CK20-NEXT:    [[TMP16:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11
4028 // CK20-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP16]], align 4
4029 // CK20-NEXT:    [[TMP17:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12
4030 // CK20-NEXT:    store i32 0, ptr [[TMP17]], align 4
4031 // 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]])
4032 // CK20-NEXT:    [[TMP19:%.*]] = icmp ne i32 [[TMP18]], 0
4033 // CK20-NEXT:    br i1 [[TMP19]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
4034 // CK20:       omp_offload.failed:
4035 // CK20-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l112(ptr [[THIS1]]) #[[ATTR2:[0-9]+]]
4036 // CK20-NEXT:    br label [[OMP_OFFLOAD_CONT]]
4037 // CK20:       omp_offload.cont:
4038 // CK20-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ST]], ptr [[THIS1]], i32 0, i32 1
4039 // CK20-NEXT:    [[TMP20:%.*]] = load ptr, ptr [[B]], align 8
4040 // CK20-NEXT:    [[TMP21:%.*]] = getelementptr ptr, ptr [[B]], i32 1
4041 // CK20-NEXT:    [[TMP22:%.*]] = ptrtoint ptr [[TMP21]] to i64
4042 // CK20-NEXT:    [[TMP23:%.*]] = ptrtoint ptr [[B]] to i64
4043 // CK20-NEXT:    [[TMP24:%.*]] = sub i64 [[TMP22]], [[TMP23]]
4044 // CK20-NEXT:    [[TMP25:%.*]] = sdiv exact i64 [[TMP24]], ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)
4045 // CK20-NEXT:    call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[DOTOFFLOAD_SIZES]], ptr align 8 @.offload_sizes.1, i64 16, i1 false)
4046 // CK20-NEXT:    [[TMP26:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS2]], i32 0, i32 0
4047 // CK20-NEXT:    store ptr [[THIS1]], ptr [[TMP26]], align 8
4048 // CK20-NEXT:    [[TMP27:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS3]], i32 0, i32 0
4049 // CK20-NEXT:    store ptr [[B]], ptr [[TMP27]], align 8
4050 // CK20-NEXT:    [[TMP28:%.*]] = getelementptr inbounds [2 x i64], ptr [[DOTOFFLOAD_SIZES]], i32 0, i32 0
4051 // CK20-NEXT:    store i64 [[TMP25]], ptr [[TMP28]], align 8
4052 // CK20-NEXT:    [[TMP29:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_MAPPERS4]], i64 0, i64 0
4053 // CK20-NEXT:    store ptr null, ptr [[TMP29]], align 8
4054 // CK20-NEXT:    [[TMP30:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS2]], i32 0, i32 1
4055 // CK20-NEXT:    store ptr [[THIS1]], ptr [[TMP30]], align 8
4056 // CK20-NEXT:    [[TMP31:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS3]], i32 0, i32 1
4057 // CK20-NEXT:    store ptr [[TMP20]], ptr [[TMP31]], align 8
4058 // CK20-NEXT:    [[TMP32:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_MAPPERS4]], i64 0, i64 1
4059 // CK20-NEXT:    store ptr null, ptr [[TMP32]], align 8
4060 // CK20-NEXT:    [[TMP33:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS2]], i32 0, i32 0
4061 // CK20-NEXT:    [[TMP34:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS3]], i32 0, i32 0
4062 // CK20-NEXT:    [[TMP35:%.*]] = getelementptr inbounds [2 x i64], ptr [[DOTOFFLOAD_SIZES]], i32 0, i32 0
4063 // CK20-NEXT:    [[TMP36:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 0
4064 // CK20-NEXT:    store i32 3, ptr [[TMP36]], align 4
4065 // CK20-NEXT:    [[TMP37:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 1
4066 // CK20-NEXT:    store i32 2, ptr [[TMP37]], align 4
4067 // CK20-NEXT:    [[TMP38:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 2
4068 // CK20-NEXT:    store ptr [[TMP33]], ptr [[TMP38]], align 8
4069 // CK20-NEXT:    [[TMP39:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 3
4070 // CK20-NEXT:    store ptr [[TMP34]], ptr [[TMP39]], align 8
4071 // CK20-NEXT:    [[TMP40:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 4
4072 // CK20-NEXT:    store ptr [[TMP35]], ptr [[TMP40]], align 8
4073 // CK20-NEXT:    [[TMP41:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 5
4074 // CK20-NEXT:    store ptr @.offload_maptypes.2, ptr [[TMP41]], align 8
4075 // CK20-NEXT:    [[TMP42:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 6
4076 // CK20-NEXT:    store ptr null, ptr [[TMP42]], align 8
4077 // CK20-NEXT:    [[TMP43:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 7
4078 // CK20-NEXT:    store ptr null, ptr [[TMP43]], align 8
4079 // CK20-NEXT:    [[TMP44:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 8
4080 // CK20-NEXT:    store i64 0, ptr [[TMP44]], align 8
4081 // CK20-NEXT:    [[TMP45:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 9
4082 // CK20-NEXT:    store i64 0, ptr [[TMP45]], align 8
4083 // CK20-NEXT:    [[TMP46:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 10
4084 // CK20-NEXT:    store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP46]], align 4
4085 // CK20-NEXT:    [[TMP47:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 11
4086 // CK20-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP47]], align 4
4087 // CK20-NEXT:    [[TMP48:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 12
4088 // CK20-NEXT:    store i32 0, ptr [[TMP48]], align 4
4089 // 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]])
4090 // CK20-NEXT:    [[TMP50:%.*]] = icmp ne i32 [[TMP49]], 0
4091 // CK20-NEXT:    br i1 [[TMP50]], label [[OMP_OFFLOAD_FAILED6:%.*]], label [[OMP_OFFLOAD_CONT7:%.*]]
4092 // CK20:       omp_offload.failed6:
4093 // CK20-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l118(ptr [[THIS1]]) #[[ATTR2]]
4094 // CK20-NEXT:    br label [[OMP_OFFLOAD_CONT7]]
4095 // CK20:       omp_offload.cont7:
4096 // CK20-NEXT:    [[A8:%.*]] = getelementptr inbounds nuw [[STRUCT_ST]], ptr [[THIS1]], i32 0, i32 0
4097 // CK20-NEXT:    [[B9:%.*]] = getelementptr inbounds nuw [[STRUCT_ST]], ptr [[THIS1]], i32 0, i32 1
4098 // CK20-NEXT:    [[TMP51:%.*]] = load ptr, ptr [[B9]], align 8
4099 // CK20-NEXT:    [[TMP52:%.*]] = getelementptr ptr, ptr [[B9]], i32 1
4100 // CK20-NEXT:    [[TMP53:%.*]] = ptrtoint ptr [[TMP52]] to i64
4101 // CK20-NEXT:    [[TMP54:%.*]] = ptrtoint ptr [[A8]] to i64
4102 // CK20-NEXT:    [[TMP55:%.*]] = sub i64 [[TMP53]], [[TMP54]]
4103 // CK20-NEXT:    [[TMP56:%.*]] = sdiv exact i64 [[TMP55]], ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)
4104 // CK20-NEXT:    call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[DOTOFFLOAD_SIZES13]], ptr align 8 @.offload_sizes.3, i64 24, i1 false)
4105 // CK20-NEXT:    [[TMP57:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS10]], i32 0, i32 0
4106 // CK20-NEXT:    store ptr [[THIS1]], ptr [[TMP57]], align 8
4107 // CK20-NEXT:    [[TMP58:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS11]], i32 0, i32 0
4108 // CK20-NEXT:    store ptr [[A8]], ptr [[TMP58]], align 8
4109 // CK20-NEXT:    [[TMP59:%.*]] = getelementptr inbounds [3 x i64], ptr [[DOTOFFLOAD_SIZES13]], i32 0, i32 0
4110 // CK20-NEXT:    store i64 [[TMP56]], ptr [[TMP59]], align 8
4111 // CK20-NEXT:    [[TMP60:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS12]], i64 0, i64 0
4112 // CK20-NEXT:    store ptr null, ptr [[TMP60]], align 8
4113 // CK20-NEXT:    [[TMP61:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS10]], i32 0, i32 1
4114 // CK20-NEXT:    store ptr [[THIS1]], ptr [[TMP61]], align 8
4115 // CK20-NEXT:    [[TMP62:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS11]], i32 0, i32 1
4116 // CK20-NEXT:    store ptr [[A8]], ptr [[TMP62]], align 8
4117 // CK20-NEXT:    [[TMP63:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS12]], i64 0, i64 1
4118 // CK20-NEXT:    store ptr null, ptr [[TMP63]], align 8
4119 // CK20-NEXT:    [[TMP64:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS10]], i32 0, i32 2
4120 // CK20-NEXT:    store ptr [[THIS1]], ptr [[TMP64]], align 8
4121 // CK20-NEXT:    [[TMP65:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS11]], i32 0, i32 2
4122 // CK20-NEXT:    store ptr [[TMP51]], ptr [[TMP65]], align 8
4123 // CK20-NEXT:    [[TMP66:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS12]], i64 0, i64 2
4124 // CK20-NEXT:    store ptr null, ptr [[TMP66]], align 8
4125 // CK20-NEXT:    [[TMP67:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS10]], i32 0, i32 0
4126 // CK20-NEXT:    [[TMP68:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS11]], i32 0, i32 0
4127 // CK20-NEXT:    [[TMP69:%.*]] = getelementptr inbounds [3 x i64], ptr [[DOTOFFLOAD_SIZES13]], i32 0, i32 0
4128 // CK20-NEXT:    [[TMP70:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 0
4129 // CK20-NEXT:    store i32 3, ptr [[TMP70]], align 4
4130 // CK20-NEXT:    [[TMP71:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 1
4131 // CK20-NEXT:    store i32 3, ptr [[TMP71]], align 4
4132 // CK20-NEXT:    [[TMP72:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 2
4133 // CK20-NEXT:    store ptr [[TMP67]], ptr [[TMP72]], align 8
4134 // CK20-NEXT:    [[TMP73:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 3
4135 // CK20-NEXT:    store ptr [[TMP68]], ptr [[TMP73]], align 8
4136 // CK20-NEXT:    [[TMP74:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 4
4137 // CK20-NEXT:    store ptr [[TMP69]], ptr [[TMP74]], align 8
4138 // CK20-NEXT:    [[TMP75:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 5
4139 // CK20-NEXT:    store ptr @.offload_maptypes.4, ptr [[TMP75]], align 8
4140 // CK20-NEXT:    [[TMP76:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 6
4141 // CK20-NEXT:    store ptr null, ptr [[TMP76]], align 8
4142 // CK20-NEXT:    [[TMP77:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 7
4143 // CK20-NEXT:    store ptr null, ptr [[TMP77]], align 8
4144 // CK20-NEXT:    [[TMP78:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 8
4145 // CK20-NEXT:    store i64 0, ptr [[TMP78]], align 8
4146 // CK20-NEXT:    [[TMP79:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 9
4147 // CK20-NEXT:    store i64 0, ptr [[TMP79]], align 8
4148 // CK20-NEXT:    [[TMP80:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 10
4149 // CK20-NEXT:    store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP80]], align 4
4150 // CK20-NEXT:    [[TMP81:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 11
4151 // CK20-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP81]], align 4
4152 // CK20-NEXT:    [[TMP82:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 12
4153 // CK20-NEXT:    store i32 0, ptr [[TMP82]], align 4
4154 // 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]])
4155 // CK20-NEXT:    [[TMP84:%.*]] = icmp ne i32 [[TMP83]], 0
4156 // CK20-NEXT:    br i1 [[TMP84]], label [[OMP_OFFLOAD_FAILED15:%.*]], label [[OMP_OFFLOAD_CONT16:%.*]]
4157 // CK20:       omp_offload.failed15:
4158 // CK20-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l125(ptr [[THIS1]]) #[[ATTR2]]
4159 // CK20-NEXT:    br label [[OMP_OFFLOAD_CONT16]]
4160 // CK20:       omp_offload.cont16:
4161 // CK20-NEXT:    ret void
4162 //
4163 //
4164 // CK20-LABEL: define {{[^@]+}}@_ZN2STIdEC2ERPd
4165 // CK20-SAME: (ptr noundef nonnull align 8 dereferenceable(16) [[THIS:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[B:%.*]]) unnamed_addr #[[ATTR0]] comdat {
4166 // CK20-NEXT:  entry:
4167 // CK20-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 8
4168 // CK20-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 8
4169 // CK20-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 8
4170 // CK20-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 8
4171 // CK20-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8
4172 // CK20-NEXT:    [[A:%.*]] = getelementptr inbounds nuw [[STRUCT_ST:%.*]], ptr [[THIS1]], i32 0, i32 0
4173 // CK20-NEXT:    store ptr null, ptr [[A]], align 8
4174 // CK20-NEXT:    [[B2:%.*]] = getelementptr inbounds nuw [[STRUCT_ST]], ptr [[THIS1]], i32 0, i32 1
4175 // CK20-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 8
4176 // CK20-NEXT:    store ptr [[TMP0]], ptr [[B2]], align 8
4177 // CK20-NEXT:    ret void
4178 //
4179 //
4180 // CK20-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l112
4181 // CK20-SAME: (ptr noundef [[THIS:%.*]]) #[[ATTR1:[0-9]+]] {
4182 // CK20-NEXT:  entry:
4183 // CK20-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 8
4184 // CK20-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 8
4185 // CK20-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8
4186 // CK20-NEXT:    [[A:%.*]] = getelementptr inbounds nuw [[STRUCT_ST:%.*]], ptr [[TMP0]], i32 0, i32 0
4187 // CK20-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A]], align 8
4188 // CK20-NEXT:    [[INCDEC_PTR:%.*]] = getelementptr inbounds nuw double, ptr [[TMP1]], i32 1
4189 // CK20-NEXT:    store ptr [[INCDEC_PTR]], ptr [[A]], align 8
4190 // CK20-NEXT:    ret void
4191 //
4192 //
4193 // CK20-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l118
4194 // CK20-SAME: (ptr noundef [[THIS:%.*]]) #[[ATTR1]] {
4195 // CK20-NEXT:  entry:
4196 // CK20-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 8
4197 // CK20-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 8
4198 // CK20-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8
4199 // CK20-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ST:%.*]], ptr [[TMP0]], i32 0, i32 1
4200 // CK20-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[B]], align 8
4201 // CK20-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[TMP1]], align 8
4202 // CK20-NEXT:    [[INCDEC_PTR:%.*]] = getelementptr inbounds nuw double, ptr [[TMP2]], i32 1
4203 // CK20-NEXT:    store ptr [[INCDEC_PTR]], ptr [[TMP1]], align 8
4204 // CK20-NEXT:    ret void
4205 //
4206 //
4207 // CK20-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l125
4208 // CK20-SAME: (ptr noundef [[THIS:%.*]]) #[[ATTR1]] {
4209 // CK20-NEXT:  entry:
4210 // CK20-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 8
4211 // CK20-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 8
4212 // CK20-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8
4213 // CK20-NEXT:    [[A:%.*]] = getelementptr inbounds nuw [[STRUCT_ST:%.*]], ptr [[TMP0]], i32 0, i32 0
4214 // CK20-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A]], align 8
4215 // CK20-NEXT:    [[INCDEC_PTR:%.*]] = getelementptr inbounds nuw double, ptr [[TMP1]], i32 1
4216 // CK20-NEXT:    store ptr [[INCDEC_PTR]], ptr [[A]], align 8
4217 // CK20-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ST]], ptr [[TMP0]], i32 0, i32 1
4218 // CK20-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B]], align 8
4219 // CK20-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[TMP2]], align 8
4220 // CK20-NEXT:    [[INCDEC_PTR1:%.*]] = getelementptr inbounds nuw double, ptr [[TMP3]], i32 1
4221 // CK20-NEXT:    store ptr [[INCDEC_PTR1]], ptr [[TMP2]], align 8
4222 // CK20-NEXT:    ret void
4223 //
4224 //
4225 // CK21-LABEL: define {{[^@]+}}@_Z3barPd
4226 // CK21-SAME: (ptr noundef [[ARG:%.*]]) #[[ATTR0:[0-9]+]] {
4227 // CK21-NEXT:  entry:
4228 // CK21-NEXT:    [[ARG_ADDR:%.*]] = alloca ptr, align 8
4229 // CK21-NEXT:    [[A:%.*]] = alloca [[STRUCT_ST:%.*]], align 8
4230 // CK21-NEXT:    store ptr [[ARG]], ptr [[ARG_ADDR]], align 8
4231 // CK21-NEXT:    call void @_ZN2STIdEC1ERPd(ptr noundef nonnull align 8 dereferenceable(16) [[A]], ptr noundef nonnull align 8 dereferenceable(8) [[ARG_ADDR]])
4232 // CK21-NEXT:    call void @_ZN2STIdE3fooERPd(ptr noundef nonnull align 8 dereferenceable(16) [[A]], ptr noundef nonnull align 8 dereferenceable(8) [[ARG_ADDR]])
4233 // CK21-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[ARG_ADDR]], align 8
4234 // CK21-NEXT:    [[INCDEC_PTR:%.*]] = getelementptr inbounds nuw double, ptr [[TMP0]], i32 1
4235 // CK21-NEXT:    store ptr [[INCDEC_PTR]], ptr [[ARG_ADDR]], align 8
4236 // CK21-NEXT:    ret void
4237 //
4238 //
4239 // CK21-LABEL: define {{[^@]+}}@_ZN2STIdEC1ERPd
4240 // CK21-SAME: (ptr noundef nonnull align 8 dereferenceable(16) [[THIS:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[B:%.*]]) unnamed_addr #[[ATTR0]] comdat {
4241 // CK21-NEXT:  entry:
4242 // CK21-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 8
4243 // CK21-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 8
4244 // CK21-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 8
4245 // CK21-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 8
4246 // CK21-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8
4247 // CK21-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 8
4248 // CK21-NEXT:    call void @_ZN2STIdEC2ERPd(ptr noundef nonnull align 8 dereferenceable(16) [[THIS1]], ptr noundef nonnull align 8 dereferenceable(8) [[TMP0]])
4249 // CK21-NEXT:    ret void
4250 //
4251 //
4252 // CK21-LABEL: define {{[^@]+}}@_ZN2STIdE3fooERPd
4253 // CK21-SAME: (ptr noundef nonnull align 8 dereferenceable(16) [[THIS:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[ARG:%.*]]) #[[ATTR0]] comdat {
4254 // CK21-NEXT:  entry:
4255 // CK21-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 8
4256 // CK21-NEXT:    [[ARG_ADDR:%.*]] = alloca ptr, align 8
4257 // CK21-NEXT:    [[LA:%.*]] = alloca ptr, align 8
4258 // CK21-NEXT:    [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 8
4259 // CK21-NEXT:    [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 8
4260 // CK21-NEXT:    [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 8
4261 // CK21-NEXT:    [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8
4262 // CK21-NEXT:    [[DOTOFFLOAD_BASEPTRS2:%.*]] = alloca [2 x ptr], align 8
4263 // CK21-NEXT:    [[DOTOFFLOAD_PTRS3:%.*]] = alloca [2 x ptr], align 8
4264 // CK21-NEXT:    [[DOTOFFLOAD_MAPPERS4:%.*]] = alloca [2 x ptr], align 8
4265 // CK21-NEXT:    [[DOTOFFLOAD_SIZES:%.*]] = alloca [2 x i64], align 8
4266 // CK21-NEXT:    [[KERNEL_ARGS5:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
4267 // CK21-NEXT:    [[DOTOFFLOAD_BASEPTRS10:%.*]] = alloca [3 x ptr], align 8
4268 // CK21-NEXT:    [[DOTOFFLOAD_PTRS11:%.*]] = alloca [3 x ptr], align 8
4269 // CK21-NEXT:    [[DOTOFFLOAD_MAPPERS12:%.*]] = alloca [3 x ptr], align 8
4270 // CK21-NEXT:    [[DOTOFFLOAD_SIZES13:%.*]] = alloca [3 x i64], align 8
4271 // CK21-NEXT:    [[KERNEL_ARGS14:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
4272 // CK21-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 8
4273 // CK21-NEXT:    store ptr [[ARG]], ptr [[ARG_ADDR]], align 8
4274 // CK21-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8
4275 // CK21-NEXT:    store ptr null, ptr [[LA]], align 8
4276 // CK21-NEXT:    [[A:%.*]] = getelementptr inbounds nuw [[STRUCT_ST:%.*]], ptr [[THIS1]], i32 0, i32 0
4277 // CK21-NEXT:    [[TMP0:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
4278 // CK21-NEXT:    store ptr [[THIS1]], ptr [[TMP0]], align 8
4279 // CK21-NEXT:    [[TMP1:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0
4280 // CK21-NEXT:    store ptr [[A]], ptr [[TMP1]], align 8
4281 // CK21-NEXT:    [[TMP2:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
4282 // CK21-NEXT:    store ptr null, ptr [[TMP2]], align 8
4283 // CK21-NEXT:    [[TMP3:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
4284 // CK21-NEXT:    [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0
4285 // CK21-NEXT:    [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0
4286 // CK21-NEXT:    store i32 3, ptr [[TMP5]], align 4
4287 // CK21-NEXT:    [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1
4288 // CK21-NEXT:    store i32 1, ptr [[TMP6]], align 4
4289 // CK21-NEXT:    [[TMP7:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2
4290 // CK21-NEXT:    store ptr [[TMP3]], ptr [[TMP7]], align 8
4291 // CK21-NEXT:    [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3
4292 // CK21-NEXT:    store ptr [[TMP4]], ptr [[TMP8]], align 8
4293 // CK21-NEXT:    [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4
4294 // CK21-NEXT:    store ptr @.offload_sizes, ptr [[TMP9]], align 8
4295 // CK21-NEXT:    [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5
4296 // CK21-NEXT:    store ptr @.offload_maptypes, ptr [[TMP10]], align 8
4297 // CK21-NEXT:    [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6
4298 // CK21-NEXT:    store ptr null, ptr [[TMP11]], align 8
4299 // CK21-NEXT:    [[TMP12:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7
4300 // CK21-NEXT:    store ptr null, ptr [[TMP12]], align 8
4301 // CK21-NEXT:    [[TMP13:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8
4302 // CK21-NEXT:    store i64 0, ptr [[TMP13]], align 8
4303 // CK21-NEXT:    [[TMP14:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9
4304 // CK21-NEXT:    store i64 0, ptr [[TMP14]], align 8
4305 // CK21-NEXT:    [[TMP15:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10
4306 // CK21-NEXT:    store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP15]], align 4
4307 // CK21-NEXT:    [[TMP16:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11
4308 // CK21-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP16]], align 4
4309 // CK21-NEXT:    [[TMP17:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12
4310 // CK21-NEXT:    store i32 0, ptr [[TMP17]], align 4
4311 // 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]])
4312 // CK21-NEXT:    [[TMP19:%.*]] = icmp ne i32 [[TMP18]], 0
4313 // CK21-NEXT:    br i1 [[TMP19]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
4314 // CK21:       omp_offload.failed:
4315 // CK21-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l112(ptr [[THIS1]]) #[[ATTR2:[0-9]+]]
4316 // CK21-NEXT:    br label [[OMP_OFFLOAD_CONT]]
4317 // CK21:       omp_offload.cont:
4318 // CK21-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ST]], ptr [[THIS1]], i32 0, i32 1
4319 // CK21-NEXT:    [[TMP20:%.*]] = load ptr, ptr [[B]], align 8
4320 // CK21-NEXT:    [[TMP21:%.*]] = getelementptr ptr, ptr [[B]], i32 1
4321 // CK21-NEXT:    [[TMP22:%.*]] = ptrtoint ptr [[TMP21]] to i64
4322 // CK21-NEXT:    [[TMP23:%.*]] = ptrtoint ptr [[B]] to i64
4323 // CK21-NEXT:    [[TMP24:%.*]] = sub i64 [[TMP22]], [[TMP23]]
4324 // CK21-NEXT:    [[TMP25:%.*]] = sdiv exact i64 [[TMP24]], ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)
4325 // CK21-NEXT:    call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[DOTOFFLOAD_SIZES]], ptr align 8 @.offload_sizes.1, i64 16, i1 false)
4326 // CK21-NEXT:    [[TMP26:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS2]], i32 0, i32 0
4327 // CK21-NEXT:    store ptr [[THIS1]], ptr [[TMP26]], align 8
4328 // CK21-NEXT:    [[TMP27:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS3]], i32 0, i32 0
4329 // CK21-NEXT:    store ptr [[B]], ptr [[TMP27]], align 8
4330 // CK21-NEXT:    [[TMP28:%.*]] = getelementptr inbounds [2 x i64], ptr [[DOTOFFLOAD_SIZES]], i32 0, i32 0
4331 // CK21-NEXT:    store i64 [[TMP25]], ptr [[TMP28]], align 8
4332 // CK21-NEXT:    [[TMP29:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_MAPPERS4]], i64 0, i64 0
4333 // CK21-NEXT:    store ptr null, ptr [[TMP29]], align 8
4334 // CK21-NEXT:    [[TMP30:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS2]], i32 0, i32 1
4335 // CK21-NEXT:    store ptr [[THIS1]], ptr [[TMP30]], align 8
4336 // CK21-NEXT:    [[TMP31:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS3]], i32 0, i32 1
4337 // CK21-NEXT:    store ptr [[TMP20]], ptr [[TMP31]], align 8
4338 // CK21-NEXT:    [[TMP32:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_MAPPERS4]], i64 0, i64 1
4339 // CK21-NEXT:    store ptr null, ptr [[TMP32]], align 8
4340 // CK21-NEXT:    [[TMP33:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS2]], i32 0, i32 0
4341 // CK21-NEXT:    [[TMP34:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS3]], i32 0, i32 0
4342 // CK21-NEXT:    [[TMP35:%.*]] = getelementptr inbounds [2 x i64], ptr [[DOTOFFLOAD_SIZES]], i32 0, i32 0
4343 // CK21-NEXT:    [[TMP36:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 0
4344 // CK21-NEXT:    store i32 3, ptr [[TMP36]], align 4
4345 // CK21-NEXT:    [[TMP37:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 1
4346 // CK21-NEXT:    store i32 2, ptr [[TMP37]], align 4
4347 // CK21-NEXT:    [[TMP38:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 2
4348 // CK21-NEXT:    store ptr [[TMP33]], ptr [[TMP38]], align 8
4349 // CK21-NEXT:    [[TMP39:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 3
4350 // CK21-NEXT:    store ptr [[TMP34]], ptr [[TMP39]], align 8
4351 // CK21-NEXT:    [[TMP40:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 4
4352 // CK21-NEXT:    store ptr [[TMP35]], ptr [[TMP40]], align 8
4353 // CK21-NEXT:    [[TMP41:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 5
4354 // CK21-NEXT:    store ptr @.offload_maptypes.2, ptr [[TMP41]], align 8
4355 // CK21-NEXT:    [[TMP42:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 6
4356 // CK21-NEXT:    store ptr null, ptr [[TMP42]], align 8
4357 // CK21-NEXT:    [[TMP43:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 7
4358 // CK21-NEXT:    store ptr null, ptr [[TMP43]], align 8
4359 // CK21-NEXT:    [[TMP44:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 8
4360 // CK21-NEXT:    store i64 0, ptr [[TMP44]], align 8
4361 // CK21-NEXT:    [[TMP45:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 9
4362 // CK21-NEXT:    store i64 0, ptr [[TMP45]], align 8
4363 // CK21-NEXT:    [[TMP46:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 10
4364 // CK21-NEXT:    store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP46]], align 4
4365 // CK21-NEXT:    [[TMP47:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 11
4366 // CK21-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP47]], align 4
4367 // CK21-NEXT:    [[TMP48:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 12
4368 // CK21-NEXT:    store i32 0, ptr [[TMP48]], align 4
4369 // 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]])
4370 // CK21-NEXT:    [[TMP50:%.*]] = icmp ne i32 [[TMP49]], 0
4371 // CK21-NEXT:    br i1 [[TMP50]], label [[OMP_OFFLOAD_FAILED6:%.*]], label [[OMP_OFFLOAD_CONT7:%.*]]
4372 // CK21:       omp_offload.failed6:
4373 // CK21-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l118(ptr [[THIS1]]) #[[ATTR2]]
4374 // CK21-NEXT:    br label [[OMP_OFFLOAD_CONT7]]
4375 // CK21:       omp_offload.cont7:
4376 // CK21-NEXT:    [[A8:%.*]] = getelementptr inbounds nuw [[STRUCT_ST]], ptr [[THIS1]], i32 0, i32 0
4377 // CK21-NEXT:    [[B9:%.*]] = getelementptr inbounds nuw [[STRUCT_ST]], ptr [[THIS1]], i32 0, i32 1
4378 // CK21-NEXT:    [[TMP51:%.*]] = load ptr, ptr [[B9]], align 8
4379 // CK21-NEXT:    [[TMP52:%.*]] = getelementptr ptr, ptr [[B9]], i32 1
4380 // CK21-NEXT:    [[TMP53:%.*]] = ptrtoint ptr [[TMP52]] to i64
4381 // CK21-NEXT:    [[TMP54:%.*]] = ptrtoint ptr [[A8]] to i64
4382 // CK21-NEXT:    [[TMP55:%.*]] = sub i64 [[TMP53]], [[TMP54]]
4383 // CK21-NEXT:    [[TMP56:%.*]] = sdiv exact i64 [[TMP55]], ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)
4384 // CK21-NEXT:    call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[DOTOFFLOAD_SIZES13]], ptr align 8 @.offload_sizes.3, i64 24, i1 false)
4385 // CK21-NEXT:    [[TMP57:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS10]], i32 0, i32 0
4386 // CK21-NEXT:    store ptr [[THIS1]], ptr [[TMP57]], align 8
4387 // CK21-NEXT:    [[TMP58:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS11]], i32 0, i32 0
4388 // CK21-NEXT:    store ptr [[A8]], ptr [[TMP58]], align 8
4389 // CK21-NEXT:    [[TMP59:%.*]] = getelementptr inbounds [3 x i64], ptr [[DOTOFFLOAD_SIZES13]], i32 0, i32 0
4390 // CK21-NEXT:    store i64 [[TMP56]], ptr [[TMP59]], align 8
4391 // CK21-NEXT:    [[TMP60:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS12]], i64 0, i64 0
4392 // CK21-NEXT:    store ptr null, ptr [[TMP60]], align 8
4393 // CK21-NEXT:    [[TMP61:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS10]], i32 0, i32 1
4394 // CK21-NEXT:    store ptr [[THIS1]], ptr [[TMP61]], align 8
4395 // CK21-NEXT:    [[TMP62:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS11]], i32 0, i32 1
4396 // CK21-NEXT:    store ptr [[A8]], ptr [[TMP62]], align 8
4397 // CK21-NEXT:    [[TMP63:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS12]], i64 0, i64 1
4398 // CK21-NEXT:    store ptr null, ptr [[TMP63]], align 8
4399 // CK21-NEXT:    [[TMP64:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS10]], i32 0, i32 2
4400 // CK21-NEXT:    store ptr [[THIS1]], ptr [[TMP64]], align 8
4401 // CK21-NEXT:    [[TMP65:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS11]], i32 0, i32 2
4402 // CK21-NEXT:    store ptr [[TMP51]], ptr [[TMP65]], align 8
4403 // CK21-NEXT:    [[TMP66:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS12]], i64 0, i64 2
4404 // CK21-NEXT:    store ptr null, ptr [[TMP66]], align 8
4405 // CK21-NEXT:    [[TMP67:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS10]], i32 0, i32 0
4406 // CK21-NEXT:    [[TMP68:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS11]], i32 0, i32 0
4407 // CK21-NEXT:    [[TMP69:%.*]] = getelementptr inbounds [3 x i64], ptr [[DOTOFFLOAD_SIZES13]], i32 0, i32 0
4408 // CK21-NEXT:    [[TMP70:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 0
4409 // CK21-NEXT:    store i32 3, ptr [[TMP70]], align 4
4410 // CK21-NEXT:    [[TMP71:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 1
4411 // CK21-NEXT:    store i32 3, ptr [[TMP71]], align 4
4412 // CK21-NEXT:    [[TMP72:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 2
4413 // CK21-NEXT:    store ptr [[TMP67]], ptr [[TMP72]], align 8
4414 // CK21-NEXT:    [[TMP73:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 3
4415 // CK21-NEXT:    store ptr [[TMP68]], ptr [[TMP73]], align 8
4416 // CK21-NEXT:    [[TMP74:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 4
4417 // CK21-NEXT:    store ptr [[TMP69]], ptr [[TMP74]], align 8
4418 // CK21-NEXT:    [[TMP75:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 5
4419 // CK21-NEXT:    store ptr @.offload_maptypes.4, ptr [[TMP75]], align 8
4420 // CK21-NEXT:    [[TMP76:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 6
4421 // CK21-NEXT:    store ptr null, ptr [[TMP76]], align 8
4422 // CK21-NEXT:    [[TMP77:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 7
4423 // CK21-NEXT:    store ptr null, ptr [[TMP77]], align 8
4424 // CK21-NEXT:    [[TMP78:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 8
4425 // CK21-NEXT:    store i64 0, ptr [[TMP78]], align 8
4426 // CK21-NEXT:    [[TMP79:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 9
4427 // CK21-NEXT:    store i64 0, ptr [[TMP79]], align 8
4428 // CK21-NEXT:    [[TMP80:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 10
4429 // CK21-NEXT:    store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP80]], align 4
4430 // CK21-NEXT:    [[TMP81:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 11
4431 // CK21-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP81]], align 4
4432 // CK21-NEXT:    [[TMP82:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 12
4433 // CK21-NEXT:    store i32 0, ptr [[TMP82]], align 4
4434 // 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]])
4435 // CK21-NEXT:    [[TMP84:%.*]] = icmp ne i32 [[TMP83]], 0
4436 // CK21-NEXT:    br i1 [[TMP84]], label [[OMP_OFFLOAD_FAILED15:%.*]], label [[OMP_OFFLOAD_CONT16:%.*]]
4437 // CK21:       omp_offload.failed15:
4438 // CK21-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l125(ptr [[THIS1]]) #[[ATTR2]]
4439 // CK21-NEXT:    br label [[OMP_OFFLOAD_CONT16]]
4440 // CK21:       omp_offload.cont16:
4441 // CK21-NEXT:    ret void
4442 //
4443 //
4444 // CK21-LABEL: define {{[^@]+}}@_ZN2STIdEC2ERPd
4445 // CK21-SAME: (ptr noundef nonnull align 8 dereferenceable(16) [[THIS:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[B:%.*]]) unnamed_addr #[[ATTR0]] comdat {
4446 // CK21-NEXT:  entry:
4447 // CK21-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 8
4448 // CK21-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 8
4449 // CK21-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 8
4450 // CK21-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 8
4451 // CK21-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8
4452 // CK21-NEXT:    [[A:%.*]] = getelementptr inbounds nuw [[STRUCT_ST:%.*]], ptr [[THIS1]], i32 0, i32 0
4453 // CK21-NEXT:    store ptr null, ptr [[A]], align 8
4454 // CK21-NEXT:    [[B2:%.*]] = getelementptr inbounds nuw [[STRUCT_ST]], ptr [[THIS1]], i32 0, i32 1
4455 // CK21-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 8
4456 // CK21-NEXT:    store ptr [[TMP0]], ptr [[B2]], align 8
4457 // CK21-NEXT:    ret void
4458 //
4459 //
4460 // CK21-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l112
4461 // CK21-SAME: (ptr noundef [[THIS:%.*]]) #[[ATTR1:[0-9]+]] {
4462 // CK21-NEXT:  entry:
4463 // CK21-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 8
4464 // CK21-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 8
4465 // CK21-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8
4466 // CK21-NEXT:    [[A:%.*]] = getelementptr inbounds nuw [[STRUCT_ST:%.*]], ptr [[TMP0]], i32 0, i32 0
4467 // CK21-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A]], align 8
4468 // CK21-NEXT:    [[INCDEC_PTR:%.*]] = getelementptr inbounds nuw double, ptr [[TMP1]], i32 1
4469 // CK21-NEXT:    store ptr [[INCDEC_PTR]], ptr [[A]], align 8
4470 // CK21-NEXT:    ret void
4471 //
4472 //
4473 // CK21-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l118
4474 // CK21-SAME: (ptr noundef [[THIS:%.*]]) #[[ATTR1]] {
4475 // CK21-NEXT:  entry:
4476 // CK21-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 8
4477 // CK21-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 8
4478 // CK21-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8
4479 // CK21-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ST:%.*]], ptr [[TMP0]], i32 0, i32 1
4480 // CK21-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[B]], align 8
4481 // CK21-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[TMP1]], align 8
4482 // CK21-NEXT:    [[INCDEC_PTR:%.*]] = getelementptr inbounds nuw double, ptr [[TMP2]], i32 1
4483 // CK21-NEXT:    store ptr [[INCDEC_PTR]], ptr [[TMP1]], align 8
4484 // CK21-NEXT:    ret void
4485 //
4486 //
4487 // CK21-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l125
4488 // CK21-SAME: (ptr noundef [[THIS:%.*]]) #[[ATTR1]] {
4489 // CK21-NEXT:  entry:
4490 // CK21-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 8
4491 // CK21-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 8
4492 // CK21-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8
4493 // CK21-NEXT:    [[A:%.*]] = getelementptr inbounds nuw [[STRUCT_ST:%.*]], ptr [[TMP0]], i32 0, i32 0
4494 // CK21-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A]], align 8
4495 // CK21-NEXT:    [[INCDEC_PTR:%.*]] = getelementptr inbounds nuw double, ptr [[TMP1]], i32 1
4496 // CK21-NEXT:    store ptr [[INCDEC_PTR]], ptr [[A]], align 8
4497 // CK21-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ST]], ptr [[TMP0]], i32 0, i32 1
4498 // CK21-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B]], align 8
4499 // CK21-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[TMP2]], align 8
4500 // CK21-NEXT:    [[INCDEC_PTR1:%.*]] = getelementptr inbounds nuw double, ptr [[TMP3]], i32 1
4501 // CK21-NEXT:    store ptr [[INCDEC_PTR1]], ptr [[TMP2]], align 8
4502 // CK21-NEXT:    ret void
4503 //
4504 //
4505 // CK22-LABEL: define {{[^@]+}}@_Z3barPd
4506 // CK22-SAME: (ptr noundef [[ARG:%.*]]) #[[ATTR0:[0-9]+]] {
4507 // CK22-NEXT:  entry:
4508 // CK22-NEXT:    [[ARG_ADDR:%.*]] = alloca ptr, align 4
4509 // CK22-NEXT:    [[A:%.*]] = alloca [[STRUCT_ST:%.*]], align 4
4510 // CK22-NEXT:    store ptr [[ARG]], ptr [[ARG_ADDR]], align 4
4511 // CK22-NEXT:    call void @_ZN2STIdEC1ERPd(ptr noundef nonnull align 4 dereferenceable(8) [[A]], ptr noundef nonnull align 4 dereferenceable(4) [[ARG_ADDR]])
4512 // CK22-NEXT:    call void @_ZN2STIdE3fooERPd(ptr noundef nonnull align 4 dereferenceable(8) [[A]], ptr noundef nonnull align 4 dereferenceable(4) [[ARG_ADDR]])
4513 // CK22-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[ARG_ADDR]], align 4
4514 // CK22-NEXT:    [[INCDEC_PTR:%.*]] = getelementptr inbounds nuw double, ptr [[TMP0]], i32 1
4515 // CK22-NEXT:    store ptr [[INCDEC_PTR]], ptr [[ARG_ADDR]], align 4
4516 // CK22-NEXT:    ret void
4517 //
4518 //
4519 // CK22-LABEL: define {{[^@]+}}@_ZN2STIdEC1ERPd
4520 // CK22-SAME: (ptr noundef nonnull align 4 dereferenceable(8) [[THIS:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[B:%.*]]) unnamed_addr #[[ATTR0]] comdat align 2 {
4521 // CK22-NEXT:  entry:
4522 // CK22-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 4
4523 // CK22-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 4
4524 // CK22-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 4
4525 // CK22-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 4
4526 // CK22-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4
4527 // CK22-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 4
4528 // CK22-NEXT:    call void @_ZN2STIdEC2ERPd(ptr noundef nonnull align 4 dereferenceable(8) [[THIS1]], ptr noundef nonnull align 4 dereferenceable(4) [[TMP0]])
4529 // CK22-NEXT:    ret void
4530 //
4531 //
4532 // CK22-LABEL: define {{[^@]+}}@_ZN2STIdE3fooERPd
4533 // CK22-SAME: (ptr noundef nonnull align 4 dereferenceable(8) [[THIS:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[ARG:%.*]]) #[[ATTR0]] comdat align 2 {
4534 // CK22-NEXT:  entry:
4535 // CK22-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 4
4536 // CK22-NEXT:    [[ARG_ADDR:%.*]] = alloca ptr, align 4
4537 // CK22-NEXT:    [[LA:%.*]] = alloca ptr, align 4
4538 // CK22-NEXT:    [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 4
4539 // CK22-NEXT:    [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 4
4540 // CK22-NEXT:    [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 4
4541 // CK22-NEXT:    [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8
4542 // CK22-NEXT:    [[DOTOFFLOAD_BASEPTRS2:%.*]] = alloca [2 x ptr], align 4
4543 // CK22-NEXT:    [[DOTOFFLOAD_PTRS3:%.*]] = alloca [2 x ptr], align 4
4544 // CK22-NEXT:    [[DOTOFFLOAD_MAPPERS4:%.*]] = alloca [2 x ptr], align 4
4545 // CK22-NEXT:    [[DOTOFFLOAD_SIZES:%.*]] = alloca [2 x i64], align 4
4546 // CK22-NEXT:    [[KERNEL_ARGS5:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
4547 // CK22-NEXT:    [[DOTOFFLOAD_BASEPTRS10:%.*]] = alloca [3 x ptr], align 4
4548 // CK22-NEXT:    [[DOTOFFLOAD_PTRS11:%.*]] = alloca [3 x ptr], align 4
4549 // CK22-NEXT:    [[DOTOFFLOAD_MAPPERS12:%.*]] = alloca [3 x ptr], align 4
4550 // CK22-NEXT:    [[DOTOFFLOAD_SIZES13:%.*]] = alloca [3 x i64], align 4
4551 // CK22-NEXT:    [[KERNEL_ARGS14:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
4552 // CK22-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 4
4553 // CK22-NEXT:    store ptr [[ARG]], ptr [[ARG_ADDR]], align 4
4554 // CK22-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4
4555 // CK22-NEXT:    store ptr null, ptr [[LA]], align 4
4556 // CK22-NEXT:    [[A:%.*]] = getelementptr inbounds nuw [[STRUCT_ST:%.*]], ptr [[THIS1]], i32 0, i32 0
4557 // CK22-NEXT:    [[TMP0:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
4558 // CK22-NEXT:    store ptr [[THIS1]], ptr [[TMP0]], align 4
4559 // CK22-NEXT:    [[TMP1:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0
4560 // CK22-NEXT:    store ptr [[A]], ptr [[TMP1]], align 4
4561 // CK22-NEXT:    [[TMP2:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
4562 // CK22-NEXT:    store ptr null, ptr [[TMP2]], align 4
4563 // CK22-NEXT:    [[TMP3:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
4564 // CK22-NEXT:    [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0
4565 // CK22-NEXT:    [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0
4566 // CK22-NEXT:    store i32 3, ptr [[TMP5]], align 4
4567 // CK22-NEXT:    [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1
4568 // CK22-NEXT:    store i32 1, ptr [[TMP6]], align 4
4569 // CK22-NEXT:    [[TMP7:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2
4570 // CK22-NEXT:    store ptr [[TMP3]], ptr [[TMP7]], align 4
4571 // CK22-NEXT:    [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3
4572 // CK22-NEXT:    store ptr [[TMP4]], ptr [[TMP8]], align 4
4573 // CK22-NEXT:    [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4
4574 // CK22-NEXT:    store ptr @.offload_sizes, ptr [[TMP9]], align 4
4575 // CK22-NEXT:    [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5
4576 // CK22-NEXT:    store ptr @.offload_maptypes, ptr [[TMP10]], align 4
4577 // CK22-NEXT:    [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6
4578 // CK22-NEXT:    store ptr null, ptr [[TMP11]], align 4
4579 // CK22-NEXT:    [[TMP12:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7
4580 // CK22-NEXT:    store ptr null, ptr [[TMP12]], align 4
4581 // CK22-NEXT:    [[TMP13:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8
4582 // CK22-NEXT:    store i64 0, ptr [[TMP13]], align 8
4583 // CK22-NEXT:    [[TMP14:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9
4584 // CK22-NEXT:    store i64 0, ptr [[TMP14]], align 8
4585 // CK22-NEXT:    [[TMP15:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10
4586 // CK22-NEXT:    store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP15]], align 4
4587 // CK22-NEXT:    [[TMP16:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11
4588 // CK22-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP16]], align 4
4589 // CK22-NEXT:    [[TMP17:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12
4590 // CK22-NEXT:    store i32 0, ptr [[TMP17]], align 4
4591 // 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]])
4592 // CK22-NEXT:    [[TMP19:%.*]] = icmp ne i32 [[TMP18]], 0
4593 // CK22-NEXT:    br i1 [[TMP19]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
4594 // CK22:       omp_offload.failed:
4595 // CK22-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l112(ptr [[THIS1]]) #[[ATTR2:[0-9]+]]
4596 // CK22-NEXT:    br label [[OMP_OFFLOAD_CONT]]
4597 // CK22:       omp_offload.cont:
4598 // CK22-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ST]], ptr [[THIS1]], i32 0, i32 1
4599 // CK22-NEXT:    [[TMP20:%.*]] = load ptr, ptr [[B]], align 4
4600 // CK22-NEXT:    [[TMP21:%.*]] = getelementptr ptr, ptr [[B]], i32 1
4601 // CK22-NEXT:    [[TMP22:%.*]] = ptrtoint ptr [[TMP21]] to i64
4602 // CK22-NEXT:    [[TMP23:%.*]] = ptrtoint ptr [[B]] to i64
4603 // CK22-NEXT:    [[TMP24:%.*]] = sub i64 [[TMP22]], [[TMP23]]
4604 // CK22-NEXT:    [[TMP25:%.*]] = sdiv exact i64 [[TMP24]], ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)
4605 // CK22-NEXT:    call void @llvm.memcpy.p0.p0.i32(ptr align 4 [[DOTOFFLOAD_SIZES]], ptr align 4 @.offload_sizes.1, i32 16, i1 false)
4606 // CK22-NEXT:    [[TMP26:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS2]], i32 0, i32 0
4607 // CK22-NEXT:    store ptr [[THIS1]], ptr [[TMP26]], align 4
4608 // CK22-NEXT:    [[TMP27:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS3]], i32 0, i32 0
4609 // CK22-NEXT:    store ptr [[B]], ptr [[TMP27]], align 4
4610 // CK22-NEXT:    [[TMP28:%.*]] = getelementptr inbounds [2 x i64], ptr [[DOTOFFLOAD_SIZES]], i32 0, i32 0
4611 // CK22-NEXT:    store i64 [[TMP25]], ptr [[TMP28]], align 4
4612 // CK22-NEXT:    [[TMP29:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_MAPPERS4]], i32 0, i32 0
4613 // CK22-NEXT:    store ptr null, ptr [[TMP29]], align 4
4614 // CK22-NEXT:    [[TMP30:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS2]], i32 0, i32 1
4615 // CK22-NEXT:    store ptr [[THIS1]], ptr [[TMP30]], align 4
4616 // CK22-NEXT:    [[TMP31:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS3]], i32 0, i32 1
4617 // CK22-NEXT:    store ptr [[TMP20]], ptr [[TMP31]], align 4
4618 // CK22-NEXT:    [[TMP32:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_MAPPERS4]], i32 0, i32 1
4619 // CK22-NEXT:    store ptr null, ptr [[TMP32]], align 4
4620 // CK22-NEXT:    [[TMP33:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS2]], i32 0, i32 0
4621 // CK22-NEXT:    [[TMP34:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS3]], i32 0, i32 0
4622 // CK22-NEXT:    [[TMP35:%.*]] = getelementptr inbounds [2 x i64], ptr [[DOTOFFLOAD_SIZES]], i32 0, i32 0
4623 // CK22-NEXT:    [[TMP36:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 0
4624 // CK22-NEXT:    store i32 3, ptr [[TMP36]], align 4
4625 // CK22-NEXT:    [[TMP37:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 1
4626 // CK22-NEXT:    store i32 2, ptr [[TMP37]], align 4
4627 // CK22-NEXT:    [[TMP38:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 2
4628 // CK22-NEXT:    store ptr [[TMP33]], ptr [[TMP38]], align 4
4629 // CK22-NEXT:    [[TMP39:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 3
4630 // CK22-NEXT:    store ptr [[TMP34]], ptr [[TMP39]], align 4
4631 // CK22-NEXT:    [[TMP40:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 4
4632 // CK22-NEXT:    store ptr [[TMP35]], ptr [[TMP40]], align 4
4633 // CK22-NEXT:    [[TMP41:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 5
4634 // CK22-NEXT:    store ptr @.offload_maptypes.2, ptr [[TMP41]], align 4
4635 // CK22-NEXT:    [[TMP42:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 6
4636 // CK22-NEXT:    store ptr null, ptr [[TMP42]], align 4
4637 // CK22-NEXT:    [[TMP43:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 7
4638 // CK22-NEXT:    store ptr null, ptr [[TMP43]], align 4
4639 // CK22-NEXT:    [[TMP44:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 8
4640 // CK22-NEXT:    store i64 0, ptr [[TMP44]], align 8
4641 // CK22-NEXT:    [[TMP45:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 9
4642 // CK22-NEXT:    store i64 0, ptr [[TMP45]], align 8
4643 // CK22-NEXT:    [[TMP46:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 10
4644 // CK22-NEXT:    store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP46]], align 4
4645 // CK22-NEXT:    [[TMP47:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 11
4646 // CK22-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP47]], align 4
4647 // CK22-NEXT:    [[TMP48:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 12
4648 // CK22-NEXT:    store i32 0, ptr [[TMP48]], align 4
4649 // 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]])
4650 // CK22-NEXT:    [[TMP50:%.*]] = icmp ne i32 [[TMP49]], 0
4651 // CK22-NEXT:    br i1 [[TMP50]], label [[OMP_OFFLOAD_FAILED6:%.*]], label [[OMP_OFFLOAD_CONT7:%.*]]
4652 // CK22:       omp_offload.failed6:
4653 // CK22-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l118(ptr [[THIS1]]) #[[ATTR2]]
4654 // CK22-NEXT:    br label [[OMP_OFFLOAD_CONT7]]
4655 // CK22:       omp_offload.cont7:
4656 // CK22-NEXT:    [[A8:%.*]] = getelementptr inbounds nuw [[STRUCT_ST]], ptr [[THIS1]], i32 0, i32 0
4657 // CK22-NEXT:    [[B9:%.*]] = getelementptr inbounds nuw [[STRUCT_ST]], ptr [[THIS1]], i32 0, i32 1
4658 // CK22-NEXT:    [[TMP51:%.*]] = load ptr, ptr [[B9]], align 4
4659 // CK22-NEXT:    [[TMP52:%.*]] = getelementptr ptr, ptr [[B9]], i32 1
4660 // CK22-NEXT:    [[TMP53:%.*]] = ptrtoint ptr [[TMP52]] to i64
4661 // CK22-NEXT:    [[TMP54:%.*]] = ptrtoint ptr [[A8]] to i64
4662 // CK22-NEXT:    [[TMP55:%.*]] = sub i64 [[TMP53]], [[TMP54]]
4663 // CK22-NEXT:    [[TMP56:%.*]] = sdiv exact i64 [[TMP55]], ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)
4664 // CK22-NEXT:    call void @llvm.memcpy.p0.p0.i32(ptr align 4 [[DOTOFFLOAD_SIZES13]], ptr align 4 @.offload_sizes.3, i32 24, i1 false)
4665 // CK22-NEXT:    [[TMP57:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS10]], i32 0, i32 0
4666 // CK22-NEXT:    store ptr [[THIS1]], ptr [[TMP57]], align 4
4667 // CK22-NEXT:    [[TMP58:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS11]], i32 0, i32 0
4668 // CK22-NEXT:    store ptr [[A8]], ptr [[TMP58]], align 4
4669 // CK22-NEXT:    [[TMP59:%.*]] = getelementptr inbounds [3 x i64], ptr [[DOTOFFLOAD_SIZES13]], i32 0, i32 0
4670 // CK22-NEXT:    store i64 [[TMP56]], ptr [[TMP59]], align 4
4671 // CK22-NEXT:    [[TMP60:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS12]], i32 0, i32 0
4672 // CK22-NEXT:    store ptr null, ptr [[TMP60]], align 4
4673 // CK22-NEXT:    [[TMP61:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS10]], i32 0, i32 1
4674 // CK22-NEXT:    store ptr [[THIS1]], ptr [[TMP61]], align 4
4675 // CK22-NEXT:    [[TMP62:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS11]], i32 0, i32 1
4676 // CK22-NEXT:    store ptr [[A8]], ptr [[TMP62]], align 4
4677 // CK22-NEXT:    [[TMP63:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS12]], i32 0, i32 1
4678 // CK22-NEXT:    store ptr null, ptr [[TMP63]], align 4
4679 // CK22-NEXT:    [[TMP64:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS10]], i32 0, i32 2
4680 // CK22-NEXT:    store ptr [[THIS1]], ptr [[TMP64]], align 4
4681 // CK22-NEXT:    [[TMP65:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS11]], i32 0, i32 2
4682 // CK22-NEXT:    store ptr [[TMP51]], ptr [[TMP65]], align 4
4683 // CK22-NEXT:    [[TMP66:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS12]], i32 0, i32 2
4684 // CK22-NEXT:    store ptr null, ptr [[TMP66]], align 4
4685 // CK22-NEXT:    [[TMP67:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS10]], i32 0, i32 0
4686 // CK22-NEXT:    [[TMP68:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS11]], i32 0, i32 0
4687 // CK22-NEXT:    [[TMP69:%.*]] = getelementptr inbounds [3 x i64], ptr [[DOTOFFLOAD_SIZES13]], i32 0, i32 0
4688 // CK22-NEXT:    [[TMP70:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 0
4689 // CK22-NEXT:    store i32 3, ptr [[TMP70]], align 4
4690 // CK22-NEXT:    [[TMP71:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 1
4691 // CK22-NEXT:    store i32 3, ptr [[TMP71]], align 4
4692 // CK22-NEXT:    [[TMP72:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 2
4693 // CK22-NEXT:    store ptr [[TMP67]], ptr [[TMP72]], align 4
4694 // CK22-NEXT:    [[TMP73:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 3
4695 // CK22-NEXT:    store ptr [[TMP68]], ptr [[TMP73]], align 4
4696 // CK22-NEXT:    [[TMP74:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 4
4697 // CK22-NEXT:    store ptr [[TMP69]], ptr [[TMP74]], align 4
4698 // CK22-NEXT:    [[TMP75:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 5
4699 // CK22-NEXT:    store ptr @.offload_maptypes.4, ptr [[TMP75]], align 4
4700 // CK22-NEXT:    [[TMP76:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 6
4701 // CK22-NEXT:    store ptr null, ptr [[TMP76]], align 4
4702 // CK22-NEXT:    [[TMP77:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 7
4703 // CK22-NEXT:    store ptr null, ptr [[TMP77]], align 4
4704 // CK22-NEXT:    [[TMP78:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 8
4705 // CK22-NEXT:    store i64 0, ptr [[TMP78]], align 8
4706 // CK22-NEXT:    [[TMP79:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 9
4707 // CK22-NEXT:    store i64 0, ptr [[TMP79]], align 8
4708 // CK22-NEXT:    [[TMP80:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 10
4709 // CK22-NEXT:    store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP80]], align 4
4710 // CK22-NEXT:    [[TMP81:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 11
4711 // CK22-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP81]], align 4
4712 // CK22-NEXT:    [[TMP82:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 12
4713 // CK22-NEXT:    store i32 0, ptr [[TMP82]], align 4
4714 // 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]])
4715 // CK22-NEXT:    [[TMP84:%.*]] = icmp ne i32 [[TMP83]], 0
4716 // CK22-NEXT:    br i1 [[TMP84]], label [[OMP_OFFLOAD_FAILED15:%.*]], label [[OMP_OFFLOAD_CONT16:%.*]]
4717 // CK22:       omp_offload.failed15:
4718 // CK22-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l125(ptr [[THIS1]]) #[[ATTR2]]
4719 // CK22-NEXT:    br label [[OMP_OFFLOAD_CONT16]]
4720 // CK22:       omp_offload.cont16:
4721 // CK22-NEXT:    ret void
4722 //
4723 //
4724 // CK22-LABEL: define {{[^@]+}}@_ZN2STIdEC2ERPd
4725 // CK22-SAME: (ptr noundef nonnull align 4 dereferenceable(8) [[THIS:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[B:%.*]]) unnamed_addr #[[ATTR0]] comdat align 2 {
4726 // CK22-NEXT:  entry:
4727 // CK22-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 4
4728 // CK22-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 4
4729 // CK22-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 4
4730 // CK22-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 4
4731 // CK22-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4
4732 // CK22-NEXT:    [[A:%.*]] = getelementptr inbounds nuw [[STRUCT_ST:%.*]], ptr [[THIS1]], i32 0, i32 0
4733 // CK22-NEXT:    store ptr null, ptr [[A]], align 4
4734 // CK22-NEXT:    [[B2:%.*]] = getelementptr inbounds nuw [[STRUCT_ST]], ptr [[THIS1]], i32 0, i32 1
4735 // CK22-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 4
4736 // CK22-NEXT:    store ptr [[TMP0]], ptr [[B2]], align 4
4737 // CK22-NEXT:    ret void
4738 //
4739 //
4740 // CK22-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l112
4741 // CK22-SAME: (ptr noundef [[THIS:%.*]]) #[[ATTR1:[0-9]+]] {
4742 // CK22-NEXT:  entry:
4743 // CK22-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 4
4744 // CK22-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 4
4745 // CK22-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4
4746 // CK22-NEXT:    [[A:%.*]] = getelementptr inbounds nuw [[STRUCT_ST:%.*]], ptr [[TMP0]], i32 0, i32 0
4747 // CK22-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A]], align 4
4748 // CK22-NEXT:    [[INCDEC_PTR:%.*]] = getelementptr inbounds nuw double, ptr [[TMP1]], i32 1
4749 // CK22-NEXT:    store ptr [[INCDEC_PTR]], ptr [[A]], align 4
4750 // CK22-NEXT:    ret void
4751 //
4752 //
4753 // CK22-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l118
4754 // CK22-SAME: (ptr noundef [[THIS:%.*]]) #[[ATTR1]] {
4755 // CK22-NEXT:  entry:
4756 // CK22-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 4
4757 // CK22-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 4
4758 // CK22-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4
4759 // CK22-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ST:%.*]], ptr [[TMP0]], i32 0, i32 1
4760 // CK22-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[B]], align 4
4761 // CK22-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[TMP1]], align 4
4762 // CK22-NEXT:    [[INCDEC_PTR:%.*]] = getelementptr inbounds nuw double, ptr [[TMP2]], i32 1
4763 // CK22-NEXT:    store ptr [[INCDEC_PTR]], ptr [[TMP1]], align 4
4764 // CK22-NEXT:    ret void
4765 //
4766 //
4767 // CK22-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l125
4768 // CK22-SAME: (ptr noundef [[THIS:%.*]]) #[[ATTR1]] {
4769 // CK22-NEXT:  entry:
4770 // CK22-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 4
4771 // CK22-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 4
4772 // CK22-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4
4773 // CK22-NEXT:    [[A:%.*]] = getelementptr inbounds nuw [[STRUCT_ST:%.*]], ptr [[TMP0]], i32 0, i32 0
4774 // CK22-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A]], align 4
4775 // CK22-NEXT:    [[INCDEC_PTR:%.*]] = getelementptr inbounds nuw double, ptr [[TMP1]], i32 1
4776 // CK22-NEXT:    store ptr [[INCDEC_PTR]], ptr [[A]], align 4
4777 // CK22-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ST]], ptr [[TMP0]], i32 0, i32 1
4778 // CK22-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B]], align 4
4779 // CK22-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[TMP2]], align 4
4780 // CK22-NEXT:    [[INCDEC_PTR1:%.*]] = getelementptr inbounds nuw double, ptr [[TMP3]], i32 1
4781 // CK22-NEXT:    store ptr [[INCDEC_PTR1]], ptr [[TMP2]], align 4
4782 // CK22-NEXT:    ret void
4783 //
4784 //
4785 // CK23-LABEL: define {{[^@]+}}@_Z3barPd
4786 // CK23-SAME: (ptr noundef [[ARG:%.*]]) #[[ATTR0:[0-9]+]] {
4787 // CK23-NEXT:  entry:
4788 // CK23-NEXT:    [[ARG_ADDR:%.*]] = alloca ptr, align 4
4789 // CK23-NEXT:    [[A:%.*]] = alloca [[STRUCT_ST:%.*]], align 4
4790 // CK23-NEXT:    store ptr [[ARG]], ptr [[ARG_ADDR]], align 4
4791 // CK23-NEXT:    call void @_ZN2STIdEC1ERPd(ptr noundef nonnull align 4 dereferenceable(8) [[A]], ptr noundef nonnull align 4 dereferenceable(4) [[ARG_ADDR]])
4792 // CK23-NEXT:    call void @_ZN2STIdE3fooERPd(ptr noundef nonnull align 4 dereferenceable(8) [[A]], ptr noundef nonnull align 4 dereferenceable(4) [[ARG_ADDR]])
4793 // CK23-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[ARG_ADDR]], align 4
4794 // CK23-NEXT:    [[INCDEC_PTR:%.*]] = getelementptr inbounds nuw double, ptr [[TMP0]], i32 1
4795 // CK23-NEXT:    store ptr [[INCDEC_PTR]], ptr [[ARG_ADDR]], align 4
4796 // CK23-NEXT:    ret void
4797 //
4798 //
4799 // CK23-LABEL: define {{[^@]+}}@_ZN2STIdEC1ERPd
4800 // CK23-SAME: (ptr noundef nonnull align 4 dereferenceable(8) [[THIS:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[B:%.*]]) unnamed_addr #[[ATTR0]] comdat align 2 {
4801 // CK23-NEXT:  entry:
4802 // CK23-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 4
4803 // CK23-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 4
4804 // CK23-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 4
4805 // CK23-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 4
4806 // CK23-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4
4807 // CK23-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 4
4808 // CK23-NEXT:    call void @_ZN2STIdEC2ERPd(ptr noundef nonnull align 4 dereferenceable(8) [[THIS1]], ptr noundef nonnull align 4 dereferenceable(4) [[TMP0]])
4809 // CK23-NEXT:    ret void
4810 //
4811 //
4812 // CK23-LABEL: define {{[^@]+}}@_ZN2STIdE3fooERPd
4813 // CK23-SAME: (ptr noundef nonnull align 4 dereferenceable(8) [[THIS:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[ARG:%.*]]) #[[ATTR0]] comdat align 2 {
4814 // CK23-NEXT:  entry:
4815 // CK23-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 4
4816 // CK23-NEXT:    [[ARG_ADDR:%.*]] = alloca ptr, align 4
4817 // CK23-NEXT:    [[LA:%.*]] = alloca ptr, align 4
4818 // CK23-NEXT:    [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 4
4819 // CK23-NEXT:    [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 4
4820 // CK23-NEXT:    [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 4
4821 // CK23-NEXT:    [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8
4822 // CK23-NEXT:    [[DOTOFFLOAD_BASEPTRS2:%.*]] = alloca [2 x ptr], align 4
4823 // CK23-NEXT:    [[DOTOFFLOAD_PTRS3:%.*]] = alloca [2 x ptr], align 4
4824 // CK23-NEXT:    [[DOTOFFLOAD_MAPPERS4:%.*]] = alloca [2 x ptr], align 4
4825 // CK23-NEXT:    [[DOTOFFLOAD_SIZES:%.*]] = alloca [2 x i64], align 4
4826 // CK23-NEXT:    [[KERNEL_ARGS5:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
4827 // CK23-NEXT:    [[DOTOFFLOAD_BASEPTRS10:%.*]] = alloca [3 x ptr], align 4
4828 // CK23-NEXT:    [[DOTOFFLOAD_PTRS11:%.*]] = alloca [3 x ptr], align 4
4829 // CK23-NEXT:    [[DOTOFFLOAD_MAPPERS12:%.*]] = alloca [3 x ptr], align 4
4830 // CK23-NEXT:    [[DOTOFFLOAD_SIZES13:%.*]] = alloca [3 x i64], align 4
4831 // CK23-NEXT:    [[KERNEL_ARGS14:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS]], align 8
4832 // CK23-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 4
4833 // CK23-NEXT:    store ptr [[ARG]], ptr [[ARG_ADDR]], align 4
4834 // CK23-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4
4835 // CK23-NEXT:    store ptr null, ptr [[LA]], align 4
4836 // CK23-NEXT:    [[A:%.*]] = getelementptr inbounds nuw [[STRUCT_ST:%.*]], ptr [[THIS1]], i32 0, i32 0
4837 // CK23-NEXT:    [[TMP0:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
4838 // CK23-NEXT:    store ptr [[THIS1]], ptr [[TMP0]], align 4
4839 // CK23-NEXT:    [[TMP1:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0
4840 // CK23-NEXT:    store ptr [[A]], ptr [[TMP1]], align 4
4841 // CK23-NEXT:    [[TMP2:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
4842 // CK23-NEXT:    store ptr null, ptr [[TMP2]], align 4
4843 // CK23-NEXT:    [[TMP3:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
4844 // CK23-NEXT:    [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0
4845 // CK23-NEXT:    [[TMP5:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0
4846 // CK23-NEXT:    store i32 3, ptr [[TMP5]], align 4
4847 // CK23-NEXT:    [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1
4848 // CK23-NEXT:    store i32 1, ptr [[TMP6]], align 4
4849 // CK23-NEXT:    [[TMP7:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2
4850 // CK23-NEXT:    store ptr [[TMP3]], ptr [[TMP7]], align 4
4851 // CK23-NEXT:    [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3
4852 // CK23-NEXT:    store ptr [[TMP4]], ptr [[TMP8]], align 4
4853 // CK23-NEXT:    [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4
4854 // CK23-NEXT:    store ptr @.offload_sizes, ptr [[TMP9]], align 4
4855 // CK23-NEXT:    [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5
4856 // CK23-NEXT:    store ptr @.offload_maptypes, ptr [[TMP10]], align 4
4857 // CK23-NEXT:    [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6
4858 // CK23-NEXT:    store ptr null, ptr [[TMP11]], align 4
4859 // CK23-NEXT:    [[TMP12:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7
4860 // CK23-NEXT:    store ptr null, ptr [[TMP12]], align 4
4861 // CK23-NEXT:    [[TMP13:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8
4862 // CK23-NEXT:    store i64 0, ptr [[TMP13]], align 8
4863 // CK23-NEXT:    [[TMP14:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9
4864 // CK23-NEXT:    store i64 0, ptr [[TMP14]], align 8
4865 // CK23-NEXT:    [[TMP15:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10
4866 // CK23-NEXT:    store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP15]], align 4
4867 // CK23-NEXT:    [[TMP16:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11
4868 // CK23-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP16]], align 4
4869 // CK23-NEXT:    [[TMP17:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12
4870 // CK23-NEXT:    store i32 0, ptr [[TMP17]], align 4
4871 // 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]])
4872 // CK23-NEXT:    [[TMP19:%.*]] = icmp ne i32 [[TMP18]], 0
4873 // CK23-NEXT:    br i1 [[TMP19]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
4874 // CK23:       omp_offload.failed:
4875 // CK23-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l112(ptr [[THIS1]]) #[[ATTR2:[0-9]+]]
4876 // CK23-NEXT:    br label [[OMP_OFFLOAD_CONT]]
4877 // CK23:       omp_offload.cont:
4878 // CK23-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ST]], ptr [[THIS1]], i32 0, i32 1
4879 // CK23-NEXT:    [[TMP20:%.*]] = load ptr, ptr [[B]], align 4
4880 // CK23-NEXT:    [[TMP21:%.*]] = getelementptr ptr, ptr [[B]], i32 1
4881 // CK23-NEXT:    [[TMP22:%.*]] = ptrtoint ptr [[TMP21]] to i64
4882 // CK23-NEXT:    [[TMP23:%.*]] = ptrtoint ptr [[B]] to i64
4883 // CK23-NEXT:    [[TMP24:%.*]] = sub i64 [[TMP22]], [[TMP23]]
4884 // CK23-NEXT:    [[TMP25:%.*]] = sdiv exact i64 [[TMP24]], ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)
4885 // CK23-NEXT:    call void @llvm.memcpy.p0.p0.i32(ptr align 4 [[DOTOFFLOAD_SIZES]], ptr align 4 @.offload_sizes.1, i32 16, i1 false)
4886 // CK23-NEXT:    [[TMP26:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS2]], i32 0, i32 0
4887 // CK23-NEXT:    store ptr [[THIS1]], ptr [[TMP26]], align 4
4888 // CK23-NEXT:    [[TMP27:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS3]], i32 0, i32 0
4889 // CK23-NEXT:    store ptr [[B]], ptr [[TMP27]], align 4
4890 // CK23-NEXT:    [[TMP28:%.*]] = getelementptr inbounds [2 x i64], ptr [[DOTOFFLOAD_SIZES]], i32 0, i32 0
4891 // CK23-NEXT:    store i64 [[TMP25]], ptr [[TMP28]], align 4
4892 // CK23-NEXT:    [[TMP29:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_MAPPERS4]], i32 0, i32 0
4893 // CK23-NEXT:    store ptr null, ptr [[TMP29]], align 4
4894 // CK23-NEXT:    [[TMP30:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS2]], i32 0, i32 1
4895 // CK23-NEXT:    store ptr [[THIS1]], ptr [[TMP30]], align 4
4896 // CK23-NEXT:    [[TMP31:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS3]], i32 0, i32 1
4897 // CK23-NEXT:    store ptr [[TMP20]], ptr [[TMP31]], align 4
4898 // CK23-NEXT:    [[TMP32:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_MAPPERS4]], i32 0, i32 1
4899 // CK23-NEXT:    store ptr null, ptr [[TMP32]], align 4
4900 // CK23-NEXT:    [[TMP33:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_BASEPTRS2]], i32 0, i32 0
4901 // CK23-NEXT:    [[TMP34:%.*]] = getelementptr inbounds [2 x ptr], ptr [[DOTOFFLOAD_PTRS3]], i32 0, i32 0
4902 // CK23-NEXT:    [[TMP35:%.*]] = getelementptr inbounds [2 x i64], ptr [[DOTOFFLOAD_SIZES]], i32 0, i32 0
4903 // CK23-NEXT:    [[TMP36:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 0
4904 // CK23-NEXT:    store i32 3, ptr [[TMP36]], align 4
4905 // CK23-NEXT:    [[TMP37:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 1
4906 // CK23-NEXT:    store i32 2, ptr [[TMP37]], align 4
4907 // CK23-NEXT:    [[TMP38:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 2
4908 // CK23-NEXT:    store ptr [[TMP33]], ptr [[TMP38]], align 4
4909 // CK23-NEXT:    [[TMP39:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 3
4910 // CK23-NEXT:    store ptr [[TMP34]], ptr [[TMP39]], align 4
4911 // CK23-NEXT:    [[TMP40:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 4
4912 // CK23-NEXT:    store ptr [[TMP35]], ptr [[TMP40]], align 4
4913 // CK23-NEXT:    [[TMP41:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 5
4914 // CK23-NEXT:    store ptr @.offload_maptypes.2, ptr [[TMP41]], align 4
4915 // CK23-NEXT:    [[TMP42:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 6
4916 // CK23-NEXT:    store ptr null, ptr [[TMP42]], align 4
4917 // CK23-NEXT:    [[TMP43:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 7
4918 // CK23-NEXT:    store ptr null, ptr [[TMP43]], align 4
4919 // CK23-NEXT:    [[TMP44:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 8
4920 // CK23-NEXT:    store i64 0, ptr [[TMP44]], align 8
4921 // CK23-NEXT:    [[TMP45:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 9
4922 // CK23-NEXT:    store i64 0, ptr [[TMP45]], align 8
4923 // CK23-NEXT:    [[TMP46:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 10
4924 // CK23-NEXT:    store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP46]], align 4
4925 // CK23-NEXT:    [[TMP47:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 11
4926 // CK23-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP47]], align 4
4927 // CK23-NEXT:    [[TMP48:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS5]], i32 0, i32 12
4928 // CK23-NEXT:    store i32 0, ptr [[TMP48]], align 4
4929 // 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]])
4930 // CK23-NEXT:    [[TMP50:%.*]] = icmp ne i32 [[TMP49]], 0
4931 // CK23-NEXT:    br i1 [[TMP50]], label [[OMP_OFFLOAD_FAILED6:%.*]], label [[OMP_OFFLOAD_CONT7:%.*]]
4932 // CK23:       omp_offload.failed6:
4933 // CK23-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l118(ptr [[THIS1]]) #[[ATTR2]]
4934 // CK23-NEXT:    br label [[OMP_OFFLOAD_CONT7]]
4935 // CK23:       omp_offload.cont7:
4936 // CK23-NEXT:    [[A8:%.*]] = getelementptr inbounds nuw [[STRUCT_ST]], ptr [[THIS1]], i32 0, i32 0
4937 // CK23-NEXT:    [[B9:%.*]] = getelementptr inbounds nuw [[STRUCT_ST]], ptr [[THIS1]], i32 0, i32 1
4938 // CK23-NEXT:    [[TMP51:%.*]] = load ptr, ptr [[B9]], align 4
4939 // CK23-NEXT:    [[TMP52:%.*]] = getelementptr ptr, ptr [[B9]], i32 1
4940 // CK23-NEXT:    [[TMP53:%.*]] = ptrtoint ptr [[TMP52]] to i64
4941 // CK23-NEXT:    [[TMP54:%.*]] = ptrtoint ptr [[A8]] to i64
4942 // CK23-NEXT:    [[TMP55:%.*]] = sub i64 [[TMP53]], [[TMP54]]
4943 // CK23-NEXT:    [[TMP56:%.*]] = sdiv exact i64 [[TMP55]], ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)
4944 // CK23-NEXT:    call void @llvm.memcpy.p0.p0.i32(ptr align 4 [[DOTOFFLOAD_SIZES13]], ptr align 4 @.offload_sizes.3, i32 24, i1 false)
4945 // CK23-NEXT:    [[TMP57:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS10]], i32 0, i32 0
4946 // CK23-NEXT:    store ptr [[THIS1]], ptr [[TMP57]], align 4
4947 // CK23-NEXT:    [[TMP58:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS11]], i32 0, i32 0
4948 // CK23-NEXT:    store ptr [[A8]], ptr [[TMP58]], align 4
4949 // CK23-NEXT:    [[TMP59:%.*]] = getelementptr inbounds [3 x i64], ptr [[DOTOFFLOAD_SIZES13]], i32 0, i32 0
4950 // CK23-NEXT:    store i64 [[TMP56]], ptr [[TMP59]], align 4
4951 // CK23-NEXT:    [[TMP60:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS12]], i32 0, i32 0
4952 // CK23-NEXT:    store ptr null, ptr [[TMP60]], align 4
4953 // CK23-NEXT:    [[TMP61:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS10]], i32 0, i32 1
4954 // CK23-NEXT:    store ptr [[THIS1]], ptr [[TMP61]], align 4
4955 // CK23-NEXT:    [[TMP62:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS11]], i32 0, i32 1
4956 // CK23-NEXT:    store ptr [[A8]], ptr [[TMP62]], align 4
4957 // CK23-NEXT:    [[TMP63:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS12]], i32 0, i32 1
4958 // CK23-NEXT:    store ptr null, ptr [[TMP63]], align 4
4959 // CK23-NEXT:    [[TMP64:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS10]], i32 0, i32 2
4960 // CK23-NEXT:    store ptr [[THIS1]], ptr [[TMP64]], align 4
4961 // CK23-NEXT:    [[TMP65:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS11]], i32 0, i32 2
4962 // CK23-NEXT:    store ptr [[TMP51]], ptr [[TMP65]], align 4
4963 // CK23-NEXT:    [[TMP66:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_MAPPERS12]], i32 0, i32 2
4964 // CK23-NEXT:    store ptr null, ptr [[TMP66]], align 4
4965 // CK23-NEXT:    [[TMP67:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_BASEPTRS10]], i32 0, i32 0
4966 // CK23-NEXT:    [[TMP68:%.*]] = getelementptr inbounds [3 x ptr], ptr [[DOTOFFLOAD_PTRS11]], i32 0, i32 0
4967 // CK23-NEXT:    [[TMP69:%.*]] = getelementptr inbounds [3 x i64], ptr [[DOTOFFLOAD_SIZES13]], i32 0, i32 0
4968 // CK23-NEXT:    [[TMP70:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 0
4969 // CK23-NEXT:    store i32 3, ptr [[TMP70]], align 4
4970 // CK23-NEXT:    [[TMP71:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 1
4971 // CK23-NEXT:    store i32 3, ptr [[TMP71]], align 4
4972 // CK23-NEXT:    [[TMP72:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 2
4973 // CK23-NEXT:    store ptr [[TMP67]], ptr [[TMP72]], align 4
4974 // CK23-NEXT:    [[TMP73:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 3
4975 // CK23-NEXT:    store ptr [[TMP68]], ptr [[TMP73]], align 4
4976 // CK23-NEXT:    [[TMP74:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 4
4977 // CK23-NEXT:    store ptr [[TMP69]], ptr [[TMP74]], align 4
4978 // CK23-NEXT:    [[TMP75:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 5
4979 // CK23-NEXT:    store ptr @.offload_maptypes.4, ptr [[TMP75]], align 4
4980 // CK23-NEXT:    [[TMP76:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 6
4981 // CK23-NEXT:    store ptr null, ptr [[TMP76]], align 4
4982 // CK23-NEXT:    [[TMP77:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 7
4983 // CK23-NEXT:    store ptr null, ptr [[TMP77]], align 4
4984 // CK23-NEXT:    [[TMP78:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 8
4985 // CK23-NEXT:    store i64 0, ptr [[TMP78]], align 8
4986 // CK23-NEXT:    [[TMP79:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 9
4987 // CK23-NEXT:    store i64 0, ptr [[TMP79]], align 8
4988 // CK23-NEXT:    [[TMP80:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 10
4989 // CK23-NEXT:    store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP80]], align 4
4990 // CK23-NEXT:    [[TMP81:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 11
4991 // CK23-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP81]], align 4
4992 // CK23-NEXT:    [[TMP82:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS14]], i32 0, i32 12
4993 // CK23-NEXT:    store i32 0, ptr [[TMP82]], align 4
4994 // 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]])
4995 // CK23-NEXT:    [[TMP84:%.*]] = icmp ne i32 [[TMP83]], 0
4996 // CK23-NEXT:    br i1 [[TMP84]], label [[OMP_OFFLOAD_FAILED15:%.*]], label [[OMP_OFFLOAD_CONT16:%.*]]
4997 // CK23:       omp_offload.failed15:
4998 // CK23-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l125(ptr [[THIS1]]) #[[ATTR2]]
4999 // CK23-NEXT:    br label [[OMP_OFFLOAD_CONT16]]
5000 // CK23:       omp_offload.cont16:
5001 // CK23-NEXT:    ret void
5002 //
5003 //
5004 // CK23-LABEL: define {{[^@]+}}@_ZN2STIdEC2ERPd
5005 // CK23-SAME: (ptr noundef nonnull align 4 dereferenceable(8) [[THIS:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[B:%.*]]) unnamed_addr #[[ATTR0]] comdat align 2 {
5006 // CK23-NEXT:  entry:
5007 // CK23-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 4
5008 // CK23-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 4
5009 // CK23-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 4
5010 // CK23-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 4
5011 // CK23-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4
5012 // CK23-NEXT:    [[A:%.*]] = getelementptr inbounds nuw [[STRUCT_ST:%.*]], ptr [[THIS1]], i32 0, i32 0
5013 // CK23-NEXT:    store ptr null, ptr [[A]], align 4
5014 // CK23-NEXT:    [[B2:%.*]] = getelementptr inbounds nuw [[STRUCT_ST]], ptr [[THIS1]], i32 0, i32 1
5015 // CK23-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 4
5016 // CK23-NEXT:    store ptr [[TMP0]], ptr [[B2]], align 4
5017 // CK23-NEXT:    ret void
5018 //
5019 //
5020 // CK23-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l112
5021 // CK23-SAME: (ptr noundef [[THIS:%.*]]) #[[ATTR1:[0-9]+]] {
5022 // CK23-NEXT:  entry:
5023 // CK23-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 4
5024 // CK23-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 4
5025 // CK23-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4
5026 // CK23-NEXT:    [[A:%.*]] = getelementptr inbounds nuw [[STRUCT_ST:%.*]], ptr [[TMP0]], i32 0, i32 0
5027 // CK23-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A]], align 4
5028 // CK23-NEXT:    [[INCDEC_PTR:%.*]] = getelementptr inbounds nuw double, ptr [[TMP1]], i32 1
5029 // CK23-NEXT:    store ptr [[INCDEC_PTR]], ptr [[A]], align 4
5030 // CK23-NEXT:    ret void
5031 //
5032 //
5033 // CK23-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l118
5034 // CK23-SAME: (ptr noundef [[THIS:%.*]]) #[[ATTR1]] {
5035 // CK23-NEXT:  entry:
5036 // CK23-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 4
5037 // CK23-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 4
5038 // CK23-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4
5039 // CK23-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ST:%.*]], ptr [[TMP0]], i32 0, i32 1
5040 // CK23-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[B]], align 4
5041 // CK23-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[TMP1]], align 4
5042 // CK23-NEXT:    [[INCDEC_PTR:%.*]] = getelementptr inbounds nuw double, ptr [[TMP2]], i32 1
5043 // CK23-NEXT:    store ptr [[INCDEC_PTR]], ptr [[TMP1]], align 4
5044 // CK23-NEXT:    ret void
5045 //
5046 //
5047 // CK23-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__ZN2STIdE3fooERPd_l125
5048 // CK23-SAME: (ptr noundef [[THIS:%.*]]) #[[ATTR1]] {
5049 // CK23-NEXT:  entry:
5050 // CK23-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 4
5051 // CK23-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 4
5052 // CK23-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4
5053 // CK23-NEXT:    [[A:%.*]] = getelementptr inbounds nuw [[STRUCT_ST:%.*]], ptr [[TMP0]], i32 0, i32 0
5054 // CK23-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A]], align 4
5055 // CK23-NEXT:    [[INCDEC_PTR:%.*]] = getelementptr inbounds nuw double, ptr [[TMP1]], i32 1
5056 // CK23-NEXT:    store ptr [[INCDEC_PTR]], ptr [[A]], align 4
5057 // CK23-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ST]], ptr [[TMP0]], i32 0, i32 1
5058 // CK23-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[B]], align 4
5059 // CK23-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[TMP2]], align 4
5060 // CK23-NEXT:    [[INCDEC_PTR1:%.*]] = getelementptr inbounds nuw double, ptr [[TMP3]], i32 1
5061 // CK23-NEXT:    store ptr [[INCDEC_PTR1]], ptr [[TMP2]], align 4
5062 // CK23-NEXT:    ret void
5063 //
5064 //
5065 // SIMD-ONLY10-LABEL: define {{[^@]+}}@_Z3barPd
5066 // SIMD-ONLY10-SAME: (ptr noundef [[ARG:%.*]]) #[[ATTR0:[0-9]+]] {
5067 // SIMD-ONLY10-NEXT:  entry:
5068 // SIMD-ONLY10-NEXT:    [[ARG_ADDR:%.*]] = alloca ptr, align 8
5069 // SIMD-ONLY10-NEXT:    [[A:%.*]] = alloca [[STRUCT_ST:%.*]], align 8
5070 // SIMD-ONLY10-NEXT:    store ptr [[ARG]], ptr [[ARG_ADDR]], align 8
5071 // SIMD-ONLY10-NEXT:    call void @_ZN2STIdEC1ERPd(ptr noundef nonnull align 8 dereferenceable(16) [[A]], ptr noundef nonnull align 8 dereferenceable(8) [[ARG_ADDR]])
5072 // SIMD-ONLY10-NEXT:    call void @_ZN2STIdE3fooERPd(ptr noundef nonnull align 8 dereferenceable(16) [[A]], ptr noundef nonnull align 8 dereferenceable(8) [[ARG_ADDR]])
5073 // SIMD-ONLY10-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[ARG_ADDR]], align 8
5074 // SIMD-ONLY10-NEXT:    [[INCDEC_PTR:%.*]] = getelementptr inbounds nuw double, ptr [[TMP0]], i32 1
5075 // SIMD-ONLY10-NEXT:    store ptr [[INCDEC_PTR]], ptr [[ARG_ADDR]], align 8
5076 // SIMD-ONLY10-NEXT:    ret void
5077 //
5078 //
5079 // SIMD-ONLY10-LABEL: define {{[^@]+}}@_ZN2STIdEC1ERPd
5080 // SIMD-ONLY10-SAME: (ptr noundef nonnull align 8 dereferenceable(16) [[THIS:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[B:%.*]]) unnamed_addr #[[ATTR0]] comdat {
5081 // SIMD-ONLY10-NEXT:  entry:
5082 // SIMD-ONLY10-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 8
5083 // SIMD-ONLY10-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 8
5084 // SIMD-ONLY10-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 8
5085 // SIMD-ONLY10-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 8
5086 // SIMD-ONLY10-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8
5087 // SIMD-ONLY10-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 8
5088 // SIMD-ONLY10-NEXT:    call void @_ZN2STIdEC2ERPd(ptr noundef nonnull align 8 dereferenceable(16) [[THIS1]], ptr noundef nonnull align 8 dereferenceable(8) [[TMP0]])
5089 // SIMD-ONLY10-NEXT:    ret void
5090 //
5091 //
5092 // SIMD-ONLY10-LABEL: define {{[^@]+}}@_ZN2STIdE3fooERPd
5093 // SIMD-ONLY10-SAME: (ptr noundef nonnull align 8 dereferenceable(16) [[THIS:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[ARG:%.*]]) #[[ATTR0]] comdat {
5094 // SIMD-ONLY10-NEXT:  entry:
5095 // SIMD-ONLY10-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 8
5096 // SIMD-ONLY10-NEXT:    [[ARG_ADDR:%.*]] = alloca ptr, align 8
5097 // SIMD-ONLY10-NEXT:    [[LA:%.*]] = alloca ptr, align 8
5098 // SIMD-ONLY10-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 8
5099 // SIMD-ONLY10-NEXT:    store ptr [[ARG]], ptr [[ARG_ADDR]], align 8
5100 // SIMD-ONLY10-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8
5101 // SIMD-ONLY10-NEXT:    store ptr null, ptr [[LA]], align 8
5102 // SIMD-ONLY10-NEXT:    [[A:%.*]] = getelementptr inbounds nuw [[STRUCT_ST:%.*]], ptr [[THIS1]], i32 0, i32 0
5103 // SIMD-ONLY10-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[A]], align 8
5104 // SIMD-ONLY10-NEXT:    [[INCDEC_PTR:%.*]] = getelementptr inbounds nuw double, ptr [[TMP0]], i32 1
5105 // SIMD-ONLY10-NEXT:    store ptr [[INCDEC_PTR]], ptr [[A]], align 8
5106 // SIMD-ONLY10-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ST]], ptr [[THIS1]], i32 0, i32 1
5107 // SIMD-ONLY10-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[B]], align 8
5108 // SIMD-ONLY10-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[TMP1]], align 8
5109 // SIMD-ONLY10-NEXT:    [[INCDEC_PTR2:%.*]] = getelementptr inbounds nuw double, ptr [[TMP2]], i32 1
5110 // SIMD-ONLY10-NEXT:    store ptr [[INCDEC_PTR2]], ptr [[TMP1]], align 8
5111 // SIMD-ONLY10-NEXT:    [[A3:%.*]] = getelementptr inbounds nuw [[STRUCT_ST]], ptr [[THIS1]], i32 0, i32 0
5112 // SIMD-ONLY10-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[A3]], align 8
5113 // SIMD-ONLY10-NEXT:    [[INCDEC_PTR4:%.*]] = getelementptr inbounds nuw double, ptr [[TMP3]], i32 1
5114 // SIMD-ONLY10-NEXT:    store ptr [[INCDEC_PTR4]], ptr [[A3]], align 8
5115 // SIMD-ONLY10-NEXT:    [[B5:%.*]] = getelementptr inbounds nuw [[STRUCT_ST]], ptr [[THIS1]], i32 0, i32 1
5116 // SIMD-ONLY10-NEXT:    [[TMP4:%.*]] = load ptr, ptr [[B5]], align 8
5117 // SIMD-ONLY10-NEXT:    [[TMP5:%.*]] = load ptr, ptr [[TMP4]], align 8
5118 // SIMD-ONLY10-NEXT:    [[INCDEC_PTR6:%.*]] = getelementptr inbounds nuw double, ptr [[TMP5]], i32 1
5119 // SIMD-ONLY10-NEXT:    store ptr [[INCDEC_PTR6]], ptr [[TMP4]], align 8
5120 // SIMD-ONLY10-NEXT:    ret void
5121 //
5122 //
5123 // SIMD-ONLY10-LABEL: define {{[^@]+}}@_ZN2STIdEC2ERPd
5124 // SIMD-ONLY10-SAME: (ptr noundef nonnull align 8 dereferenceable(16) [[THIS:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[B:%.*]]) unnamed_addr #[[ATTR0]] comdat {
5125 // SIMD-ONLY10-NEXT:  entry:
5126 // SIMD-ONLY10-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 8
5127 // SIMD-ONLY10-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 8
5128 // SIMD-ONLY10-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 8
5129 // SIMD-ONLY10-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 8
5130 // SIMD-ONLY10-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8
5131 // SIMD-ONLY10-NEXT:    [[A:%.*]] = getelementptr inbounds nuw [[STRUCT_ST:%.*]], ptr [[THIS1]], i32 0, i32 0
5132 // SIMD-ONLY10-NEXT:    store ptr null, ptr [[A]], align 8
5133 // SIMD-ONLY10-NEXT:    [[B2:%.*]] = getelementptr inbounds nuw [[STRUCT_ST]], ptr [[THIS1]], i32 0, i32 1
5134 // SIMD-ONLY10-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 8
5135 // SIMD-ONLY10-NEXT:    store ptr [[TMP0]], ptr [[B2]], align 8
5136 // SIMD-ONLY10-NEXT:    ret void
5137 //
5138 //
5139 // SIMD-ONLY11-LABEL: define {{[^@]+}}@_Z3barPd
5140 // SIMD-ONLY11-SAME: (ptr noundef [[ARG:%.*]]) #[[ATTR0:[0-9]+]] {
5141 // SIMD-ONLY11-NEXT:  entry:
5142 // SIMD-ONLY11-NEXT:    [[ARG_ADDR:%.*]] = alloca ptr, align 8
5143 // SIMD-ONLY11-NEXT:    [[A:%.*]] = alloca [[STRUCT_ST:%.*]], align 8
5144 // SIMD-ONLY11-NEXT:    store ptr [[ARG]], ptr [[ARG_ADDR]], align 8
5145 // SIMD-ONLY11-NEXT:    call void @_ZN2STIdEC1ERPd(ptr noundef nonnull align 8 dereferenceable(16) [[A]], ptr noundef nonnull align 8 dereferenceable(8) [[ARG_ADDR]])
5146 // SIMD-ONLY11-NEXT:    call void @_ZN2STIdE3fooERPd(ptr noundef nonnull align 8 dereferenceable(16) [[A]], ptr noundef nonnull align 8 dereferenceable(8) [[ARG_ADDR]])
5147 // SIMD-ONLY11-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[ARG_ADDR]], align 8
5148 // SIMD-ONLY11-NEXT:    [[INCDEC_PTR:%.*]] = getelementptr inbounds nuw double, ptr [[TMP0]], i32 1
5149 // SIMD-ONLY11-NEXT:    store ptr [[INCDEC_PTR]], ptr [[ARG_ADDR]], align 8
5150 // SIMD-ONLY11-NEXT:    ret void
5151 //
5152 //
5153 // SIMD-ONLY11-LABEL: define {{[^@]+}}@_ZN2STIdEC1ERPd
5154 // SIMD-ONLY11-SAME: (ptr noundef nonnull align 8 dereferenceable(16) [[THIS:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[B:%.*]]) unnamed_addr #[[ATTR0]] comdat {
5155 // SIMD-ONLY11-NEXT:  entry:
5156 // SIMD-ONLY11-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 8
5157 // SIMD-ONLY11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 8
5158 // SIMD-ONLY11-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 8
5159 // SIMD-ONLY11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 8
5160 // SIMD-ONLY11-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8
5161 // SIMD-ONLY11-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 8
5162 // SIMD-ONLY11-NEXT:    call void @_ZN2STIdEC2ERPd(ptr noundef nonnull align 8 dereferenceable(16) [[THIS1]], ptr noundef nonnull align 8 dereferenceable(8) [[TMP0]])
5163 // SIMD-ONLY11-NEXT:    ret void
5164 //
5165 //
5166 // SIMD-ONLY11-LABEL: define {{[^@]+}}@_ZN2STIdE3fooERPd
5167 // SIMD-ONLY11-SAME: (ptr noundef nonnull align 8 dereferenceable(16) [[THIS:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[ARG:%.*]]) #[[ATTR0]] comdat {
5168 // SIMD-ONLY11-NEXT:  entry:
5169 // SIMD-ONLY11-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 8
5170 // SIMD-ONLY11-NEXT:    [[ARG_ADDR:%.*]] = alloca ptr, align 8
5171 // SIMD-ONLY11-NEXT:    [[LA:%.*]] = alloca ptr, align 8
5172 // SIMD-ONLY11-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 8
5173 // SIMD-ONLY11-NEXT:    store ptr [[ARG]], ptr [[ARG_ADDR]], align 8
5174 // SIMD-ONLY11-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8
5175 // SIMD-ONLY11-NEXT:    store ptr null, ptr [[LA]], align 8
5176 // SIMD-ONLY11-NEXT:    [[A:%.*]] = getelementptr inbounds nuw [[STRUCT_ST:%.*]], ptr [[THIS1]], i32 0, i32 0
5177 // SIMD-ONLY11-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[A]], align 8
5178 // SIMD-ONLY11-NEXT:    [[INCDEC_PTR:%.*]] = getelementptr inbounds nuw double, ptr [[TMP0]], i32 1
5179 // SIMD-ONLY11-NEXT:    store ptr [[INCDEC_PTR]], ptr [[A]], align 8
5180 // SIMD-ONLY11-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ST]], ptr [[THIS1]], i32 0, i32 1
5181 // SIMD-ONLY11-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[B]], align 8
5182 // SIMD-ONLY11-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[TMP1]], align 8
5183 // SIMD-ONLY11-NEXT:    [[INCDEC_PTR2:%.*]] = getelementptr inbounds nuw double, ptr [[TMP2]], i32 1
5184 // SIMD-ONLY11-NEXT:    store ptr [[INCDEC_PTR2]], ptr [[TMP1]], align 8
5185 // SIMD-ONLY11-NEXT:    [[A3:%.*]] = getelementptr inbounds nuw [[STRUCT_ST]], ptr [[THIS1]], i32 0, i32 0
5186 // SIMD-ONLY11-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[A3]], align 8
5187 // SIMD-ONLY11-NEXT:    [[INCDEC_PTR4:%.*]] = getelementptr inbounds nuw double, ptr [[TMP3]], i32 1
5188 // SIMD-ONLY11-NEXT:    store ptr [[INCDEC_PTR4]], ptr [[A3]], align 8
5189 // SIMD-ONLY11-NEXT:    [[B5:%.*]] = getelementptr inbounds nuw [[STRUCT_ST]], ptr [[THIS1]], i32 0, i32 1
5190 // SIMD-ONLY11-NEXT:    [[TMP4:%.*]] = load ptr, ptr [[B5]], align 8
5191 // SIMD-ONLY11-NEXT:    [[TMP5:%.*]] = load ptr, ptr [[TMP4]], align 8
5192 // SIMD-ONLY11-NEXT:    [[INCDEC_PTR6:%.*]] = getelementptr inbounds nuw double, ptr [[TMP5]], i32 1
5193 // SIMD-ONLY11-NEXT:    store ptr [[INCDEC_PTR6]], ptr [[TMP4]], align 8
5194 // SIMD-ONLY11-NEXT:    ret void
5195 //
5196 //
5197 // SIMD-ONLY11-LABEL: define {{[^@]+}}@_ZN2STIdEC2ERPd
5198 // SIMD-ONLY11-SAME: (ptr noundef nonnull align 8 dereferenceable(16) [[THIS:%.*]], ptr noundef nonnull align 8 dereferenceable(8) [[B:%.*]]) unnamed_addr #[[ATTR0]] comdat {
5199 // SIMD-ONLY11-NEXT:  entry:
5200 // SIMD-ONLY11-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 8
5201 // SIMD-ONLY11-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 8
5202 // SIMD-ONLY11-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 8
5203 // SIMD-ONLY11-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 8
5204 // SIMD-ONLY11-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 8
5205 // SIMD-ONLY11-NEXT:    [[A:%.*]] = getelementptr inbounds nuw [[STRUCT_ST:%.*]], ptr [[THIS1]], i32 0, i32 0
5206 // SIMD-ONLY11-NEXT:    store ptr null, ptr [[A]], align 8
5207 // SIMD-ONLY11-NEXT:    [[B2:%.*]] = getelementptr inbounds nuw [[STRUCT_ST]], ptr [[THIS1]], i32 0, i32 1
5208 // SIMD-ONLY11-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 8
5209 // SIMD-ONLY11-NEXT:    store ptr [[TMP0]], ptr [[B2]], align 8
5210 // SIMD-ONLY11-NEXT:    ret void
5211 //
5212 //
5213 // SIMD-ONLY12-LABEL: define {{[^@]+}}@_Z3barPd
5214 // SIMD-ONLY12-SAME: (ptr noundef [[ARG:%.*]]) #[[ATTR0:[0-9]+]] {
5215 // SIMD-ONLY12-NEXT:  entry:
5216 // SIMD-ONLY12-NEXT:    [[ARG_ADDR:%.*]] = alloca ptr, align 4
5217 // SIMD-ONLY12-NEXT:    [[A:%.*]] = alloca [[STRUCT_ST:%.*]], align 4
5218 // SIMD-ONLY12-NEXT:    store ptr [[ARG]], ptr [[ARG_ADDR]], align 4
5219 // SIMD-ONLY12-NEXT:    call void @_ZN2STIdEC1ERPd(ptr noundef nonnull align 4 dereferenceable(8) [[A]], ptr noundef nonnull align 4 dereferenceable(4) [[ARG_ADDR]])
5220 // SIMD-ONLY12-NEXT:    call void @_ZN2STIdE3fooERPd(ptr noundef nonnull align 4 dereferenceable(8) [[A]], ptr noundef nonnull align 4 dereferenceable(4) [[ARG_ADDR]])
5221 // SIMD-ONLY12-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[ARG_ADDR]], align 4
5222 // SIMD-ONLY12-NEXT:    [[INCDEC_PTR:%.*]] = getelementptr inbounds nuw double, ptr [[TMP0]], i32 1
5223 // SIMD-ONLY12-NEXT:    store ptr [[INCDEC_PTR]], ptr [[ARG_ADDR]], align 4
5224 // SIMD-ONLY12-NEXT:    ret void
5225 //
5226 //
5227 // SIMD-ONLY12-LABEL: define {{[^@]+}}@_ZN2STIdEC1ERPd
5228 // SIMD-ONLY12-SAME: (ptr noundef nonnull align 4 dereferenceable(8) [[THIS:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[B:%.*]]) unnamed_addr #[[ATTR0]] comdat align 2 {
5229 // SIMD-ONLY12-NEXT:  entry:
5230 // SIMD-ONLY12-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 4
5231 // SIMD-ONLY12-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 4
5232 // SIMD-ONLY12-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 4
5233 // SIMD-ONLY12-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 4
5234 // SIMD-ONLY12-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4
5235 // SIMD-ONLY12-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 4
5236 // SIMD-ONLY12-NEXT:    call void @_ZN2STIdEC2ERPd(ptr noundef nonnull align 4 dereferenceable(8) [[THIS1]], ptr noundef nonnull align 4 dereferenceable(4) [[TMP0]])
5237 // SIMD-ONLY12-NEXT:    ret void
5238 //
5239 //
5240 // SIMD-ONLY12-LABEL: define {{[^@]+}}@_ZN2STIdE3fooERPd
5241 // SIMD-ONLY12-SAME: (ptr noundef nonnull align 4 dereferenceable(8) [[THIS:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[ARG:%.*]]) #[[ATTR0]] comdat align 2 {
5242 // SIMD-ONLY12-NEXT:  entry:
5243 // SIMD-ONLY12-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 4
5244 // SIMD-ONLY12-NEXT:    [[ARG_ADDR:%.*]] = alloca ptr, align 4
5245 // SIMD-ONLY12-NEXT:    [[LA:%.*]] = alloca ptr, align 4
5246 // SIMD-ONLY12-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 4
5247 // SIMD-ONLY12-NEXT:    store ptr [[ARG]], ptr [[ARG_ADDR]], align 4
5248 // SIMD-ONLY12-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4
5249 // SIMD-ONLY12-NEXT:    store ptr null, ptr [[LA]], align 4
5250 // SIMD-ONLY12-NEXT:    [[A:%.*]] = getelementptr inbounds nuw [[STRUCT_ST:%.*]], ptr [[THIS1]], i32 0, i32 0
5251 // SIMD-ONLY12-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[A]], align 4
5252 // SIMD-ONLY12-NEXT:    [[INCDEC_PTR:%.*]] = getelementptr inbounds nuw double, ptr [[TMP0]], i32 1
5253 // SIMD-ONLY12-NEXT:    store ptr [[INCDEC_PTR]], ptr [[A]], align 4
5254 // SIMD-ONLY12-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ST]], ptr [[THIS1]], i32 0, i32 1
5255 // SIMD-ONLY12-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[B]], align 4
5256 // SIMD-ONLY12-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[TMP1]], align 4
5257 // SIMD-ONLY12-NEXT:    [[INCDEC_PTR2:%.*]] = getelementptr inbounds nuw double, ptr [[TMP2]], i32 1
5258 // SIMD-ONLY12-NEXT:    store ptr [[INCDEC_PTR2]], ptr [[TMP1]], align 4
5259 // SIMD-ONLY12-NEXT:    [[A3:%.*]] = getelementptr inbounds nuw [[STRUCT_ST]], ptr [[THIS1]], i32 0, i32 0
5260 // SIMD-ONLY12-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[A3]], align 4
5261 // SIMD-ONLY12-NEXT:    [[INCDEC_PTR4:%.*]] = getelementptr inbounds nuw double, ptr [[TMP3]], i32 1
5262 // SIMD-ONLY12-NEXT:    store ptr [[INCDEC_PTR4]], ptr [[A3]], align 4
5263 // SIMD-ONLY12-NEXT:    [[B5:%.*]] = getelementptr inbounds nuw [[STRUCT_ST]], ptr [[THIS1]], i32 0, i32 1
5264 // SIMD-ONLY12-NEXT:    [[TMP4:%.*]] = load ptr, ptr [[B5]], align 4
5265 // SIMD-ONLY12-NEXT:    [[TMP5:%.*]] = load ptr, ptr [[TMP4]], align 4
5266 // SIMD-ONLY12-NEXT:    [[INCDEC_PTR6:%.*]] = getelementptr inbounds nuw double, ptr [[TMP5]], i32 1
5267 // SIMD-ONLY12-NEXT:    store ptr [[INCDEC_PTR6]], ptr [[TMP4]], align 4
5268 // SIMD-ONLY12-NEXT:    ret void
5269 //
5270 //
5271 // SIMD-ONLY12-LABEL: define {{[^@]+}}@_ZN2STIdEC2ERPd
5272 // SIMD-ONLY12-SAME: (ptr noundef nonnull align 4 dereferenceable(8) [[THIS:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[B:%.*]]) unnamed_addr #[[ATTR0]] comdat align 2 {
5273 // SIMD-ONLY12-NEXT:  entry:
5274 // SIMD-ONLY12-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 4
5275 // SIMD-ONLY12-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 4
5276 // SIMD-ONLY12-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 4
5277 // SIMD-ONLY12-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 4
5278 // SIMD-ONLY12-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4
5279 // SIMD-ONLY12-NEXT:    [[A:%.*]] = getelementptr inbounds nuw [[STRUCT_ST:%.*]], ptr [[THIS1]], i32 0, i32 0
5280 // SIMD-ONLY12-NEXT:    store ptr null, ptr [[A]], align 4
5281 // SIMD-ONLY12-NEXT:    [[B2:%.*]] = getelementptr inbounds nuw [[STRUCT_ST]], ptr [[THIS1]], i32 0, i32 1
5282 // SIMD-ONLY12-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 4
5283 // SIMD-ONLY12-NEXT:    store ptr [[TMP0]], ptr [[B2]], align 4
5284 // SIMD-ONLY12-NEXT:    ret void
5285 //
5286 //
5287 // SIMD-ONLY13-LABEL: define {{[^@]+}}@_Z3barPd
5288 // SIMD-ONLY13-SAME: (ptr noundef [[ARG:%.*]]) #[[ATTR0:[0-9]+]] {
5289 // SIMD-ONLY13-NEXT:  entry:
5290 // SIMD-ONLY13-NEXT:    [[ARG_ADDR:%.*]] = alloca ptr, align 4
5291 // SIMD-ONLY13-NEXT:    [[A:%.*]] = alloca [[STRUCT_ST:%.*]], align 4
5292 // SIMD-ONLY13-NEXT:    store ptr [[ARG]], ptr [[ARG_ADDR]], align 4
5293 // SIMD-ONLY13-NEXT:    call void @_ZN2STIdEC1ERPd(ptr noundef nonnull align 4 dereferenceable(8) [[A]], ptr noundef nonnull align 4 dereferenceable(4) [[ARG_ADDR]])
5294 // SIMD-ONLY13-NEXT:    call void @_ZN2STIdE3fooERPd(ptr noundef nonnull align 4 dereferenceable(8) [[A]], ptr noundef nonnull align 4 dereferenceable(4) [[ARG_ADDR]])
5295 // SIMD-ONLY13-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[ARG_ADDR]], align 4
5296 // SIMD-ONLY13-NEXT:    [[INCDEC_PTR:%.*]] = getelementptr inbounds nuw double, ptr [[TMP0]], i32 1
5297 // SIMD-ONLY13-NEXT:    store ptr [[INCDEC_PTR]], ptr [[ARG_ADDR]], align 4
5298 // SIMD-ONLY13-NEXT:    ret void
5299 //
5300 //
5301 // SIMD-ONLY13-LABEL: define {{[^@]+}}@_ZN2STIdEC1ERPd
5302 // SIMD-ONLY13-SAME: (ptr noundef nonnull align 4 dereferenceable(8) [[THIS:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[B:%.*]]) unnamed_addr #[[ATTR0]] comdat align 2 {
5303 // SIMD-ONLY13-NEXT:  entry:
5304 // SIMD-ONLY13-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 4
5305 // SIMD-ONLY13-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 4
5306 // SIMD-ONLY13-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 4
5307 // SIMD-ONLY13-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 4
5308 // SIMD-ONLY13-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4
5309 // SIMD-ONLY13-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 4
5310 // SIMD-ONLY13-NEXT:    call void @_ZN2STIdEC2ERPd(ptr noundef nonnull align 4 dereferenceable(8) [[THIS1]], ptr noundef nonnull align 4 dereferenceable(4) [[TMP0]])
5311 // SIMD-ONLY13-NEXT:    ret void
5312 //
5313 //
5314 // SIMD-ONLY13-LABEL: define {{[^@]+}}@_ZN2STIdE3fooERPd
5315 // SIMD-ONLY13-SAME: (ptr noundef nonnull align 4 dereferenceable(8) [[THIS:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[ARG:%.*]]) #[[ATTR0]] comdat align 2 {
5316 // SIMD-ONLY13-NEXT:  entry:
5317 // SIMD-ONLY13-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 4
5318 // SIMD-ONLY13-NEXT:    [[ARG_ADDR:%.*]] = alloca ptr, align 4
5319 // SIMD-ONLY13-NEXT:    [[LA:%.*]] = alloca ptr, align 4
5320 // SIMD-ONLY13-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 4
5321 // SIMD-ONLY13-NEXT:    store ptr [[ARG]], ptr [[ARG_ADDR]], align 4
5322 // SIMD-ONLY13-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4
5323 // SIMD-ONLY13-NEXT:    store ptr null, ptr [[LA]], align 4
5324 // SIMD-ONLY13-NEXT:    [[A:%.*]] = getelementptr inbounds nuw [[STRUCT_ST:%.*]], ptr [[THIS1]], i32 0, i32 0
5325 // SIMD-ONLY13-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[A]], align 4
5326 // SIMD-ONLY13-NEXT:    [[INCDEC_PTR:%.*]] = getelementptr inbounds nuw double, ptr [[TMP0]], i32 1
5327 // SIMD-ONLY13-NEXT:    store ptr [[INCDEC_PTR]], ptr [[A]], align 4
5328 // SIMD-ONLY13-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ST]], ptr [[THIS1]], i32 0, i32 1
5329 // SIMD-ONLY13-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[B]], align 4
5330 // SIMD-ONLY13-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[TMP1]], align 4
5331 // SIMD-ONLY13-NEXT:    [[INCDEC_PTR2:%.*]] = getelementptr inbounds nuw double, ptr [[TMP2]], i32 1
5332 // SIMD-ONLY13-NEXT:    store ptr [[INCDEC_PTR2]], ptr [[TMP1]], align 4
5333 // SIMD-ONLY13-NEXT:    [[A3:%.*]] = getelementptr inbounds nuw [[STRUCT_ST]], ptr [[THIS1]], i32 0, i32 0
5334 // SIMD-ONLY13-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[A3]], align 4
5335 // SIMD-ONLY13-NEXT:    [[INCDEC_PTR4:%.*]] = getelementptr inbounds nuw double, ptr [[TMP3]], i32 1
5336 // SIMD-ONLY13-NEXT:    store ptr [[INCDEC_PTR4]], ptr [[A3]], align 4
5337 // SIMD-ONLY13-NEXT:    [[B5:%.*]] = getelementptr inbounds nuw [[STRUCT_ST]], ptr [[THIS1]], i32 0, i32 1
5338 // SIMD-ONLY13-NEXT:    [[TMP4:%.*]] = load ptr, ptr [[B5]], align 4
5339 // SIMD-ONLY13-NEXT:    [[TMP5:%.*]] = load ptr, ptr [[TMP4]], align 4
5340 // SIMD-ONLY13-NEXT:    [[INCDEC_PTR6:%.*]] = getelementptr inbounds nuw double, ptr [[TMP5]], i32 1
5341 // SIMD-ONLY13-NEXT:    store ptr [[INCDEC_PTR6]], ptr [[TMP4]], align 4
5342 // SIMD-ONLY13-NEXT:    ret void
5343 //
5344 //
5345 // SIMD-ONLY13-LABEL: define {{[^@]+}}@_ZN2STIdEC2ERPd
5346 // SIMD-ONLY13-SAME: (ptr noundef nonnull align 4 dereferenceable(8) [[THIS:%.*]], ptr noundef nonnull align 4 dereferenceable(4) [[B:%.*]]) unnamed_addr #[[ATTR0]] comdat align 2 {
5347 // SIMD-ONLY13-NEXT:  entry:
5348 // SIMD-ONLY13-NEXT:    [[THIS_ADDR:%.*]] = alloca ptr, align 4
5349 // SIMD-ONLY13-NEXT:    [[B_ADDR:%.*]] = alloca ptr, align 4
5350 // SIMD-ONLY13-NEXT:    store ptr [[THIS]], ptr [[THIS_ADDR]], align 4
5351 // SIMD-ONLY13-NEXT:    store ptr [[B]], ptr [[B_ADDR]], align 4
5352 // SIMD-ONLY13-NEXT:    [[THIS1:%.*]] = load ptr, ptr [[THIS_ADDR]], align 4
5353 // SIMD-ONLY13-NEXT:    [[A:%.*]] = getelementptr inbounds nuw [[STRUCT_ST:%.*]], ptr [[THIS1]], i32 0, i32 0
5354 // SIMD-ONLY13-NEXT:    store ptr null, ptr [[A]], align 4
5355 // SIMD-ONLY13-NEXT:    [[B2:%.*]] = getelementptr inbounds nuw [[STRUCT_ST]], ptr [[THIS1]], i32 0, i32 1
5356 // SIMD-ONLY13-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[B_ADDR]], align 4
5357 // SIMD-ONLY13-NEXT:    store ptr [[TMP0]], ptr [[B2]], align 4
5358 // SIMD-ONLY13-NEXT:    ret void
5359 //
5360 //
5361 // CK30-LABEL: define {{[^@]+}}@_Z3barv
5362 // CK30-SAME: () #[[ATTR0:[0-9]+]] {
5363 // CK30-NEXT:  entry:
5364 // CK30-NEXT:    [[PTR:%.*]] = alloca ptr, align 64
5365 // CK30-NEXT:    [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 8
5366 // CK30-NEXT:    [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 8
5367 // CK30-NEXT:    [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 8
5368 // CK30-NEXT:    [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8
5369 // CK30-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[PTR]], align 64
5370 // CK30-NEXT:    [[TMP1:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
5371 // CK30-NEXT:    store ptr [[TMP0]], ptr [[TMP1]], align 8
5372 // CK30-NEXT:    [[TMP2:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0
5373 // CK30-NEXT:    store ptr [[TMP0]], ptr [[TMP2]], align 8
5374 // CK30-NEXT:    [[TMP3:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
5375 // CK30-NEXT:    store ptr null, ptr [[TMP3]], align 8
5376 // CK30-NEXT:    [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
5377 // CK30-NEXT:    [[TMP5:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0
5378 // CK30-NEXT:    [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0
5379 // CK30-NEXT:    store i32 3, ptr [[TMP6]], align 4
5380 // CK30-NEXT:    [[TMP7:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1
5381 // CK30-NEXT:    store i32 1, ptr [[TMP7]], align 4
5382 // CK30-NEXT:    [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2
5383 // CK30-NEXT:    store ptr [[TMP4]], ptr [[TMP8]], align 8
5384 // CK30-NEXT:    [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3
5385 // CK30-NEXT:    store ptr [[TMP5]], ptr [[TMP9]], align 8
5386 // CK30-NEXT:    [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4
5387 // CK30-NEXT:    store ptr @.offload_sizes, ptr [[TMP10]], align 8
5388 // CK30-NEXT:    [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5
5389 // CK30-NEXT:    store ptr @.offload_maptypes, ptr [[TMP11]], align 8
5390 // CK30-NEXT:    [[TMP12:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6
5391 // CK30-NEXT:    store ptr null, ptr [[TMP12]], align 8
5392 // CK30-NEXT:    [[TMP13:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7
5393 // CK30-NEXT:    store ptr null, ptr [[TMP13]], align 8
5394 // CK30-NEXT:    [[TMP14:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8
5395 // CK30-NEXT:    store i64 0, ptr [[TMP14]], align 8
5396 // CK30-NEXT:    [[TMP15:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9
5397 // CK30-NEXT:    store i64 0, ptr [[TMP15]], align 8
5398 // CK30-NEXT:    [[TMP16:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10
5399 // CK30-NEXT:    store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP16]], align 4
5400 // CK30-NEXT:    [[TMP17:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11
5401 // CK30-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP17]], align 4
5402 // CK30-NEXT:    [[TMP18:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12
5403 // CK30-NEXT:    store i32 0, ptr [[TMP18]], align 4
5404 // 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]])
5405 // CK30-NEXT:    [[TMP20:%.*]] = icmp ne i32 [[TMP19]], 0
5406 // CK30-NEXT:    br i1 [[TMP20]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
5407 // CK30:       omp_offload.failed:
5408 // CK30-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3barv_l159(ptr [[TMP0]]) #[[ATTR2:[0-9]+]]
5409 // CK30-NEXT:    br label [[OMP_OFFLOAD_CONT]]
5410 // CK30:       omp_offload.cont:
5411 // CK30-NEXT:    ret void
5412 //
5413 //
5414 // CK30-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3barv_l159
5415 // CK30-SAME: (ptr noundef [[PTR:%.*]]) #[[ATTR1:[0-9]+]] {
5416 // CK30-NEXT:  entry:
5417 // CK30-NEXT:    [[PTR_ADDR:%.*]] = alloca ptr, align 8
5418 // CK30-NEXT:    store ptr [[PTR]], ptr [[PTR_ADDR]], align 8
5419 // CK30-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[PTR_ADDR]], align 8
5420 // CK30-NEXT:    store double 0.000000e+00, ptr [[TMP0]], align 8
5421 // CK30-NEXT:    ret void
5422 //
5423 //
5424 // CK31-LABEL: define {{[^@]+}}@_Z3barv
5425 // CK31-SAME: () #[[ATTR0:[0-9]+]] {
5426 // CK31-NEXT:  entry:
5427 // CK31-NEXT:    [[PTR:%.*]] = alloca ptr, align 64
5428 // CK31-NEXT:    [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 8
5429 // CK31-NEXT:    [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 8
5430 // CK31-NEXT:    [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 8
5431 // CK31-NEXT:    [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8
5432 // CK31-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[PTR]], align 64
5433 // CK31-NEXT:    [[TMP1:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
5434 // CK31-NEXT:    store ptr [[TMP0]], ptr [[TMP1]], align 8
5435 // CK31-NEXT:    [[TMP2:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0
5436 // CK31-NEXT:    store ptr [[TMP0]], ptr [[TMP2]], align 8
5437 // CK31-NEXT:    [[TMP3:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i64 0, i64 0
5438 // CK31-NEXT:    store ptr null, ptr [[TMP3]], align 8
5439 // CK31-NEXT:    [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
5440 // CK31-NEXT:    [[TMP5:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0
5441 // CK31-NEXT:    [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0
5442 // CK31-NEXT:    store i32 3, ptr [[TMP6]], align 4
5443 // CK31-NEXT:    [[TMP7:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1
5444 // CK31-NEXT:    store i32 1, ptr [[TMP7]], align 4
5445 // CK31-NEXT:    [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2
5446 // CK31-NEXT:    store ptr [[TMP4]], ptr [[TMP8]], align 8
5447 // CK31-NEXT:    [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3
5448 // CK31-NEXT:    store ptr [[TMP5]], ptr [[TMP9]], align 8
5449 // CK31-NEXT:    [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4
5450 // CK31-NEXT:    store ptr @.offload_sizes, ptr [[TMP10]], align 8
5451 // CK31-NEXT:    [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5
5452 // CK31-NEXT:    store ptr @.offload_maptypes, ptr [[TMP11]], align 8
5453 // CK31-NEXT:    [[TMP12:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6
5454 // CK31-NEXT:    store ptr null, ptr [[TMP12]], align 8
5455 // CK31-NEXT:    [[TMP13:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7
5456 // CK31-NEXT:    store ptr null, ptr [[TMP13]], align 8
5457 // CK31-NEXT:    [[TMP14:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8
5458 // CK31-NEXT:    store i64 0, ptr [[TMP14]], align 8
5459 // CK31-NEXT:    [[TMP15:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9
5460 // CK31-NEXT:    store i64 0, ptr [[TMP15]], align 8
5461 // CK31-NEXT:    [[TMP16:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10
5462 // CK31-NEXT:    store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP16]], align 4
5463 // CK31-NEXT:    [[TMP17:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11
5464 // CK31-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP17]], align 4
5465 // CK31-NEXT:    [[TMP18:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12
5466 // CK31-NEXT:    store i32 0, ptr [[TMP18]], align 4
5467 // 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]])
5468 // CK31-NEXT:    [[TMP20:%.*]] = icmp ne i32 [[TMP19]], 0
5469 // CK31-NEXT:    br i1 [[TMP20]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
5470 // CK31:       omp_offload.failed:
5471 // CK31-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3barv_l159(ptr [[TMP0]]) #[[ATTR2:[0-9]+]]
5472 // CK31-NEXT:    br label [[OMP_OFFLOAD_CONT]]
5473 // CK31:       omp_offload.cont:
5474 // CK31-NEXT:    ret void
5475 //
5476 //
5477 // CK31-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3barv_l159
5478 // CK31-SAME: (ptr noundef [[PTR:%.*]]) #[[ATTR1:[0-9]+]] {
5479 // CK31-NEXT:  entry:
5480 // CK31-NEXT:    [[PTR_ADDR:%.*]] = alloca ptr, align 8
5481 // CK31-NEXT:    store ptr [[PTR]], ptr [[PTR_ADDR]], align 8
5482 // CK31-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[PTR_ADDR]], align 8
5483 // CK31-NEXT:    store double 0.000000e+00, ptr [[TMP0]], align 8
5484 // CK31-NEXT:    ret void
5485 //
5486 //
5487 // CK32-LABEL: define {{[^@]+}}@_Z3barv
5488 // CK32-SAME: () #[[ATTR0:[0-9]+]] {
5489 // CK32-NEXT:  entry:
5490 // CK32-NEXT:    [[PTR:%.*]] = alloca ptr, align 64
5491 // CK32-NEXT:    [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 4
5492 // CK32-NEXT:    [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 4
5493 // CK32-NEXT:    [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 4
5494 // CK32-NEXT:    [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8
5495 // CK32-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[PTR]], align 64
5496 // CK32-NEXT:    [[TMP1:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
5497 // CK32-NEXT:    store ptr [[TMP0]], ptr [[TMP1]], align 4
5498 // CK32-NEXT:    [[TMP2:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0
5499 // CK32-NEXT:    store ptr [[TMP0]], ptr [[TMP2]], align 4
5500 // CK32-NEXT:    [[TMP3:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
5501 // CK32-NEXT:    store ptr null, ptr [[TMP3]], align 4
5502 // CK32-NEXT:    [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
5503 // CK32-NEXT:    [[TMP5:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0
5504 // CK32-NEXT:    [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0
5505 // CK32-NEXT:    store i32 3, ptr [[TMP6]], align 4
5506 // CK32-NEXT:    [[TMP7:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1
5507 // CK32-NEXT:    store i32 1, ptr [[TMP7]], align 4
5508 // CK32-NEXT:    [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2
5509 // CK32-NEXT:    store ptr [[TMP4]], ptr [[TMP8]], align 4
5510 // CK32-NEXT:    [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3
5511 // CK32-NEXT:    store ptr [[TMP5]], ptr [[TMP9]], align 4
5512 // CK32-NEXT:    [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4
5513 // CK32-NEXT:    store ptr @.offload_sizes, ptr [[TMP10]], align 4
5514 // CK32-NEXT:    [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5
5515 // CK32-NEXT:    store ptr @.offload_maptypes, ptr [[TMP11]], align 4
5516 // CK32-NEXT:    [[TMP12:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6
5517 // CK32-NEXT:    store ptr null, ptr [[TMP12]], align 4
5518 // CK32-NEXT:    [[TMP13:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7
5519 // CK32-NEXT:    store ptr null, ptr [[TMP13]], align 4
5520 // CK32-NEXT:    [[TMP14:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8
5521 // CK32-NEXT:    store i64 0, ptr [[TMP14]], align 8
5522 // CK32-NEXT:    [[TMP15:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9
5523 // CK32-NEXT:    store i64 0, ptr [[TMP15]], align 8
5524 // CK32-NEXT:    [[TMP16:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10
5525 // CK32-NEXT:    store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP16]], align 4
5526 // CK32-NEXT:    [[TMP17:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11
5527 // CK32-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP17]], align 4
5528 // CK32-NEXT:    [[TMP18:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12
5529 // CK32-NEXT:    store i32 0, ptr [[TMP18]], align 4
5530 // 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]])
5531 // CK32-NEXT:    [[TMP20:%.*]] = icmp ne i32 [[TMP19]], 0
5532 // CK32-NEXT:    br i1 [[TMP20]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
5533 // CK32:       omp_offload.failed:
5534 // CK32-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3barv_l159(ptr [[TMP0]]) #[[ATTR2:[0-9]+]]
5535 // CK32-NEXT:    br label [[OMP_OFFLOAD_CONT]]
5536 // CK32:       omp_offload.cont:
5537 // CK32-NEXT:    ret void
5538 //
5539 //
5540 // CK32-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3barv_l159
5541 // CK32-SAME: (ptr noundef [[PTR:%.*]]) #[[ATTR1:[0-9]+]] {
5542 // CK32-NEXT:  entry:
5543 // CK32-NEXT:    [[PTR_ADDR:%.*]] = alloca ptr, align 4
5544 // CK32-NEXT:    store ptr [[PTR]], ptr [[PTR_ADDR]], align 4
5545 // CK32-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[PTR_ADDR]], align 4
5546 // CK32-NEXT:    store double 0.000000e+00, ptr [[TMP0]], align 4
5547 // CK32-NEXT:    ret void
5548 //
5549 //
5550 // CK33-LABEL: define {{[^@]+}}@_Z3barv
5551 // CK33-SAME: () #[[ATTR0:[0-9]+]] {
5552 // CK33-NEXT:  entry:
5553 // CK33-NEXT:    [[PTR:%.*]] = alloca ptr, align 64
5554 // CK33-NEXT:    [[DOTOFFLOAD_BASEPTRS:%.*]] = alloca [1 x ptr], align 4
5555 // CK33-NEXT:    [[DOTOFFLOAD_PTRS:%.*]] = alloca [1 x ptr], align 4
5556 // CK33-NEXT:    [[DOTOFFLOAD_MAPPERS:%.*]] = alloca [1 x ptr], align 4
5557 // CK33-NEXT:    [[KERNEL_ARGS:%.*]] = alloca [[STRUCT___TGT_KERNEL_ARGUMENTS:%.*]], align 8
5558 // CK33-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[PTR]], align 64
5559 // CK33-NEXT:    [[TMP1:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
5560 // CK33-NEXT:    store ptr [[TMP0]], ptr [[TMP1]], align 4
5561 // CK33-NEXT:    [[TMP2:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0
5562 // CK33-NEXT:    store ptr [[TMP0]], ptr [[TMP2]], align 4
5563 // CK33-NEXT:    [[TMP3:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_MAPPERS]], i32 0, i32 0
5564 // CK33-NEXT:    store ptr null, ptr [[TMP3]], align 4
5565 // CK33-NEXT:    [[TMP4:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_BASEPTRS]], i32 0, i32 0
5566 // CK33-NEXT:    [[TMP5:%.*]] = getelementptr inbounds [1 x ptr], ptr [[DOTOFFLOAD_PTRS]], i32 0, i32 0
5567 // CK33-NEXT:    [[TMP6:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 0
5568 // CK33-NEXT:    store i32 3, ptr [[TMP6]], align 4
5569 // CK33-NEXT:    [[TMP7:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 1
5570 // CK33-NEXT:    store i32 1, ptr [[TMP7]], align 4
5571 // CK33-NEXT:    [[TMP8:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 2
5572 // CK33-NEXT:    store ptr [[TMP4]], ptr [[TMP8]], align 4
5573 // CK33-NEXT:    [[TMP9:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 3
5574 // CK33-NEXT:    store ptr [[TMP5]], ptr [[TMP9]], align 4
5575 // CK33-NEXT:    [[TMP10:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 4
5576 // CK33-NEXT:    store ptr @.offload_sizes, ptr [[TMP10]], align 4
5577 // CK33-NEXT:    [[TMP11:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 5
5578 // CK33-NEXT:    store ptr @.offload_maptypes, ptr [[TMP11]], align 4
5579 // CK33-NEXT:    [[TMP12:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 6
5580 // CK33-NEXT:    store ptr null, ptr [[TMP12]], align 4
5581 // CK33-NEXT:    [[TMP13:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 7
5582 // CK33-NEXT:    store ptr null, ptr [[TMP13]], align 4
5583 // CK33-NEXT:    [[TMP14:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 8
5584 // CK33-NEXT:    store i64 0, ptr [[TMP14]], align 8
5585 // CK33-NEXT:    [[TMP15:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 9
5586 // CK33-NEXT:    store i64 0, ptr [[TMP15]], align 8
5587 // CK33-NEXT:    [[TMP16:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 10
5588 // CK33-NEXT:    store [3 x i32] [i32 -1, i32 0, i32 0], ptr [[TMP16]], align 4
5589 // CK33-NEXT:    [[TMP17:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 11
5590 // CK33-NEXT:    store [3 x i32] zeroinitializer, ptr [[TMP17]], align 4
5591 // CK33-NEXT:    [[TMP18:%.*]] = getelementptr inbounds nuw [[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS]], i32 0, i32 12
5592 // CK33-NEXT:    store i32 0, ptr [[TMP18]], align 4
5593 // 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]])
5594 // CK33-NEXT:    [[TMP20:%.*]] = icmp ne i32 [[TMP19]], 0
5595 // CK33-NEXT:    br i1 [[TMP20]], label [[OMP_OFFLOAD_FAILED:%.*]], label [[OMP_OFFLOAD_CONT:%.*]]
5596 // CK33:       omp_offload.failed:
5597 // CK33-NEXT:    call void @{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3barv_l159(ptr [[TMP0]]) #[[ATTR2:[0-9]+]]
5598 // CK33-NEXT:    br label [[OMP_OFFLOAD_CONT]]
5599 // CK33:       omp_offload.cont:
5600 // CK33-NEXT:    ret void
5601 //
5602 //
5603 // CK33-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3barv_l159
5604 // CK33-SAME: (ptr noundef [[PTR:%.*]]) #[[ATTR1:[0-9]+]] {
5605 // CK33-NEXT:  entry:
5606 // CK33-NEXT:    [[PTR_ADDR:%.*]] = alloca ptr, align 4
5607 // CK33-NEXT:    store ptr [[PTR]], ptr [[PTR_ADDR]], align 4
5608 // CK33-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[PTR_ADDR]], align 4
5609 // CK33-NEXT:    store double 0.000000e+00, ptr [[TMP0]], align 4
5610 // CK33-NEXT:    ret void
5611 //
5612 //
5613 // SIMD-ONLY20-LABEL: define {{[^@]+}}@_Z3barv
5614 // SIMD-ONLY20-SAME: () #[[ATTR0:[0-9]+]] {
5615 // SIMD-ONLY20-NEXT:  entry:
5616 // SIMD-ONLY20-NEXT:    [[PTR:%.*]] = alloca ptr, align 64
5617 // SIMD-ONLY20-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[PTR]], align 64
5618 // SIMD-ONLY20-NEXT:    store double 0.000000e+00, ptr [[TMP0]], align 8
5619 // SIMD-ONLY20-NEXT:    ret void
5620 //
5621 //
5622 // SIMD-ONLY21-LABEL: define {{[^@]+}}@_Z3barv
5623 // SIMD-ONLY21-SAME: () #[[ATTR0:[0-9]+]] {
5624 // SIMD-ONLY21-NEXT:  entry:
5625 // SIMD-ONLY21-NEXT:    [[PTR:%.*]] = alloca ptr, align 64
5626 // SIMD-ONLY21-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[PTR]], align 64
5627 // SIMD-ONLY21-NEXT:    store double 0.000000e+00, ptr [[TMP0]], align 8
5628 // SIMD-ONLY21-NEXT:    ret void
5629 //
5630 //
5631 // SIMD-ONLY22-LABEL: define {{[^@]+}}@_Z3barv
5632 // SIMD-ONLY22-SAME: () #[[ATTR0:[0-9]+]] {
5633 // SIMD-ONLY22-NEXT:  entry:
5634 // SIMD-ONLY22-NEXT:    [[PTR:%.*]] = alloca ptr, align 64
5635 // SIMD-ONLY22-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[PTR]], align 64
5636 // SIMD-ONLY22-NEXT:    store double 0.000000e+00, ptr [[TMP0]], align 4
5637 // SIMD-ONLY22-NEXT:    ret void
5638 //
5639 //
5640 // SIMD-ONLY23-LABEL: define {{[^@]+}}@_Z3barv
5641 // SIMD-ONLY23-SAME: () #[[ATTR0:[0-9]+]] {
5642 // SIMD-ONLY23-NEXT:  entry:
5643 // SIMD-ONLY23-NEXT:    [[PTR:%.*]] = alloca ptr, align 64
5644 // SIMD-ONLY23-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[PTR]], align 64
5645 // SIMD-ONLY23-NEXT:    store double 0.000000e+00, ptr [[TMP0]], align 4
5646 // SIMD-ONLY23-NEXT:    ret void
5647 //
5648