[InstCombine] Signed saturation patterns
[llvm-complete.git] / test / CodeGen / Thumb / large-fn-switch.ll
blob17f786b5cdd6d2ae3e45685eacbcfc28898d6e49
1 ; RUN: llc < %s | FileCheck %s
2 ; Make sure we save/restore lr in the prologue of a function that's too large.
4 ; CHECK: push    {lr}
5 ; CHECK: bl      .LBB0_4
7 target datalayout = "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64"
8 target triple = "thumbv6m-unknown-unknown-eabi"
10 define dso_local i32 @a(i32 %x, i32* nocapture %p) {
11 entry:
12   switch i32 %x, label %return [
13     i32 0, label %GO2
14     i32 1, label %GO3
15     i32 999, label %GO3
16     i32 3, label %GO3
17     i32 998, label %GO3
18     i32 5, label %GO3
19     i32 6, label %GO2
20     i32 7, label %GO2
21     i32 8, label %GO2
22     i32 9, label %GO2
23     i32 10, label %GO2
24     i32 11, label %GO3
25     i32 996, label %GO3
26     i32 995, label %GO2
27     i32 993, label %GO3
28     i32 15, label %GO2
29     i32 16, label %GO3
30     i32 991, label %GO2
31     i32 18, label %GO3
32     i32 19, label %GO2
33     i32 20, label %GO2
34     i32 21, label %GO2
35     i32 22, label %GO2
36     i32 990, label %GO2
37     i32 24, label %GO3
38     i32 989, label %GO2
39     i32 987, label %GO3
40     i32 27, label %GO2
41     i32 28, label %GO3
42     i32 29, label %GO3
43     i32 30, label %GO2
44     i32 985, label %GO3
45     i32 32, label %GO2
46     i32 984, label %GO3
47     i32 34, label %GO2
48     i32 35, label %GO2
49     i32 36, label %GO2
50     i32 982, label %GO2
51     i32 38, label %GO3
52     i32 981, label %GO3
53     i32 40, label %GO2
54     i32 41, label %GO2
55     i32 980, label %GO3
56     i32 43, label %GO2
57     i32 44, label %GO2
58     i32 979, label %GO2
59     i32 46, label %GO2
60     i32 47, label %GO3
61     i32 978, label %GO2
62     i32 49, label %GO2
63     i32 977, label %GO2
64     i32 51, label %GO3
65     i32 976, label %GO3
66     i32 972, label %GO3
67     i32 54, label %GO3
68     i32 971, label %GO2
69     i32 970, label %GO2
70     i32 57, label %GO3
71     i32 58, label %GO2
72     i32 59, label %GO3
73     i32 60, label %GO3
74     i32 61, label %GO2
75     i32 62, label %GO3
76     i32 63, label %GO2
77     i32 64, label %GO3
78     i32 65, label %GO2
79     i32 969, label %GO3
80     i32 968, label %GO3
81     i32 966, label %GO2
82     i32 69, label %GO2
83     i32 70, label %GO3
84     i32 965, label %GO3
85     i32 72, label %GO3
86     i32 73, label %GO2
87     i32 74, label %GO2
88     i32 964, label %GO2
89     i32 76, label %GO2
90     i32 963, label %GO3
91     i32 78, label %GO3
92     i32 79, label %GO2
93     i32 962, label %GO2
94     i32 81, label %GO2
95     i32 82, label %GO2
96     i32 83, label %GO2
97     i32 960, label %GO2
98     i32 85, label %GO2
99     i32 959, label %GO2
100     i32 958, label %GO3
101     i32 957, label %GO3
102     i32 89, label %GO3
103     i32 90, label %GO3
104     i32 956, label %GO3
105     i32 955, label %GO2
106     i32 93, label %GO2
107     i32 94, label %GO2
108     i32 95, label %GO3
109     i32 96, label %GO3
110     i32 97, label %GO2
111     i32 98, label %GO3
112     i32 99, label %GO2
113     i32 100, label %GO3
114     i32 954, label %GO3
115     i32 102, label %GO2
116     i32 103, label %GO3
117     i32 104, label %GO2
118     i32 105, label %GO2
119     i32 952, label %GO2
120     i32 107, label %GO2
121     i32 108, label %GO3
122     i32 109, label %GO3
123     i32 110, label %GO3
124     i32 111, label %GO2
125     i32 112, label %GO3
126     i32 113, label %GO3
127     i32 114, label %GO3
128     i32 115, label %GO2
129     i32 116, label %GO3
130     i32 951, label %GO2
131     i32 950, label %GO2
132     i32 948, label %GO2
133     i32 120, label %GO3
134     i32 121, label %GO3
135     i32 122, label %GO2
136     i32 123, label %GO2
137     i32 946, label %GO3
138     i32 945, label %GO3
139     i32 126, label %GO3
140     i32 127, label %GO3
141     i32 943, label %GO2
142     i32 942, label %GO3
143     i32 130, label %GO3
144     i32 131, label %GO3
145     i32 941, label %GO3
146     i32 133, label %GO3
147     i32 134, label %GO3
148     i32 135, label %GO2
149     i32 940, label %GO2
150     i32 137, label %GO2
151     i32 138, label %GO3
152     i32 139, label %GO2
153     i32 140, label %GO3
154     i32 939, label %GO3
155     i32 142, label %GO2
156     i32 938, label %GO3
157     i32 144, label %GO3
158     i32 937, label %GO3
159     i32 936, label %GO2
160     i32 147, label %GO2
161     i32 148, label %GO3
162     i32 935, label %GO3
163     i32 150, label %GO2
164     i32 151, label %GO2
165     i32 152, label %GO3
166     i32 153, label %GO3
167     i32 154, label %GO2
168     i32 155, label %GO2
169     i32 934, label %GO3
170     i32 157, label %GO3
171     i32 933, label %GO3
172     i32 159, label %GO3
173     i32 160, label %GO3
174     i32 161, label %GO2
175     i32 162, label %GO2
176     i32 163, label %GO2
177     i32 164, label %GO3
178     i32 165, label %GO3
179     i32 932, label %GO3
180     i32 167, label %GO2
181     i32 931, label %GO3
182     i32 169, label %GO3
183     i32 170, label %GO2
184     i32 171, label %GO2
185     i32 172, label %GO2
186     i32 930, label %GO2
187     i32 929, label %GO2
188     i32 928, label %GO3
189     i32 176, label %GO2
190     i32 927, label %GO3
191     i32 926, label %GO3
192     i32 925, label %GO2
193     i32 924, label %GO2
194     i32 923, label %GO2
195     i32 920, label %GO2
196     i32 183, label %GO3
197     i32 184, label %GO2
198     i32 185, label %GO2
199     i32 186, label %GO2
200     i32 187, label %GO3
201     i32 188, label %GO2
202     i32 189, label %GO2
203     i32 918, label %GO3
204     i32 191, label %GO3
205     i32 917, label %GO2
206     i32 193, label %GO3
207     i32 194, label %GO3
208     i32 916, label %GO3
209     i32 196, label %GO3
210     i32 197, label %GO2
211     i32 198, label %GO2
212     i32 199, label %GO3
213     i32 915, label %GO3
214     i32 201, label %GO2
215     i32 202, label %GO2
216     i32 203, label %GO3
217     i32 914, label %GO3
218     i32 913, label %GO2
219     i32 206, label %GO2
220     i32 207, label %GO2
221     i32 208, label %GO3
222     i32 911, label %GO3
223     i32 210, label %GO3
224     i32 211, label %GO2
225     i32 212, label %GO2
226     i32 213, label %GO2
227     i32 214, label %GO2
228     i32 215, label %GO2
229     i32 909, label %GO3
230     i32 908, label %GO2
231     i32 218, label %GO3
232     i32 907, label %GO3
233     i32 905, label %GO2
234     i32 221, label %GO2
235     i32 222, label %GO2
236     i32 904, label %GO3
237     i32 224, label %GO3
238     i32 225, label %GO2
239     i32 226, label %GO2
240     i32 903, label %GO2
241     i32 228, label %GO2
242     i32 229, label %GO2
243     i32 230, label %GO3
244     i32 231, label %GO3
245     i32 232, label %GO3
246     i32 233, label %GO3
247     i32 234, label %GO3
248     i32 235, label %GO3
249     i32 902, label %GO2
250     i32 237, label %GO3
251     i32 238, label %GO3
252     i32 239, label %GO3
253     i32 240, label %GO3
254     i32 241, label %GO3
255     i32 242, label %GO2
256     i32 243, label %GO2
257     i32 901, label %GO2
258     i32 245, label %GO3
259     i32 899, label %GO2
260     i32 247, label %GO3
261     i32 248, label %GO3
262     i32 249, label %GO3
263     i32 898, label %GO3
264     i32 251, label %GO2
265     i32 897, label %GO3
266     i32 253, label %GO3
267     i32 896, label %GO2
268     i32 255, label %GO2
269     i32 256, label %GO2
270     i32 257, label %GO2
271     i32 258, label %GO2
272     i32 259, label %GO3
273     i32 260, label %GO3
274     i32 261, label %GO3
275     i32 262, label %GO3
276     i32 894, label %GO3
277     i32 264, label %GO2
278     i32 265, label %GO3
279     i32 266, label %GO2
280     i32 267, label %GO2
281     i32 893, label %GO3
282     i32 269, label %GO3
283     i32 891, label %GO3
284     i32 271, label %GO3
285     i32 890, label %GO2
286     i32 273, label %GO3
287     i32 274, label %GO3
288     i32 888, label %GO3
289     i32 886, label %GO2
290     i32 277, label %GO3
291     i32 278, label %GO3
292     i32 279, label %GO2
293     i32 280, label %GO3
294     i32 281, label %GO3
295     i32 282, label %GO2
296     i32 883, label %GO2
297     i32 284, label %GO3
298     i32 285, label %GO3
299     i32 286, label %GO2
300     i32 881, label %GO2
301     i32 879, label %GO2
302     i32 877, label %GO3
303     i32 876, label %GO3
304     i32 875, label %GO3
305     i32 874, label %GO2
306     i32 293, label %GO3
307     i32 294, label %GO2
308     i32 295, label %GO2
309     i32 296, label %GO3
310     i32 297, label %GO2
311     i32 298, label %GO3
312     i32 299, label %GO3
313     i32 300, label %GO2
314     i32 873, label %GO2
315     i32 872, label %GO2
316     i32 871, label %GO2
317     i32 870, label %GO3
318     i32 305, label %GO3
319     i32 306, label %GO3
320     i32 869, label %GO3
321     i32 308, label %GO2
322     i32 868, label %GO2
323     i32 310, label %GO3
324     i32 311, label %GO2
325     i32 867, label %GO2
326     i32 313, label %GO2
327     i32 314, label %GO3
328     i32 315, label %GO3
329     i32 865, label %GO3
330     i32 317, label %GO2
331     i32 318, label %GO2
332     i32 319, label %GO3
333     i32 320, label %GO3
334     i32 321, label %GO2
335     i32 864, label %GO2
336     i32 323, label %GO2
337     i32 324, label %GO2
338     i32 863, label %GO2
339     i32 862, label %GO3
340     i32 327, label %GO3
341     i32 328, label %GO2
342     i32 329, label %GO3
343     i32 330, label %GO3
344     i32 331, label %GO2
345     i32 332, label %GO3
346     i32 333, label %GO3
347     i32 856, label %GO3
348     i32 335, label %GO2
349     i32 336, label %GO3
350     i32 854, label %GO3
351     i32 338, label %GO3
352     i32 339, label %GO2
353     i32 340, label %GO3
354     i32 852, label %GO2
355     i32 342, label %GO2
356     i32 343, label %GO2
357     i32 851, label %GO2
358     i32 345, label %GO2
359     i32 849, label %GO3
360     i32 847, label %GO3
361     i32 348, label %GO3
362     i32 846, label %GO3
363     i32 350, label %GO2
364     i32 845, label %GO3
365     i32 352, label %GO2
366     i32 353, label %GO3
367     i32 354, label %GO2
368     i32 355, label %GO2
369     i32 844, label %GO2
370     i32 357, label %GO3
371     i32 843, label %GO2
372     i32 359, label %GO3
373     i32 360, label %GO3
374     i32 842, label %GO3
375     i32 362, label %GO2
376     i32 841, label %GO2
377     i32 840, label %GO2
378     i32 839, label %GO3
379     i32 837, label %GO2
380     i32 367, label %GO3
381     i32 368, label %GO3
382     i32 369, label %GO3
383     i32 835, label %GO3
384     i32 834, label %GO3
385     i32 833, label %GO3
386     i32 373, label %GO3
387     i32 374, label %GO3
388     i32 375, label %GO2
389     i32 832, label %GO3
390     i32 377, label %GO2
391     i32 378, label %GO2
392     i32 831, label %GO2
393     i32 380, label %GO3
394     i32 381, label %GO2
395     i32 382, label %GO2
396     i32 383, label %GO2
397     i32 830, label %GO3
398     i32 828, label %GO2
399     i32 826, label %GO2
400     i32 387, label %GO3
401     i32 388, label %GO3
402     i32 389, label %GO2
403     i32 390, label %GO3
404     i32 391, label %GO2
405     i32 392, label %GO2
406     i32 393, label %GO3
407     i32 824, label %GO3
408     i32 395, label %GO2
409     i32 396, label %GO3
410     i32 823, label %GO3
411     i32 398, label %GO3
412     i32 399, label %GO2
413     i32 400, label %GO2
414     i32 401, label %GO2
415     i32 822, label %GO2
416     i32 820, label %GO3
417     i32 404, label %GO3
418     i32 819, label %GO3
419     i32 406, label %GO2
420     i32 407, label %GO3
421     i32 408, label %GO2
422     i32 818, label %GO3
423     i32 817, label %GO3
424     i32 411, label %GO2
425     i32 412, label %GO2
426     i32 413, label %GO3
427     i32 414, label %GO3
428     i32 814, label %GO2
429     i32 813, label %GO3
430     i32 811, label %GO3
431     i32 810, label %GO3
432     i32 419, label %GO3
433     i32 420, label %GO3
434     i32 421, label %GO3
435     i32 809, label %GO2
436     i32 423, label %GO3
437     i32 424, label %GO3
438     i32 425, label %GO3
439     i32 808, label %GO3
440     i32 427, label %GO2
441     i32 807, label %GO3
442     i32 806, label %GO3
443     i32 430, label %GO2
444     i32 805, label %GO3
445     i32 432, label %GO2
446     i32 433, label %GO3
447     i32 804, label %GO3
448     i32 435, label %GO3
449     i32 802, label %GO2
450     i32 801, label %GO3
451     i32 800, label %GO2
452     i32 439, label %GO3
453     i32 440, label %GO2
454     i32 441, label %GO3
455     i32 442, label %GO2
456     i32 443, label %GO2
457     i32 799, label %GO2
458     i32 797, label %GO3
459     i32 446, label %GO3
460     i32 795, label %GO2
461     i32 794, label %GO2
462     i32 449, label %GO2
463     i32 450, label %GO2
464     i32 451, label %GO2
465     i32 452, label %GO3
466     i32 453, label %GO3
467     i32 454, label %GO3
468     i32 455, label %GO2
469     i32 456, label %GO3
470     i32 457, label %GO3
471     i32 793, label %GO3
472     i32 792, label %GO2
473     i32 460, label %GO2
474     i32 791, label %GO2
475     i32 462, label %GO2
476     i32 789, label %GO3
477     i32 785, label %GO2
478     i32 784, label %GO2
479     i32 783, label %GO2
480     i32 780, label %GO3
481     i32 468, label %GO3
482     i32 469, label %GO3
483     i32 470, label %GO2
484     i32 471, label %GO3
485     i32 472, label %GO3
486     i32 473, label %GO2
487     i32 779, label %GO2
488     i32 778, label %GO3
489     i32 476, label %GO3
490     i32 477, label %GO2
491     i32 777, label %GO3
492     i32 775, label %GO3
493     i32 480, label %GO2
494     i32 481, label %GO2
495     i32 774, label %GO2
496     i32 483, label %GO2
497     i32 484, label %GO3
498     i32 773, label %GO2
499     i32 772, label %GO3
500     i32 487, label %GO2
501     i32 488, label %GO2
502     i32 489, label %GO3
503     i32 771, label %GO2
504     i32 770, label %GO3
505     i32 492, label %GO3
506     i32 493, label %GO2
507     i32 769, label %GO2
508     i32 495, label %GO2
509     i32 496, label %GO3
510     i32 497, label %GO3
511     i32 498, label %GO3
512     i32 766, label %GO2
513     i32 500, label %GO2
514     i32 501, label %GO3
515     i32 765, label %GO2
516     i32 503, label %GO3
517     i32 764, label %GO2
518     i32 505, label %GO3
519     i32 506, label %GO2
520     i32 507, label %GO3
521     i32 508, label %GO2
522     i32 509, label %GO3
523     i32 510, label %GO2
524     i32 511, label %GO3
525     i32 763, label %GO2
526     i32 761, label %GO2
527     i32 514, label %GO2
528     i32 515, label %GO3
529     i32 516, label %GO3
530     i32 760, label %GO2
531     i32 518, label %GO3
532     i32 519, label %GO3
533     i32 759, label %GO2
534     i32 521, label %GO2
535     i32 522, label %GO3
536     i32 523, label %GO3
537     i32 758, label %GO2
538     i32 525, label %GO3
539     i32 757, label %GO3
540     i32 756, label %GO2
541     i32 528, label %GO3
542     i32 529, label %GO2
543     i32 530, label %GO2
544     i32 531, label %GO3
545     i32 755, label %GO2
546     i32 533, label %GO3
547     i32 754, label %GO3
548     i32 535, label %GO2
549     i32 536, label %GO3
550     i32 537, label %GO3
551     i32 538, label %GO3
552     i32 539, label %GO3
553     i32 540, label %GO2
554     i32 753, label %GO2
555     i32 542, label %GO2
556     i32 752, label %GO3
557     i32 544, label %GO2
558     i32 545, label %GO2
559     i32 546, label %GO2
560     i32 547, label %GO3
561     i32 751, label %GO2
562     i32 549, label %GO2
563     i32 550, label %GO3
564     i32 750, label %GO3
565     i32 552, label %GO2
566     i32 553, label %GO2
567     i32 749, label %GO3
568     i32 555, label %GO2
569     i32 556, label %GO3
570     i32 748, label %GO3
571     i32 746, label %GO2
572     i32 744, label %GO2
573     i32 560, label %GO3
574     i32 741, label %GO3
575     i32 562, label %GO3
576     i32 740, label %GO2
577     i32 564, label %GO3
578     i32 565, label %GO3
579     i32 739, label %GO2
580     i32 737, label %GO3
581     i32 568, label %GO2
582     i32 734, label %GO2
583     i32 733, label %GO3
584     i32 571, label %GO2
585     i32 572, label %GO2
586     i32 573, label %GO2
587     i32 732, label %GO3
588     i32 575, label %GO3
589     i32 731, label %GO3
590     i32 577, label %GO3
591     i32 578, label %GO2
592     i32 730, label %GO3
593     i32 580, label %GO2
594     i32 581, label %GO2
595     i32 582, label %GO3
596     i32 729, label %GO2
597     i32 584, label %GO3
598     i32 585, label %GO2
599     i32 586, label %GO3
600     i32 587, label %GO3
601     i32 728, label %GO3
602     i32 726, label %GO2
603     i32 590, label %GO2
604     i32 591, label %GO2
605     i32 592, label %GO3
606     i32 593, label %GO2
607     i32 594, label %GO3
608     i32 595, label %GO2
609     i32 596, label %GO2
610     i32 597, label %GO2
611     i32 598, label %GO3
612     i32 599, label %GO2
613     i32 725, label %GO3
614     i32 601, label %GO2
615     i32 602, label %GO3
616     i32 603, label %GO3
617     i32 604, label %GO3
618     i32 605, label %GO3
619     i32 723, label %GO2
620     i32 607, label %GO2
621     i32 608, label %GO2
622     i32 722, label %GO3
623     i32 610, label %GO3
624     i32 611, label %GO3
625     i32 721, label %GO3
626     i32 613, label %GO2
627     i32 720, label %GO2
628     i32 615, label %GO2
629     i32 616, label %GO3
630     i32 719, label %GO2
631     i32 717, label %GO2
632     i32 716, label %GO3
633     i32 620, label %GO2
634     i32 621, label %GO3
635     i32 622, label %GO2
636     i32 623, label %GO3
637     i32 624, label %GO2
638     i32 715, label %GO2
639     i32 626, label %GO2
640     i32 627, label %GO2
641     i32 714, label %GO2
642     i32 629, label %GO2
643     i32 630, label %GO2
644     i32 712, label %GO3
645     i32 632, label %GO3
646     i32 711, label %GO2
647     i32 634, label %GO2
648     i32 710, label %GO3
649     i32 707, label %GO2
650     i32 637, label %GO3
651     i32 638, label %GO3
652     i32 639, label %GO2
653     i32 706, label %GO3
654     i32 641, label %GO3
655     i32 705, label %GO3
656     i32 643, label %GO3
657     i32 644, label %GO3
658     i32 645, label %GO2
659     i32 703, label %GO2
660     i32 647, label %GO3
661     i32 648, label %GO2
662     i32 649, label %GO3
663     i32 702, label %GO2
664     i32 701, label %GO2
665     i32 652, label %GO2
666     i32 653, label %GO3
667     i32 654, label %GO2
668     i32 655, label %GO3
669     i32 699, label %GO3
670     i32 698, label %GO2
671     i32 658, label %GO2
672     i32 659, label %GO2
673     i32 660, label %GO2
674     i32 661, label %GO2
675     i32 696, label %GO3
676     i32 695, label %GO3
677     i32 664, label %GO3
678     i32 665, label %GO3
679     i32 666, label %GO3
680     i32 667, label %GO2
681     i32 668, label %GO2
682     i32 669, label %GO3
683     i32 693, label %GO3
684     i32 671, label %GO3
685     i32 692, label %GO3
686     i32 673, label %GO3
687     i32 674, label %GO3
688     i32 675, label %GO2
689     i32 676, label %GO3
690     i32 677, label %GO2
691     i32 691, label %GO3
692     i32 679, label %GO3
693     i32 680, label %GO3
694     i32 681, label %GO3
695     i32 690, label %GO3
696     i32 689, label %GO3
697     i32 688, label %GO2
698     i32 685, label %GO3
699     i32 686, label %GO2
700   ]
702 GO2:
703   br label %return
705 GO3:
706   store i32 3, i32* %p, align 4
707   br label %return
709 return:
710   %retval.0 = phi i32 [ 3, %GO3 ], [ 2, %GO2 ], [ 1, %entry ]
711   ret i32 %retval.0