Revert r72734. The Darwin assembler doesn't support the static
[oota-llvm.git] / test / CodeGen / X86 / abi-isel.ll
1 ; RUN: llvm-as < %s | llc -mtriple=i686-unknown-linux-gnu -march=x86 -relocation-model=static -code-model=small > %t
2 ; RUN: grep leal %t | count 33
3 ; RUN: grep movl %t | count 239
4 ; RUN: grep addl %t | count 20
5 ; RUN: grep subl %t | count 14
6 ; RUN: not grep leaq %t
7 ; RUN: not grep movq %t
8 ; RUN: not grep addq %t
9 ; RUN: not grep subq %t
10 ; RUN: not grep movabs %t
11 ; RUN: not grep largecomm %t
12 ; RUN: not grep _GLOBAL_OFFSET_TABLE_ %t
13 ; RUN: not grep @GOT %t
14 ; RUN: not grep @GOTOFF %t
15 ; RUN: not grep @GOTPCREL %t
16 ; RUN: not grep @GOTPLT %t
17 ; RUN: not grep @PLT %t
18 ; RUN: not grep @PLTOFF %t
19 ; RUN: grep {call       \\\*} %t | count 10
20 ; RUN: not grep %rip %t
21 ; RUN: llvm-as < %s | llc -mtriple=i686-unknown-linux-gnu -march=x86 -relocation-model=pic -code-model=small > %t
22 ; RUN: grep leal %t | count 43
23 ; RUN: grep movl %t | count 377
24 ; RUN: grep addl %t | count 179
25 ; RUN: grep subl %t | count 6
26 ; RUN: not grep leaq %t
27 ; RUN: not grep movq %t
28 ; RUN: not grep addq %t
29 ; RUN: not grep subq %t
30 ; RUN: not grep movabs %t
31 ; RUN: not grep largecomm %t
32 ; RUN: grep _GLOBAL_OFFSET_TABLE_ %t | count 148
33 ; RUN: grep @GOT %t | count 207
34 ; RUN: grep @GOTOFF %t | count 58
35 ; RUN: not grep @GOTPCREL %t
36 ; RUN: not grep @GOTPLT %t
37 ; RUN: grep @PLT %t | count 20
38 ; RUN: not grep @PLTOFF %t
39 ; RUN: grep {call       \\\*} %t | count 10
40 ; RUN: not grep {%rip} %t
41 ; RUN: llvm-as < %s | llc -mtriple=x86_64-unknown-linux-gnu -march=x86-64 -relocation-model=static -code-model=small > %t
42 ; RUN: not grep leal %t
43 ; RUN: grep movl %t | count 91
44 ; RUN: not grep addl %t
45 ; RUN: not grep subl %t
46 ; RUN: grep leaq %t | count 70
47 ; RUN: grep movq %t | count 56
48 ; RUN: grep addq %t | count 20
49 ; RUN: grep subq %t | count 14
50 ; RUN: not grep movabs %t
51 ; RUN: not grep largecomm %t
52 ; RUN: not grep _GLOBAL_OFFSET_TABLE_ %t
53 ; RUN: not grep @GOT %t
54 ; RUN: not grep @GOTOFF %t
55 ; RUN: not grep @GOTPCREL %t
56 ; RUN: not grep @GOTPLT %t
57 ; RUN: not grep @PLT %t
58 ; RUN: not grep @PLTOFF %t
59 ; RUN: grep {call       \\\*} %t | count 10
60 ; RUN: grep {%rip} %t | count 139
61 ; RUN: llvm-as < %s | llc -mtriple=x86_64-unknown-linux-gnu -march=x86-64 -relocation-model=pic -code-model=small > %t
62 ; RUN: not grep leal %t
63 ; RUN: grep movl %t | count 98
64 ; RUN: not grep addl %t
65 ; RUN: not grep subl %t
66 ; RUN: grep leaq %t | count 59
67 ; RUN: grep movq %t | count 195
68 ; RUN: grep addq %t | count 36
69 ; RUN: grep subq %t | count 11
70 ; RUN: not grep movabs %t
71 ; RUN: not grep largecomm %t
72 ; RUN: not grep _GLOBAL_OFFSET_TABLE_ %t
73 ; RUN: grep @GOT %t | count 149
74 ; RUN: not grep @GOTOFF %t
75 ; RUN: grep @GOTPCREL %t | count 149
76 ; RUN: not grep @GOTPLT %t
77 ; RUN: grep @PLT %t | count 20
78 ; RUN: not grep @PLTOFF %t
79 ; RUN: grep {call       \\\*} %t | count 10
80 ; RUN: grep {%rip} %t | count 207
81
82
83
84 ; RUN: llvm-as < %s | llc -mtriple=i686-apple-darwin -march=x86 -relocation-model=static -code-model=small > %t
85 ; RUN: grep leal %t | count 33
86 ; RUN: grep movl %t | count 239
87 ; RUN: grep addl %t | count 20
88 ; RUN: grep subl %t | count 14
89 ; RUN: not grep leaq %t
90 ; RUN: not grep movq %t
91 ; RUN: not grep addq %t
92 ; RUN: not grep subq %t
93 ; RUN: not grep movabs %t
94 ; RUN: not grep largecomm %t
95 ; RUN: not grep _GLOBAL_OFFSET_TABLE_ %t
96 ; RUN: not grep @GOT %t
97 ; RUN: not grep @GOTOFF %t
98 ; RUN: not grep @GOTPCREL %t
99 ; RUN: not grep @GOTPLT %t
100 ; RUN: not grep @PLT %t
101 ; RUN: not grep @PLTOFF %t
102 ; RUN: grep {call       \\\*} %t | count 10
103 ; RUN: not grep %rip %t
104 ; RUN: llvm-as < %s | llc -mtriple=i686-apple-darwin -march=x86 -relocation-model=dynamic-no-pic -code-model=small > %t
105 ; RUN: grep leal %t | count 31
106 ; RUN: grep movl %t | count 312
107 ; RUN: grep addl %t | count 32
108 ; RUN: grep subl %t | count 14
109 ; RUN: not grep leaq %t
110 ; RUN: not grep movq %t
111 ; RUN: not grep addq %t
112 ; RUN: not grep subq %t
113 ; RUN: not grep movabs %t
114 ; RUN: not grep largecomm %t
115 ; RUN: not grep _GLOBAL_OFFSET_TABLE_ %t
116 ; RUN: not grep @GOT %t
117 ; RUN: not grep @GOTOFF %t
118 ; RUN: not grep @GOTPCREL %t
119 ; RUN: not grep @GOTPLT %t
120 ; RUN: not grep @PLT %t
121 ; RUN: not grep @PLTOFF %t
122 ; RUN: grep {call       \\\*} %t | count 10
123 ; RUN: not grep {%rip} %t
124 ; RUN: llvm-as < %s | llc -mtriple=i686-apple-darwin -march=x86 -relocation-model=pic -code-model=small > %t
125 ; RUN: grep leal %t | count 57
126 ; RUN: grep movl %t | count 292
127 ; RUN: grep addl %t | count 32
128 ; RUN: grep subl %t | count 14
129 ; RUN: not grep leaq %t
130 ; RUN: not grep movq %t
131 ; RUN: not grep addq %t
132 ; RUN: not grep subq %t
133 ; RUN: not grep movabs %t
134 ; RUN: not grep largecomm %t
135 ; RUN: not grep _GLOBAL_OFFSET_TABLE_ %t
136 ; RUN: not grep @GOT %t
137 ; RUN: not grep @GOTOFF %t
138 ; RUN: not grep @GOTPCREL %t
139 ; RUN: not grep @GOTPLT %t
140 ; RUN: not grep @PLT %t
141 ; RUN: not grep @PLTOFF %t
142 ; RUN: grep {call       \\\*} %t | count 10
143 ; RUN: not grep {%rip} %t
144 ; RUN: llvm-as < %s | llc -mtriple=x86_64-apple-darwin -march=x86-64 -relocation-model=static -code-model=small > %t
145 ; RUN: not grep leal %t
146 ; RUN: grep movl %t | count 91
147 ; RUN: not grep addl %t
148 ; RUN: not grep subl %t
149 ; RUN: grep leaq %t | count 70
150 ; RUN: grep movq %t | count 56
151 ; RUN: grep addq %t | count 20
152 ; RUN: grep subq %t | count 14
153 ; RUN: not grep movabs %t
154 ; RUN: not grep largecomm %t
155 ; RUN: not grep _GLOBAL_OFFSET_TABLE_ %t
156 ; RUN: not grep @GOT %t
157 ; RUN: not grep @GOTOFF %t
158 ; RUN: not grep @GOTPCREL %t
159 ; RUN: not grep @GOTPLT %t
160 ; RUN: not grep @PLT %t
161 ; RUN: not grep @PLTOFF %t
162 ; RUN: grep {call       \\\*} %t | count 10
163 ; RUN: grep {%rip} %t | count 139
164 ; RUN: llvm-as < %s | llc -mtriple=x86_64-apple-darwin -march=x86-64 -relocation-model=dynamic-no-pic -code-model=small > %t
165 ; RUN: not grep leal %t
166 ; RUN: grep movl %t | count 95
167 ; RUN: not grep addl %t
168 ; RUN: not grep subl %t
169 ; RUN: grep leaq %t | count 89
170 ; RUN: grep movq %t | count 142
171 ; RUN: grep addq %t | count 30
172 ; RUN: grep subq %t | count 12
173 ; RUN: not grep movabs %t
174 ; RUN: not grep largecomm %t
175 ; RUN: not grep _GLOBAL_OFFSET_TABLE_ %t
176 ; RUN: grep @GOT %t | count 92
177 ; RUN: not grep @GOTOFF %t
178 ; RUN: grep @GOTPCREL %t | count 92
179 ; RUN: not grep @GOTPLT %t
180 ; RUN: not grep @PLT %t
181 ; RUN: not grep @PLTOFF %t
182 ; RUN: grep {call       \\\*} %t | count 10
183 ; RUN: grep {%rip} %t | count 208
184 ; RUN: llvm-as < %s | llc -mtriple=x86_64-apple-darwin -march=x86-64 -relocation-model=pic -code-model=small > %t
185 ; RUN: not grep leal %t
186 ; RUN: grep movl %t | count 95
187 ; RUN: not grep addl %t
188 ; RUN: not grep subl %t
189 ; RUN: grep leaq %t | count 89
190 ; RUN: grep movq %t | count 142
191 ; RUN: grep addq %t | count 30
192 ; RUN: grep subq %t | count 12
193 ; RUN: not grep movabs %t
194 ; RUN: not grep largecomm %t
195 ; RUN: not grep _GLOBAL_OFFSET_TABLE_ %t
196 ; RUN: grep @GOT %t | count 92
197 ; RUN: not grep @GOTOFF %t
198 ; RUN: grep @GOTPCREL %t | count 92
199 ; RUN: not grep @GOTPLT %t
200 ; RUN: not grep @PLT %t
201 ; RUN: not grep @PLTOFF %t
202 ; RUN: grep {call       \\\*} %t | count 10
203 ; RUN: grep {%rip} %t | count 208
204
205 @src = external global [131072 x i32]
206 @dst = external global [131072 x i32]
207 @xsrc = external global [32 x i32]
208 @xdst = external global [32 x i32]
209 @ptr = external global i32*
210 @dsrc = global [131072 x i32] zeroinitializer, align 32
211 @ddst = global [131072 x i32] zeroinitializer, align 32
212 @dptr = global i32* null
213 @lsrc = internal global [131072 x i32] zeroinitializer
214 @ldst = internal global [131072 x i32] zeroinitializer
215 @lptr = internal global i32* null
216 @ifunc = external global void ()*
217 @difunc = global void ()* null
218 @lifunc = internal global void ()* null
219 @lxsrc = internal global [32 x i32] zeroinitializer, align 32
220 @lxdst = internal global [32 x i32] zeroinitializer, align 32
221 @dxsrc = global [32 x i32] zeroinitializer, align 32
222 @dxdst = global [32 x i32] zeroinitializer, align 32
223
224 define void @foo00() nounwind {
225 entry:
226         %0 = load i32* getelementptr ([131072 x i32]* @src, i32 0, i64 0), align 4
227         store i32 %0, i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 0), align 4
228         ret void
229 }
230
231 define void @fxo00() nounwind {
232 entry:
233         %0 = load i32* getelementptr ([32 x i32]* @xsrc, i32 0, i64 0), align 4
234         store i32 %0, i32* getelementptr ([32 x i32]* @xdst, i32 0, i64 0), align 4
235         ret void
236 }
237
238 define void @foo01() nounwind {
239 entry:
240         store i32* getelementptr ([131072 x i32]* @dst, i32 0, i32 0), i32** @ptr, align 8
241         ret void
242 }
243
244 define void @fxo01() nounwind {
245 entry:
246         store i32* getelementptr ([32 x i32]* @xdst, i32 0, i32 0), i32** @ptr, align 8
247         ret void
248 }
249
250 define void @foo02() nounwind {
251 entry:
252         %0 = load i32** @ptr, align 8
253         %1 = load i32* getelementptr ([131072 x i32]* @src, i32 0, i64 0), align 4
254         store i32 %1, i32* %0, align 4
255         ret void
256 }
257
258 define void @fxo02() nounwind {
259 entry:
260         %0 = load i32** @ptr, align 8
261         %1 = load i32* getelementptr ([32 x i32]* @xsrc, i32 0, i64 0), align 4
262         store i32 %1, i32* %0, align 4
263         ret void
264 }
265
266 define void @foo03() nounwind {
267 entry:
268         %0 = load i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 0), align 32
269         store i32 %0, i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 0), align 32
270         ret void
271 }
272
273 define void @foo04() nounwind {
274 entry:
275         store i32* getelementptr ([131072 x i32]* @ddst, i32 0, i32 0), i32** @dptr, align 8
276         ret void
277 }
278
279 define void @foo05() nounwind {
280 entry:
281         %0 = load i32** @dptr, align 8
282         %1 = load i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 0), align 32
283         store i32 %1, i32* %0, align 4
284         ret void
285 }
286
287 define void @foo06() nounwind {
288 entry:
289         %0 = load i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 0), align 4
290         store i32 %0, i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 0), align 4
291         ret void
292 }
293
294 define void @foo07() nounwind {
295 entry:
296         store i32* getelementptr ([131072 x i32]* @ldst, i32 0, i32 0), i32** @lptr, align 8
297         ret void
298 }
299
300 define void @foo08() nounwind {
301 entry:
302         %0 = load i32** @lptr, align 8
303         %1 = load i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 0), align 4
304         store i32 %1, i32* %0, align 4
305         ret void
306 }
307
308 define void @qux00() nounwind {
309 entry:
310         %0 = load i32* getelementptr ([131072 x i32]* @src, i32 0, i64 16), align 4
311         store i32 %0, i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 16), align 4
312         ret void
313 }
314
315 define void @qxx00() nounwind {
316 entry:
317         %0 = load i32* getelementptr ([32 x i32]* @xsrc, i32 0, i64 16), align 4
318         store i32 %0, i32* getelementptr ([32 x i32]* @xdst, i32 0, i64 16), align 4
319         ret void
320 }
321
322 define void @qux01() nounwind {
323 entry:
324         store i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 16), i32** @ptr, align 8
325         ret void
326 }
327
328 define void @qxx01() nounwind {
329 entry:
330         store i32* getelementptr ([32 x i32]* @xdst, i32 0, i64 16), i32** @ptr, align 8
331         ret void
332 }
333
334 define void @qux02() nounwind {
335 entry:
336         %0 = load i32** @ptr, align 8
337         %1 = load i32* getelementptr ([131072 x i32]* @src, i32 0, i64 16), align 4
338         %2 = getelementptr i32* %0, i64 16
339         store i32 %1, i32* %2, align 4
340         ret void
341 }
342
343 define void @qxx02() nounwind {
344 entry:
345         %0 = load i32** @ptr, align 8
346         %1 = load i32* getelementptr ([32 x i32]* @xsrc, i32 0, i64 16), align 4
347         %2 = getelementptr i32* %0, i64 16
348         store i32 %1, i32* %2, align 4
349         ret void
350 }
351
352 define void @qux03() nounwind {
353 entry:
354         %0 = load i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 16), align 32
355         store i32 %0, i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 16), align 32
356         ret void
357 }
358
359 define void @qux04() nounwind {
360 entry:
361         store i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 16), i32** @dptr, align 8
362         ret void
363 }
364
365 define void @qux05() nounwind {
366 entry:
367         %0 = load i32** @dptr, align 8
368         %1 = load i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 16), align 32
369         %2 = getelementptr i32* %0, i64 16
370         store i32 %1, i32* %2, align 4
371         ret void
372 }
373
374 define void @qux06() nounwind {
375 entry:
376         %0 = load i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 16), align 4
377         store i32 %0, i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 16), align 4
378         ret void
379 }
380
381 define void @qux07() nounwind {
382 entry:
383         store i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 16), i32** @lptr, align 8
384         ret void
385 }
386
387 define void @qux08() nounwind {
388 entry:
389         %0 = load i32** @lptr, align 8
390         %1 = load i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 16), align 4
391         %2 = getelementptr i32* %0, i64 16
392         store i32 %1, i32* %2, align 4
393         ret void
394 }
395
396 define void @ind00(i64 %i) nounwind {
397 entry:
398         %0 = getelementptr [131072 x i32]* @src, i64 0, i64 %i
399         %1 = load i32* %0, align 4
400         %2 = getelementptr [131072 x i32]* @dst, i64 0, i64 %i
401         store i32 %1, i32* %2, align 4
402         ret void
403 }
404
405 define void @ixd00(i64 %i) nounwind {
406 entry:
407         %0 = getelementptr [32 x i32]* @xsrc, i64 0, i64 %i
408         %1 = load i32* %0, align 4
409         %2 = getelementptr [32 x i32]* @xdst, i64 0, i64 %i
410         store i32 %1, i32* %2, align 4
411         ret void
412 }
413
414 define void @ind01(i64 %i) nounwind {
415 entry:
416         %0 = getelementptr [131072 x i32]* @dst, i64 0, i64 %i
417         store i32* %0, i32** @ptr, align 8
418         ret void
419 }
420
421 define void @ixd01(i64 %i) nounwind {
422 entry:
423         %0 = getelementptr [32 x i32]* @xdst, i64 0, i64 %i
424         store i32* %0, i32** @ptr, align 8
425         ret void
426 }
427
428 define void @ind02(i64 %i) nounwind {
429 entry:
430         %0 = load i32** @ptr, align 8
431         %1 = getelementptr [131072 x i32]* @src, i64 0, i64 %i
432         %2 = load i32* %1, align 4
433         %3 = getelementptr i32* %0, i64 %i
434         store i32 %2, i32* %3, align 4
435         ret void
436 }
437
438 define void @ixd02(i64 %i) nounwind {
439 entry:
440         %0 = load i32** @ptr, align 8
441         %1 = getelementptr [32 x i32]* @xsrc, i64 0, i64 %i
442         %2 = load i32* %1, align 4
443         %3 = getelementptr i32* %0, i64 %i
444         store i32 %2, i32* %3, align 4
445         ret void
446 }
447
448 define void @ind03(i64 %i) nounwind {
449 entry:
450         %0 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %i
451         %1 = load i32* %0, align 4
452         %2 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %i
453         store i32 %1, i32* %2, align 4
454         ret void
455 }
456
457 define void @ind04(i64 %i) nounwind {
458 entry:
459         %0 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %i
460         store i32* %0, i32** @dptr, align 8
461         ret void
462 }
463
464 define void @ind05(i64 %i) nounwind {
465 entry:
466         %0 = load i32** @dptr, align 8
467         %1 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %i
468         %2 = load i32* %1, align 4
469         %3 = getelementptr i32* %0, i64 %i
470         store i32 %2, i32* %3, align 4
471         ret void
472 }
473
474 define void @ind06(i64 %i) nounwind {
475 entry:
476         %0 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %i
477         %1 = load i32* %0, align 4
478         %2 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %i
479         store i32 %1, i32* %2, align 4
480         ret void
481 }
482
483 define void @ind07(i64 %i) nounwind {
484 entry:
485         %0 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %i
486         store i32* %0, i32** @lptr, align 8
487         ret void
488 }
489
490 define void @ind08(i64 %i) nounwind {
491 entry:
492         %0 = load i32** @lptr, align 8
493         %1 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %i
494         %2 = load i32* %1, align 4
495         %3 = getelementptr i32* %0, i64 %i
496         store i32 %2, i32* %3, align 4
497         ret void
498 }
499
500 define void @off00(i64 %i) nounwind {
501 entry:
502         %0 = add i64 %i, 16
503         %1 = getelementptr [131072 x i32]* @src, i64 0, i64 %0
504         %2 = load i32* %1, align 4
505         %3 = getelementptr [131072 x i32]* @dst, i64 0, i64 %0
506         store i32 %2, i32* %3, align 4
507         ret void
508 }
509
510 define void @oxf00(i64 %i) nounwind {
511 entry:
512         %0 = add i64 %i, 16
513         %1 = getelementptr [32 x i32]* @xsrc, i64 0, i64 %0
514         %2 = load i32* %1, align 4
515         %3 = getelementptr [32 x i32]* @xdst, i64 0, i64 %0
516         store i32 %2, i32* %3, align 4
517         ret void
518 }
519
520 define void @off01(i64 %i) nounwind {
521 entry:
522         %.sum = add i64 %i, 16
523         %0 = getelementptr [131072 x i32]* @dst, i64 0, i64 %.sum
524         store i32* %0, i32** @ptr, align 8
525         ret void
526 }
527
528 define void @oxf01(i64 %i) nounwind {
529 entry:
530         %.sum = add i64 %i, 16
531         %0 = getelementptr [32 x i32]* @xdst, i64 0, i64 %.sum
532         store i32* %0, i32** @ptr, align 8
533         ret void
534 }
535
536 define void @off02(i64 %i) nounwind {
537 entry:
538         %0 = load i32** @ptr, align 8
539         %1 = add i64 %i, 16
540         %2 = getelementptr [131072 x i32]* @src, i64 0, i64 %1
541         %3 = load i32* %2, align 4
542         %4 = getelementptr i32* %0, i64 %1
543         store i32 %3, i32* %4, align 4
544         ret void
545 }
546
547 define void @oxf02(i64 %i) nounwind {
548 entry:
549         %0 = load i32** @ptr, align 8
550         %1 = add i64 %i, 16
551         %2 = getelementptr [32 x i32]* @xsrc, i64 0, i64 %1
552         %3 = load i32* %2, align 4
553         %4 = getelementptr i32* %0, i64 %1
554         store i32 %3, i32* %4, align 4
555         ret void
556 }
557
558 define void @off03(i64 %i) nounwind {
559 entry:
560         %0 = add i64 %i, 16
561         %1 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %0
562         %2 = load i32* %1, align 4
563         %3 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %0
564         store i32 %2, i32* %3, align 4
565         ret void
566 }
567
568 define void @off04(i64 %i) nounwind {
569 entry:
570         %.sum = add i64 %i, 16
571         %0 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %.sum
572         store i32* %0, i32** @dptr, align 8
573         ret void
574 }
575
576 define void @off05(i64 %i) nounwind {
577 entry:
578         %0 = load i32** @dptr, align 8
579         %1 = add i64 %i, 16
580         %2 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %1
581         %3 = load i32* %2, align 4
582         %4 = getelementptr i32* %0, i64 %1
583         store i32 %3, i32* %4, align 4
584         ret void
585 }
586
587 define void @off06(i64 %i) nounwind {
588 entry:
589         %0 = add i64 %i, 16
590         %1 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %0
591         %2 = load i32* %1, align 4
592         %3 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %0
593         store i32 %2, i32* %3, align 4
594         ret void
595 }
596
597 define void @off07(i64 %i) nounwind {
598 entry:
599         %.sum = add i64 %i, 16
600         %0 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %.sum
601         store i32* %0, i32** @lptr, align 8
602         ret void
603 }
604
605 define void @off08(i64 %i) nounwind {
606 entry:
607         %0 = load i32** @lptr, align 8
608         %1 = add i64 %i, 16
609         %2 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %1
610         %3 = load i32* %2, align 4
611         %4 = getelementptr i32* %0, i64 %1
612         store i32 %3, i32* %4, align 4
613         ret void
614 }
615
616 define void @moo00(i64 %i) nounwind {
617 entry:
618         %0 = load i32* getelementptr ([131072 x i32]* @src, i32 0, i64 65536), align 4
619         store i32 %0, i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 65536), align 4
620         ret void
621 }
622
623 define void @moo01(i64 %i) nounwind {
624 entry:
625         store i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 65536), i32** @ptr, align 8
626         ret void
627 }
628
629 define void @moo02(i64 %i) nounwind {
630 entry:
631         %0 = load i32** @ptr, align 8
632         %1 = load i32* getelementptr ([131072 x i32]* @src, i32 0, i64 65536), align 4
633         %2 = getelementptr i32* %0, i64 65536
634         store i32 %1, i32* %2, align 4
635         ret void
636 }
637
638 define void @moo03(i64 %i) nounwind {
639 entry:
640         %0 = load i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 65536), align 32
641         store i32 %0, i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 65536), align 32
642         ret void
643 }
644
645 define void @moo04(i64 %i) nounwind {
646 entry:
647         store i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 65536), i32** @dptr, align 8
648         ret void
649 }
650
651 define void @moo05(i64 %i) nounwind {
652 entry:
653         %0 = load i32** @dptr, align 8
654         %1 = load i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 65536), align 32
655         %2 = getelementptr i32* %0, i64 65536
656         store i32 %1, i32* %2, align 4
657         ret void
658 }
659
660 define void @moo06(i64 %i) nounwind {
661 entry:
662         %0 = load i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 65536), align 4
663         store i32 %0, i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 65536), align 4
664         ret void
665 }
666
667 define void @moo07(i64 %i) nounwind {
668 entry:
669         store i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 65536), i32** @lptr, align 8
670         ret void
671 }
672
673 define void @moo08(i64 %i) nounwind {
674 entry:
675         %0 = load i32** @lptr, align 8
676         %1 = load i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 65536), align 4
677         %2 = getelementptr i32* %0, i64 65536
678         store i32 %1, i32* %2, align 4
679         ret void
680 }
681
682 define void @big00(i64 %i) nounwind {
683 entry:
684         %0 = add i64 %i, 65536
685         %1 = getelementptr [131072 x i32]* @src, i64 0, i64 %0
686         %2 = load i32* %1, align 4
687         %3 = getelementptr [131072 x i32]* @dst, i64 0, i64 %0
688         store i32 %2, i32* %3, align 4
689         ret void
690 }
691
692 define void @big01(i64 %i) nounwind {
693 entry:
694         %.sum = add i64 %i, 65536
695         %0 = getelementptr [131072 x i32]* @dst, i64 0, i64 %.sum
696         store i32* %0, i32** @ptr, align 8
697         ret void
698 }
699
700 define void @big02(i64 %i) nounwind {
701 entry:
702         %0 = load i32** @ptr, align 8
703         %1 = add i64 %i, 65536
704         %2 = getelementptr [131072 x i32]* @src, i64 0, i64 %1
705         %3 = load i32* %2, align 4
706         %4 = getelementptr i32* %0, i64 %1
707         store i32 %3, i32* %4, align 4
708         ret void
709 }
710
711 define void @big03(i64 %i) nounwind {
712 entry:
713         %0 = add i64 %i, 65536
714         %1 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %0
715         %2 = load i32* %1, align 4
716         %3 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %0
717         store i32 %2, i32* %3, align 4
718         ret void
719 }
720
721 define void @big04(i64 %i) nounwind {
722 entry:
723         %.sum = add i64 %i, 65536
724         %0 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %.sum
725         store i32* %0, i32** @dptr, align 8
726         ret void
727 }
728
729 define void @big05(i64 %i) nounwind {
730 entry:
731         %0 = load i32** @dptr, align 8
732         %1 = add i64 %i, 65536
733         %2 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %1
734         %3 = load i32* %2, align 4
735         %4 = getelementptr i32* %0, i64 %1
736         store i32 %3, i32* %4, align 4
737         ret void
738 }
739
740 define void @big06(i64 %i) nounwind {
741 entry:
742         %0 = add i64 %i, 65536
743         %1 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %0
744         %2 = load i32* %1, align 4
745         %3 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %0
746         store i32 %2, i32* %3, align 4
747         ret void
748 }
749
750 define void @big07(i64 %i) nounwind {
751 entry:
752         %.sum = add i64 %i, 65536
753         %0 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %.sum
754         store i32* %0, i32** @lptr, align 8
755         ret void
756 }
757
758 define void @big08(i64 %i) nounwind {
759 entry:
760         %0 = load i32** @lptr, align 8
761         %1 = add i64 %i, 65536
762         %2 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %1
763         %3 = load i32* %2, align 4
764         %4 = getelementptr i32* %0, i64 %1
765         store i32 %3, i32* %4, align 4
766         ret void
767 }
768
769 define i8* @bar00() nounwind {
770 entry:
771         ret i8* bitcast ([131072 x i32]* @src to i8*)
772 }
773
774 define i8* @bxr00() nounwind {
775 entry:
776         ret i8* bitcast ([32 x i32]* @xsrc to i8*)
777 }
778
779 define i8* @bar01() nounwind {
780 entry:
781         ret i8* bitcast ([131072 x i32]* @dst to i8*)
782 }
783
784 define i8* @bxr01() nounwind {
785 entry:
786         ret i8* bitcast ([32 x i32]* @xdst to i8*)
787 }
788
789 define i8* @bar02() nounwind {
790 entry:
791         ret i8* bitcast (i32** @ptr to i8*)
792 }
793
794 define i8* @bar03() nounwind {
795 entry:
796         ret i8* bitcast ([131072 x i32]* @dsrc to i8*)
797 }
798
799 define i8* @bar04() nounwind {
800 entry:
801         ret i8* bitcast ([131072 x i32]* @ddst to i8*)
802 }
803
804 define i8* @bar05() nounwind {
805 entry:
806         ret i8* bitcast (i32** @dptr to i8*)
807 }
808
809 define i8* @bar06() nounwind {
810 entry:
811         ret i8* bitcast ([131072 x i32]* @lsrc to i8*)
812 }
813
814 define i8* @bar07() nounwind {
815 entry:
816         ret i8* bitcast ([131072 x i32]* @ldst to i8*)
817 }
818
819 define i8* @bar08() nounwind {
820 entry:
821         ret i8* bitcast (i32** @lptr to i8*)
822 }
823
824 define i8* @har00() nounwind {
825 entry:
826         ret i8* bitcast ([131072 x i32]* @src to i8*)
827 }
828
829 define i8* @hxr00() nounwind {
830 entry:
831         ret i8* bitcast ([32 x i32]* @xsrc to i8*)
832 }
833
834 define i8* @har01() nounwind {
835 entry:
836         ret i8* bitcast ([131072 x i32]* @dst to i8*)
837 }
838
839 define i8* @hxr01() nounwind {
840 entry:
841         ret i8* bitcast ([32 x i32]* @xdst to i8*)
842 }
843
844 define i8* @har02() nounwind {
845 entry:
846         %0 = load i32** @ptr, align 8
847         %1 = bitcast i32* %0 to i8*
848         ret i8* %1
849 }
850
851 define i8* @har03() nounwind {
852 entry:
853         ret i8* bitcast ([131072 x i32]* @dsrc to i8*)
854 }
855
856 define i8* @har04() nounwind {
857 entry:
858         ret i8* bitcast ([131072 x i32]* @ddst to i8*)
859 }
860
861 define i8* @har05() nounwind {
862 entry:
863         %0 = load i32** @dptr, align 8
864         %1 = bitcast i32* %0 to i8*
865         ret i8* %1
866 }
867
868 define i8* @har06() nounwind {
869 entry:
870         ret i8* bitcast ([131072 x i32]* @lsrc to i8*)
871 }
872
873 define i8* @har07() nounwind {
874 entry:
875         ret i8* bitcast ([131072 x i32]* @ldst to i8*)
876 }
877
878 define i8* @har08() nounwind {
879 entry:
880         %0 = load i32** @lptr, align 8
881         %1 = bitcast i32* %0 to i8*
882         ret i8* %1
883 }
884
885 define i8* @bat00() nounwind {
886 entry:
887         ret i8* bitcast (i32* getelementptr ([131072 x i32]* @src, i32 0, i64 16) to i8*)
888 }
889
890 define i8* @bxt00() nounwind {
891 entry:
892         ret i8* bitcast (i32* getelementptr ([32 x i32]* @xsrc, i32 0, i64 16) to i8*)
893 }
894
895 define i8* @bat01() nounwind {
896 entry:
897         ret i8* bitcast (i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 16) to i8*)
898 }
899
900 define i8* @bxt01() nounwind {
901 entry:
902         ret i8* bitcast (i32* getelementptr ([32 x i32]* @xdst, i32 0, i64 16) to i8*)
903 }
904
905 define i8* @bat02() nounwind {
906 entry:
907         %0 = load i32** @ptr, align 8
908         %1 = getelementptr i32* %0, i64 16
909         %2 = bitcast i32* %1 to i8*
910         ret i8* %2
911 }
912
913 define i8* @bat03() nounwind {
914 entry:
915         ret i8* bitcast (i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 16) to i8*)
916 }
917
918 define i8* @bat04() nounwind {
919 entry:
920         ret i8* bitcast (i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 16) to i8*)
921 }
922
923 define i8* @bat05() nounwind {
924 entry:
925         %0 = load i32** @dptr, align 8
926         %1 = getelementptr i32* %0, i64 16
927         %2 = bitcast i32* %1 to i8*
928         ret i8* %2
929 }
930
931 define i8* @bat06() nounwind {
932 entry:
933         ret i8* bitcast (i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 16) to i8*)
934 }
935
936 define i8* @bat07() nounwind {
937 entry:
938         ret i8* bitcast (i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 16) to i8*)
939 }
940
941 define i8* @bat08() nounwind {
942 entry:
943         %0 = load i32** @lptr, align 8
944         %1 = getelementptr i32* %0, i64 16
945         %2 = bitcast i32* %1 to i8*
946         ret i8* %2
947 }
948
949 define i8* @bam00() nounwind {
950 entry:
951         ret i8* bitcast (i32* getelementptr ([131072 x i32]* @src, i32 0, i64 65536) to i8*)
952 }
953
954 define i8* @bam01() nounwind {
955 entry:
956         ret i8* bitcast (i32* getelementptr ([131072 x i32]* @dst, i32 0, i64 65536) to i8*)
957 }
958
959 define i8* @bxm01() nounwind {
960 entry:
961         ret i8* bitcast (i32* getelementptr ([32 x i32]* @xdst, i32 0, i64 65536) to i8*)
962 }
963
964 define i8* @bam02() nounwind {
965 entry:
966         %0 = load i32** @ptr, align 8
967         %1 = getelementptr i32* %0, i64 65536
968         %2 = bitcast i32* %1 to i8*
969         ret i8* %2
970 }
971
972 define i8* @bam03() nounwind {
973 entry:
974         ret i8* bitcast (i32* getelementptr ([131072 x i32]* @dsrc, i32 0, i64 65536) to i8*)
975 }
976
977 define i8* @bam04() nounwind {
978 entry:
979         ret i8* bitcast (i32* getelementptr ([131072 x i32]* @ddst, i32 0, i64 65536) to i8*)
980 }
981
982 define i8* @bam05() nounwind {
983 entry:
984         %0 = load i32** @dptr, align 8
985         %1 = getelementptr i32* %0, i64 65536
986         %2 = bitcast i32* %1 to i8*
987         ret i8* %2
988 }
989
990 define i8* @bam06() nounwind {
991 entry:
992         ret i8* bitcast (i32* getelementptr ([131072 x i32]* @lsrc, i32 0, i64 65536) to i8*)
993 }
994
995 define i8* @bam07() nounwind {
996 entry:
997         ret i8* bitcast (i32* getelementptr ([131072 x i32]* @ldst, i32 0, i64 65536) to i8*)
998 }
999
1000 define i8* @bam08() nounwind {
1001 entry:
1002         %0 = load i32** @lptr, align 8
1003         %1 = getelementptr i32* %0, i64 65536
1004         %2 = bitcast i32* %1 to i8*
1005         ret i8* %2
1006 }
1007
1008 define i8* @cat00(i64 %i) nounwind {
1009 entry:
1010         %0 = add i64 %i, 16
1011         %1 = getelementptr [131072 x i32]* @src, i64 0, i64 %0
1012         %2 = bitcast i32* %1 to i8*
1013         ret i8* %2
1014 }
1015
1016 define i8* @cxt00(i64 %i) nounwind {
1017 entry:
1018         %0 = add i64 %i, 16
1019         %1 = getelementptr [32 x i32]* @xsrc, i64 0, i64 %0
1020         %2 = bitcast i32* %1 to i8*
1021         ret i8* %2
1022 }
1023
1024 define i8* @cat01(i64 %i) nounwind {
1025 entry:
1026         %0 = add i64 %i, 16
1027         %1 = getelementptr [131072 x i32]* @dst, i64 0, i64 %0
1028         %2 = bitcast i32* %1 to i8*
1029         ret i8* %2
1030 }
1031
1032 define i8* @cxt01(i64 %i) nounwind {
1033 entry:
1034         %0 = add i64 %i, 16
1035         %1 = getelementptr [32 x i32]* @xdst, i64 0, i64 %0
1036         %2 = bitcast i32* %1 to i8*
1037         ret i8* %2
1038 }
1039
1040 define i8* @cat02(i64 %i) nounwind {
1041 entry:
1042         %0 = load i32** @ptr, align 8
1043         %1 = add i64 %i, 16
1044         %2 = getelementptr i32* %0, i64 %1
1045         %3 = bitcast i32* %2 to i8*
1046         ret i8* %3
1047 }
1048
1049 define i8* @cat03(i64 %i) nounwind {
1050 entry:
1051         %0 = add i64 %i, 16
1052         %1 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %0
1053         %2 = bitcast i32* %1 to i8*
1054         ret i8* %2
1055 }
1056
1057 define i8* @cat04(i64 %i) nounwind {
1058 entry:
1059         %0 = add i64 %i, 16
1060         %1 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %0
1061         %2 = bitcast i32* %1 to i8*
1062         ret i8* %2
1063 }
1064
1065 define i8* @cat05(i64 %i) nounwind {
1066 entry:
1067         %0 = load i32** @dptr, align 8
1068         %1 = add i64 %i, 16
1069         %2 = getelementptr i32* %0, i64 %1
1070         %3 = bitcast i32* %2 to i8*
1071         ret i8* %3
1072 }
1073
1074 define i8* @cat06(i64 %i) nounwind {
1075 entry:
1076         %0 = add i64 %i, 16
1077         %1 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %0
1078         %2 = bitcast i32* %1 to i8*
1079         ret i8* %2
1080 }
1081
1082 define i8* @cat07(i64 %i) nounwind {
1083 entry:
1084         %0 = add i64 %i, 16
1085         %1 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %0
1086         %2 = bitcast i32* %1 to i8*
1087         ret i8* %2
1088 }
1089
1090 define i8* @cat08(i64 %i) nounwind {
1091 entry:
1092         %0 = load i32** @lptr, align 8
1093         %1 = add i64 %i, 16
1094         %2 = getelementptr i32* %0, i64 %1
1095         %3 = bitcast i32* %2 to i8*
1096         ret i8* %3
1097 }
1098
1099 define i8* @cam00(i64 %i) nounwind {
1100 entry:
1101         %0 = add i64 %i, 65536
1102         %1 = getelementptr [131072 x i32]* @src, i64 0, i64 %0
1103         %2 = bitcast i32* %1 to i8*
1104         ret i8* %2
1105 }
1106
1107 define i8* @cxm00(i64 %i) nounwind {
1108 entry:
1109         %0 = add i64 %i, 65536
1110         %1 = getelementptr [32 x i32]* @xsrc, i64 0, i64 %0
1111         %2 = bitcast i32* %1 to i8*
1112         ret i8* %2
1113 }
1114
1115 define i8* @cam01(i64 %i) nounwind {
1116 entry:
1117         %0 = add i64 %i, 65536
1118         %1 = getelementptr [131072 x i32]* @dst, i64 0, i64 %0
1119         %2 = bitcast i32* %1 to i8*
1120         ret i8* %2
1121 }
1122
1123 define i8* @cxm01(i64 %i) nounwind {
1124 entry:
1125         %0 = add i64 %i, 65536
1126         %1 = getelementptr [32 x i32]* @xdst, i64 0, i64 %0
1127         %2 = bitcast i32* %1 to i8*
1128         ret i8* %2
1129 }
1130
1131 define i8* @cam02(i64 %i) nounwind {
1132 entry:
1133         %0 = load i32** @ptr, align 8
1134         %1 = add i64 %i, 65536
1135         %2 = getelementptr i32* %0, i64 %1
1136         %3 = bitcast i32* %2 to i8*
1137         ret i8* %3
1138 }
1139
1140 define i8* @cam03(i64 %i) nounwind {
1141 entry:
1142         %0 = add i64 %i, 65536
1143         %1 = getelementptr [131072 x i32]* @dsrc, i64 0, i64 %0
1144         %2 = bitcast i32* %1 to i8*
1145         ret i8* %2
1146 }
1147
1148 define i8* @cam04(i64 %i) nounwind {
1149 entry:
1150         %0 = add i64 %i, 65536
1151         %1 = getelementptr [131072 x i32]* @ddst, i64 0, i64 %0
1152         %2 = bitcast i32* %1 to i8*
1153         ret i8* %2
1154 }
1155
1156 define i8* @cam05(i64 %i) nounwind {
1157 entry:
1158         %0 = load i32** @dptr, align 8
1159         %1 = add i64 %i, 65536
1160         %2 = getelementptr i32* %0, i64 %1
1161         %3 = bitcast i32* %2 to i8*
1162         ret i8* %3
1163 }
1164
1165 define i8* @cam06(i64 %i) nounwind {
1166 entry:
1167         %0 = add i64 %i, 65536
1168         %1 = getelementptr [131072 x i32]* @lsrc, i64 0, i64 %0
1169         %2 = bitcast i32* %1 to i8*
1170         ret i8* %2
1171 }
1172
1173 define i8* @cam07(i64 %i) nounwind {
1174 entry:
1175         %0 = add i64 %i, 65536
1176         %1 = getelementptr [131072 x i32]* @ldst, i64 0, i64 %0
1177         %2 = bitcast i32* %1 to i8*
1178         ret i8* %2
1179 }
1180
1181 define i8* @cam08(i64 %i) nounwind {
1182 entry:
1183         %0 = load i32** @lptr, align 8
1184         %1 = add i64 %i, 65536
1185         %2 = getelementptr i32* %0, i64 %1
1186         %3 = bitcast i32* %2 to i8*
1187         ret i8* %3
1188 }
1189
1190 define void @lcallee() nounwind {
1191 entry:
1192         tail call void @x() nounwind
1193         tail call void @x() nounwind
1194         tail call void @x() nounwind
1195         tail call void @x() nounwind
1196         tail call void @x() nounwind
1197         tail call void @x() nounwind
1198         tail call void @x() nounwind
1199         ret void
1200 }
1201
1202 declare void @x()
1203
1204 define internal void @dcallee() nounwind {
1205 entry:
1206         tail call void @y() nounwind
1207         tail call void @y() nounwind
1208         tail call void @y() nounwind
1209         tail call void @y() nounwind
1210         tail call void @y() nounwind
1211         tail call void @y() nounwind
1212         tail call void @y() nounwind
1213         ret void
1214 }
1215
1216 declare void @y()
1217
1218 define void ()* @address() nounwind {
1219 entry:
1220         ret void ()* @callee
1221 }
1222
1223 declare void @callee()
1224
1225 define void ()* @laddress() nounwind {
1226 entry:
1227         ret void ()* @lcallee
1228 }
1229
1230 define void ()* @daddress() nounwind {
1231 entry:
1232         ret void ()* @dcallee
1233 }
1234
1235 define void @caller() nounwind {
1236 entry:
1237         tail call void @callee() nounwind
1238         tail call void @callee() nounwind
1239         ret void
1240 }
1241
1242 define void @dcaller() nounwind {
1243 entry:
1244         tail call void @dcallee() nounwind
1245         tail call void @dcallee() nounwind
1246         ret void
1247 }
1248
1249 define void @lcaller() nounwind {
1250 entry:
1251         tail call void @lcallee() nounwind
1252         tail call void @lcallee() nounwind
1253         ret void
1254 }
1255
1256 define void @tailcaller() nounwind {
1257 entry:
1258         tail call void @callee() nounwind
1259         ret void
1260 }
1261
1262 define void @dtailcaller() nounwind {
1263 entry:
1264         tail call void @dcallee() nounwind
1265         ret void
1266 }
1267
1268 define void @ltailcaller() nounwind {
1269 entry:
1270         tail call void @lcallee() nounwind
1271         ret void
1272 }
1273
1274 define void @icaller() nounwind {
1275 entry:
1276         %0 = load void ()** @ifunc, align 8
1277         tail call void %0() nounwind
1278         %1 = load void ()** @ifunc, align 8
1279         tail call void %1() nounwind
1280         ret void
1281 }
1282
1283 define void @dicaller() nounwind {
1284 entry:
1285         %0 = load void ()** @difunc, align 8
1286         tail call void %0() nounwind
1287         %1 = load void ()** @difunc, align 8
1288         tail call void %1() nounwind
1289         ret void
1290 }
1291
1292 define void @licaller() nounwind {
1293 entry:
1294         %0 = load void ()** @lifunc, align 8
1295         tail call void %0() nounwind
1296         %1 = load void ()** @lifunc, align 8
1297         tail call void %1() nounwind
1298         ret void
1299 }
1300
1301 define void @itailcaller() nounwind {
1302 entry:
1303         %0 = load void ()** @ifunc, align 8
1304         tail call void %0() nounwind
1305         %1 = load void ()** @ifunc, align 8
1306         tail call void %1() nounwind
1307         ret void
1308 }
1309
1310 define void @ditailcaller() nounwind {
1311 entry:
1312         %0 = load void ()** @difunc, align 8
1313         tail call void %0() nounwind
1314         ret void
1315 }
1316
1317 define void @litailcaller() nounwind {
1318 entry:
1319         %0 = load void ()** @lifunc, align 8
1320         tail call void %0() nounwind
1321         ret void
1322 }