1; RUN: llc < %s | FileCheck %s 2; Make sure we save/restore lr in the prologue of a function that's too large. 3 4; CHECK: push {lr} 5; CHECK: bl .LBB0_4 6 7target datalayout = "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64" 8target triple = "thumbv6m-unknown-unknown-eabi" 9 10define dso_local i32 @a(i32 %x, i32* nocapture %p) { 11entry: 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 ] 701 702GO2: 703 br label %return 704 705GO3: 706 store i32 3, i32* %p, align 4 707 br label %return 708 709return: 710 %retval.0 = phi i32 [ 3, %GO3 ], [ 2, %GO2 ], [ 1, %entry ] 711 ret i32 %retval.0 712} 713