1# RUN: llc -run-pass x86-fixup-LEAs -mtriple=x86_64-gnu-unknown -verify-machineinstrs -mcpu=corei7-avx -o - %s | FileCheck %s 2--- | 3 ; ModuleID = 'lea-2.ll' 4 source_filename = "lea-2.ll" 5 target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" 6 ;generated using: llc -stop-after x86-pad-short-functions lea-2.ll > leaFinxup64.mir 7 8 ;testleaadd_64_32_1: 3 operands LEA64_32r cannot be replaced with 2 add instructions 9 ; but can be replaced with 1 lea + 1 add 10 define i32 @testleaadd_64_32_1() { 11 ret i32 0 12 } 13 14 ;testleaadd_rbp_64_32_1: 3 operands LEA64_32r cannot be replaced with 2 add instructions 15 ; where the base is rbp/r13/ebp register but it can be replaced with 1 lea + 1 add 16 define i32 @testleaadd_rbp_64_32_1() { 17 ret i32 0 18 } 19 20 ;test1lea_rbp_64_32_1: 2 operands LEA64_32r where base register is rbp/r13/ebp and can not 21 ; be replaced with an add instruction but can be replaced with 1 lea instruction 22 define i32 @test1lea_rbp_64_32_1() { 23 ret i32 0 24 } 25 26 ;test2add_64: 3 operands LEA64r that can be replaced with 2 add instructions 27 define i32 @test2add_64() { 28 ret i32 0 29 } 30 31 ;test2add_rbp_64: 3 operands LEA64r that can be replaced with 2 add instructions 32 ; where the base is rbp/r13/ebp register 33 define i32 @test2add_rbp_64() { 34 ret i32 0 35 } 36 37 ;test1add_rbp_64: 2 operands LEA64r where base register is rbp/r13/ebp and can be replaced 38 ; with an add instruction 39 define i32 @test1add_rbp_64() { 40 ret i32 0 41 } 42 43 ;testleaadd_64_32: 3 operands LEA64_32r that can be replaced with 1 lea 1 add instructions 44 define i32 @testleaadd_64_32() { 45 ret i32 0 46 } 47 48 ;testleaadd_rbp_64_32: 3 operands LEA64_32r that can be replaced with 1 lea 1 add instructions 49 ; where the base is rbp/r13/ebp register 50 define i32 @testleaadd_rbp_64_32() { 51 ret i32 0 52 } 53 54 ;test1lea_rbp_64_32: 2 operands LEA64_32r where base register is rbp/r13/ebp and can be replaced 55 ; with a lea instruction 56 define i32 @test1lea_rbp_64_32() { 57 ret i32 0 58 } 59 60 ;testleaadd_64: 3 operands LEA64r that can be replaced with 1 lea 1 add instructions 61 define i32 @testleaadd_64() { 62 ret i32 0 63 } 64 65 ;testleaadd_rbp_64: 3 operands LEA64r that can be replaced with 1 lea 1 add instructions 66 ; where the base is rbp/r13/ebp register 67 define i32 @testleaadd_rbp_64() { 68 ret i32 0 69 } 70 71 ;test1lea_rbp_64: 2 operands LEA64r wher base register is rbp/r13/ebp and can be replaced 72 ; with a lea instruction 73 define i32 @test1lea_rbp_64() { 74 ret i32 0 75 } 76 77 ;test8: dst = base & scale!=1, can't optimize 78 define i32 @test8() { 79 ret i32 0 80 } 81 82 ;testleaaddi32_64_32: 3 operands LEA64_32r that can be replaced with 1 lea + 1 add instructions where 83 ; ADD64ri32 is chosen 84 define i32 @testleaaddi32_64_32() { 85 ret i32 0 86 } 87 88 ;test1mov1add_rbp_64_32: 2 operands LEA64_32r cannot be replaced with 1 add 1 mov instructions 89 ; where the base is rbp/r13/ebp register 90 define i32 @test1mov1add_rbp_64_32() { 91 ret i32 0 92 } 93 94 ;testleaadd_rbp_index_64_32: 3 operands LEA64_32r that cannot replaced with 1 lea 1 add instructions 95 ; where the base and the index are ebp register and there is offset 96 define i32 @testleaadd_rbp_index_64_32() { 97 ret i32 0 98 } 99 100 ;testleaadd_rbp_index2_64_32: 3 operands LEA64_32r that cannot replaced with 1 lea 1 add instructions 101 ; where the base and the index are ebp register and there is scale 102 define i32 @testleaadd_rbp_index2_64_32() { 103 ret i32 0 104 } 105 106 ;test2addi32_64: 3 operands LEA64r that can be replaced with 2 add instructions where ADD64ri32 107 ; is chosen 108 define i32 @test2addi32_64() { 109 ret i32 0 110 } 111 112 ;test1mov1add_rbp_64: 2 operands LEA64r that can be replaced with 1 add 1 mov instructions 113 ; where the base is rbp/r13/ebp register 114 define i32 @test1mov1add_rbp_64() { 115 ret i32 0 116 } 117 118 ;testleaadd_rbp_index_64: 3 operands LEA64r that can be replaced with 1 lea 1 add instructions 119 ; where the base and the index are ebp register and there is offset 120 define i32 @testleaadd_rbp_index_64() { 121 ret i32 0 122 } 123 124 ;testleaadd_rbp_index2_64: 3 operands LEA64r that can be replaced with 1 lea 1 add instructions 125 ; where the base and the index are ebp register and there is scale 126 define i32 @testleaadd_rbp_index2_64() { 127 ret i32 0 128 } 129 130 ;test_skip_opt_64: 3 operands LEA64r that can not be replaced with 2 instructions 131 define i32 @test_skip_opt_64() { 132 ret i32 0 133 } 134 135 ;test_skip_eflags_64: LEA64r that cannot be replaced since its not safe to clobber eflags 136 define i32 @test_skip_eflags_64() { 137 ret i32 0 138 } 139 140 ;test_skip_opt_64_32: 3 operands LEA64_32r that can not be replaced with 2 instructions 141 define i32 @test_skip_opt_64_32() { 142 ret i32 0 143 } 144 145 ;test_skip_eflags_64_32: LEA64_32r that cannot be replaced since its not safe to clobber eflags 146 define i32 @test_skip_eflags_64_32() { 147 ret i32 0 148 } 149 150 151... 152--- 153name: testleaadd_64_32_1 154alignment: 4 155exposesReturnsTwice: false 156legalized: false 157regBankSelected: false 158selected: false 159tracksRegLiveness: true 160liveins: 161 - { reg: '$rax' } 162 - { reg: '$rbp' } 163frameInfo: 164 isFrameAddressTaken: false 165 isReturnAddressTaken: false 166 hasStackMap: false 167 hasPatchPoint: false 168 stackSize: 0 169 offsetAdjustment: 0 170 maxAlignment: 0 171 adjustsStack: false 172 hasCalls: false 173 maxCallFrameSize: 0 174 hasOpaqueSPAdjustment: false 175 hasVAStart: false 176 hasMustTailInVarArgFunc: false 177body: | 178 bb.0 (%ir-block.0): 179 liveins: $rax, $rbp 180 ; CHECK: $eax = LEA64_32r killed $rax, 1, killed $rbp, 0 181 ; CHECK: $eax = ADD32ri8 $eax, -5 182 183 $eax = LEA64_32r killed $rax, 1, killed $rbp, -5, $noreg 184 RETQ $eax 185 186... 187--- 188name: testleaadd_rbp_64_32_1 189alignment: 4 190exposesReturnsTwice: false 191legalized: false 192regBankSelected: false 193selected: false 194tracksRegLiveness: true 195liveins: 196 - { reg: '$rax' } 197 - { reg: '$rbp' } 198frameInfo: 199 isFrameAddressTaken: false 200 isReturnAddressTaken: false 201 hasStackMap: false 202 hasPatchPoint: false 203 stackSize: 0 204 offsetAdjustment: 0 205 maxAlignment: 0 206 adjustsStack: false 207 hasCalls: false 208 maxCallFrameSize: 0 209 hasOpaqueSPAdjustment: false 210 hasVAStart: false 211 hasMustTailInVarArgFunc: false 212body: | 213 bb.0 (%ir-block.0): 214 liveins: $rax, $rbp 215 ; CHECK: $ebp = LEA64_32r killed $rax, 1, killed $rbp, 0 216 ; CHECK: $ebp = ADD32ri8 $ebp, -5 217 218 $ebp = LEA64_32r killed $rbp, 1, killed $rax, -5, $noreg 219 RETQ $ebp 220 221... 222--- 223name: test1lea_rbp_64_32_1 224alignment: 4 225exposesReturnsTwice: false 226legalized: false 227regBankSelected: false 228selected: false 229tracksRegLiveness: true 230liveins: 231 - { reg: '$rax' } 232 - { reg: '$rbp' } 233frameInfo: 234 isFrameAddressTaken: false 235 isReturnAddressTaken: false 236 hasStackMap: false 237 hasPatchPoint: false 238 stackSize: 0 239 offsetAdjustment: 0 240 maxAlignment: 0 241 adjustsStack: false 242 hasCalls: false 243 maxCallFrameSize: 0 244 hasOpaqueSPAdjustment: false 245 hasVAStart: false 246 hasMustTailInVarArgFunc: false 247body: | 248 bb.0 (%ir-block.0): 249 liveins: $rax, $rbp 250 ; CHECK: $ebp = LEA64_32r killed $rax, 1, killed $rbp, 0 251 252 $ebp = LEA64_32r killed $rbp, 1, killed $rax, 0, $noreg 253 RETQ $ebp 254 255... 256--- 257name: test2add_64 258alignment: 4 259exposesReturnsTwice: false 260legalized: false 261regBankSelected: false 262selected: false 263tracksRegLiveness: true 264liveins: 265 - { reg: '$rax' } 266 - { reg: '$rbp' } 267frameInfo: 268 isFrameAddressTaken: false 269 isReturnAddressTaken: false 270 hasStackMap: false 271 hasPatchPoint: false 272 stackSize: 0 273 offsetAdjustment: 0 274 maxAlignment: 0 275 adjustsStack: false 276 hasCalls: false 277 maxCallFrameSize: 0 278 hasOpaqueSPAdjustment: false 279 hasVAStart: false 280 hasMustTailInVarArgFunc: false 281body: | 282 bb.0 (%ir-block.0): 283 liveins: $rax, $rbp 284 ; CHECK: $rax = ADD64rr $rax, killed $rbp 285 ; CHECK: $rax = ADD64ri8 $rax, -5 286 287 $rax = LEA64r killed $rax, 1, killed $rbp, -5, $noreg 288 RETQ $eax 289 290... 291--- 292name: test2add_rbp_64 293alignment: 4 294exposesReturnsTwice: false 295legalized: false 296regBankSelected: false 297selected: false 298tracksRegLiveness: true 299liveins: 300 - { reg: '$rax' } 301 - { reg: '$rbp' } 302frameInfo: 303 isFrameAddressTaken: false 304 isReturnAddressTaken: false 305 hasStackMap: false 306 hasPatchPoint: false 307 stackSize: 0 308 offsetAdjustment: 0 309 maxAlignment: 0 310 adjustsStack: false 311 hasCalls: false 312 maxCallFrameSize: 0 313 hasOpaqueSPAdjustment: false 314 hasVAStart: false 315 hasMustTailInVarArgFunc: false 316body: | 317 bb.0 (%ir-block.0): 318 liveins: $rax, $rbp 319 ; CHECK: $rbp = ADD64rr $rbp, killed $rax 320 ; CHECK: $rbp = ADD64ri8 $rbp, -5 321 322 $rbp = LEA64r killed $rbp, 1, killed $rax, -5, $noreg 323 RETQ $ebp 324 325... 326--- 327name: test1add_rbp_64 328alignment: 4 329exposesReturnsTwice: false 330legalized: false 331regBankSelected: false 332selected: false 333tracksRegLiveness: true 334liveins: 335 - { reg: '$rax' } 336 - { reg: '$rbp' } 337frameInfo: 338 isFrameAddressTaken: false 339 isReturnAddressTaken: false 340 hasStackMap: false 341 hasPatchPoint: false 342 stackSize: 0 343 offsetAdjustment: 0 344 maxAlignment: 0 345 adjustsStack: false 346 hasCalls: false 347 maxCallFrameSize: 0 348 hasOpaqueSPAdjustment: false 349 hasVAStart: false 350 hasMustTailInVarArgFunc: false 351body: | 352 bb.0 (%ir-block.0): 353 liveins: $rax, $rbp 354 ; CHECK: $rbp = ADD64rr $rbp, killed $rax 355 356 $rbp = LEA64r killed $rbp, 1, killed $rax, 0, $noreg 357 RETQ $ebp 358 359... 360--- 361name: testleaadd_64_32 362alignment: 4 363exposesReturnsTwice: false 364legalized: false 365regBankSelected: false 366selected: false 367tracksRegLiveness: true 368liveins: 369 - { reg: '$rax' } 370 - { reg: '$rbp' } 371 - { reg: '$rbx' } 372frameInfo: 373 isFrameAddressTaken: false 374 isReturnAddressTaken: false 375 hasStackMap: false 376 hasPatchPoint: false 377 stackSize: 0 378 offsetAdjustment: 0 379 maxAlignment: 0 380 adjustsStack: false 381 hasCalls: false 382 maxCallFrameSize: 0 383 hasOpaqueSPAdjustment: false 384 hasVAStart: false 385 hasMustTailInVarArgFunc: false 386body: | 387 bb.0 (%ir-block.0): 388 liveins: $rax, $rbp 389 ; CHECK: $ebx = LEA64_32r killed $rax, 1, killed $rbp, 0, $noreg 390 ; CHECK: $ebx = ADD32ri8 $ebx, -5 391 392 $ebx = LEA64_32r killed $rax, 1, killed $rbp, -5, $noreg 393 RETQ $ebx 394 395... 396--- 397name: testleaadd_rbp_64_32 398alignment: 4 399exposesReturnsTwice: false 400legalized: false 401regBankSelected: false 402selected: false 403tracksRegLiveness: true 404liveins: 405 - { reg: '$rax' } 406 - { reg: '$rbp' } 407 - { reg: '$rbx' } 408frameInfo: 409 isFrameAddressTaken: false 410 isReturnAddressTaken: false 411 hasStackMap: false 412 hasPatchPoint: false 413 stackSize: 0 414 offsetAdjustment: 0 415 maxAlignment: 0 416 adjustsStack: false 417 hasCalls: false 418 maxCallFrameSize: 0 419 hasOpaqueSPAdjustment: false 420 hasVAStart: false 421 hasMustTailInVarArgFunc: false 422body: | 423 bb.0 (%ir-block.0): 424 liveins: $rax, $rbp 425 ; CHECK: $ebx = LEA64_32r killed $rax, 1, killed $rbp, 0, $noreg 426 ; CHECK: $ebx = ADD32ri8 $ebx, -5 427 428 $ebx = LEA64_32r killed $rbp, 1, killed $rax, -5, $noreg 429 RETQ $ebx 430 431... 432--- 433name: test1lea_rbp_64_32 434alignment: 4 435exposesReturnsTwice: false 436legalized: false 437regBankSelected: false 438selected: false 439tracksRegLiveness: true 440liveins: 441 - { reg: '$rax' } 442 - { reg: '$rbp' } 443 - { reg: '$rbx' } 444frameInfo: 445 isFrameAddressTaken: false 446 isReturnAddressTaken: false 447 hasStackMap: false 448 hasPatchPoint: false 449 stackSize: 0 450 offsetAdjustment: 0 451 maxAlignment: 0 452 adjustsStack: false 453 hasCalls: false 454 maxCallFrameSize: 0 455 hasOpaqueSPAdjustment: false 456 hasVAStart: false 457 hasMustTailInVarArgFunc: false 458body: | 459 bb.0 (%ir-block.0): 460 liveins: $rax, $rbp 461 ; CHECK: $ebx = LEA64_32r killed $rax, 1, killed $rbp, 0, $noreg 462 463 $ebx = LEA64_32r killed $rbp, 1, killed $rax, 0, $noreg 464 RETQ $ebx 465 466... 467--- 468name: testleaadd_64 469alignment: 4 470exposesReturnsTwice: false 471legalized: false 472regBankSelected: false 473selected: false 474tracksRegLiveness: true 475liveins: 476 - { reg: '$rax' } 477 - { reg: '$rbp' } 478 - { reg: '$rbx' } 479frameInfo: 480 isFrameAddressTaken: false 481 isReturnAddressTaken: false 482 hasStackMap: false 483 hasPatchPoint: false 484 stackSize: 0 485 offsetAdjustment: 0 486 maxAlignment: 0 487 adjustsStack: false 488 hasCalls: false 489 maxCallFrameSize: 0 490 hasOpaqueSPAdjustment: false 491 hasVAStart: false 492 hasMustTailInVarArgFunc: false 493body: | 494 bb.0 (%ir-block.0): 495 liveins: $rax, $rbp 496 ; CHECK: $rbx = LEA64r killed $rax, 1, killed $rbp, 0, $noreg 497 ; CHECK: $rbx = ADD64ri8 $rbx, -5 498 499 $rbx = LEA64r killed $rax, 1, killed $rbp, -5, $noreg 500 RETQ $ebx 501 502... 503--- 504name: testleaadd_rbp_64 505alignment: 4 506exposesReturnsTwice: false 507legalized: false 508regBankSelected: false 509selected: false 510tracksRegLiveness: true 511liveins: 512 - { reg: '$rax' } 513 - { reg: '$rbp' } 514 - { reg: '$rbx' } 515frameInfo: 516 isFrameAddressTaken: false 517 isReturnAddressTaken: false 518 hasStackMap: false 519 hasPatchPoint: false 520 stackSize: 0 521 offsetAdjustment: 0 522 maxAlignment: 0 523 adjustsStack: false 524 hasCalls: false 525 maxCallFrameSize: 0 526 hasOpaqueSPAdjustment: false 527 hasVAStart: false 528 hasMustTailInVarArgFunc: false 529body: | 530 bb.0 (%ir-block.0): 531 liveins: $rax, $rbp 532 ; CHECK: $rbx = LEA64r killed $rax, 1, killed $rbp, 0, $noreg 533 ; CHECK: $rbx = ADD64ri8 $rbx, -5 534 535 $rbx = LEA64r killed $rbp, 1, killed $rax, -5, $noreg 536 RETQ $ebx 537 538... 539--- 540name: test1lea_rbp_64 541alignment: 4 542exposesReturnsTwice: false 543legalized: false 544regBankSelected: false 545selected: false 546tracksRegLiveness: true 547liveins: 548 - { reg: '$rax' } 549 - { reg: '$rbp' } 550 - { reg: '$rbx' } 551frameInfo: 552 isFrameAddressTaken: false 553 isReturnAddressTaken: false 554 hasStackMap: false 555 hasPatchPoint: false 556 stackSize: 0 557 offsetAdjustment: 0 558 maxAlignment: 0 559 adjustsStack: false 560 hasCalls: false 561 maxCallFrameSize: 0 562 hasOpaqueSPAdjustment: false 563 hasVAStart: false 564 hasMustTailInVarArgFunc: false 565body: | 566 bb.0 (%ir-block.0): 567 liveins: $rax, $rbp 568 ; CHECK: $rbx = LEA64r killed $rax, 1, killed $rbp, 0, $noreg 569 570 $rbx = LEA64r killed $rbp, 1, killed $rax, 0, $noreg 571 RETQ $ebx 572 573... 574--- 575name: test8 576alignment: 4 577exposesReturnsTwice: false 578legalized: false 579regBankSelected: false 580selected: false 581tracksRegLiveness: true 582liveins: 583 - { reg: '$rdi' } 584 - { reg: '$rbp' } 585frameInfo: 586 isFrameAddressTaken: false 587 isReturnAddressTaken: false 588 hasStackMap: false 589 hasPatchPoint: false 590 stackSize: 0 591 offsetAdjustment: 0 592 maxAlignment: 0 593 adjustsStack: false 594 hasCalls: false 595 maxCallFrameSize: 0 596 hasOpaqueSPAdjustment: false 597 hasVAStart: false 598 hasMustTailInVarArgFunc: false 599body: | 600 bb.0 (%ir-block.0): 601 liveins: $rdi, $rbp 602 ; CHECK: $r12 = LEA64r $noreg, 2, killed $r13, 5, $noreg 603 ; CHECK: $r12 = ADD64rr $r12, killed $rbp 604 $rbp = KILL $rbp, implicit-def $rbp 605 $r13 = KILL $rdi, implicit-def $r13 606 $r12 = LEA64r killed $rbp, 2, killed $r13, 5, $noreg 607 RETQ $r12 608 609... 610--- 611name: testleaaddi32_64_32 612alignment: 4 613exposesReturnsTwice: false 614legalized: false 615regBankSelected: false 616selected: false 617tracksRegLiveness: true 618liveins: 619 - { reg: '$rax' } 620 - { reg: '$rbp' } 621frameInfo: 622 isFrameAddressTaken: false 623 isReturnAddressTaken: false 624 hasStackMap: false 625 hasPatchPoint: false 626 stackSize: 0 627 offsetAdjustment: 0 628 maxAlignment: 0 629 adjustsStack: false 630 hasCalls: false 631 maxCallFrameSize: 0 632 hasOpaqueSPAdjustment: false 633 hasVAStart: false 634 hasMustTailInVarArgFunc: false 635body: | 636 bb.0 (%ir-block.0): 637 liveins: $rax, $rbp 638 ; CHECK: $eax = LEA64_32r killed $rax, 1, killed $rbp, 0 639 ; CHECK: $eax = ADD32ri $eax, 129 640 641 $eax = LEA64_32r killed $rax, 1, killed $rbp, 129, $noreg 642 RETQ $eax 643 644... 645--- 646name: test1mov1add_rbp_64_32 647alignment: 4 648exposesReturnsTwice: false 649legalized: false 650regBankSelected: false 651selected: false 652tracksRegLiveness: true 653liveins: 654 - { reg: '$rax' } 655 - { reg: '$rbp' } 656frameInfo: 657 isFrameAddressTaken: false 658 isReturnAddressTaken: false 659 hasStackMap: false 660 hasPatchPoint: false 661 stackSize: 0 662 offsetAdjustment: 0 663 maxAlignment: 0 664 adjustsStack: false 665 hasCalls: false 666 maxCallFrameSize: 0 667 hasOpaqueSPAdjustment: false 668 hasVAStart: false 669 hasMustTailInVarArgFunc: false 670body: | 671 bb.0 (%ir-block.0): 672 liveins: $rax, $rbp, $rbx 673 ; CHECK: $ebx = LEA64_32r killed $rbp, 1, killed $rbp, 0, $noreg 674 675 $ebx = LEA64_32r killed $rbp, 1, killed $rbp, 0, $noreg 676 RETQ $ebx 677 678... 679--- 680name: testleaadd_rbp_index_64_32 681alignment: 4 682exposesReturnsTwice: false 683legalized: false 684regBankSelected: false 685selected: false 686tracksRegLiveness: true 687liveins: 688 - { reg: '$rbx' } 689 - { reg: '$rbp' } 690frameInfo: 691 isFrameAddressTaken: false 692 isReturnAddressTaken: false 693 hasStackMap: false 694 hasPatchPoint: false 695 stackSize: 0 696 offsetAdjustment: 0 697 maxAlignment: 0 698 adjustsStack: false 699 hasCalls: false 700 maxCallFrameSize: 0 701 hasOpaqueSPAdjustment: false 702 hasVAStart: false 703 hasMustTailInVarArgFunc: false 704body: | 705 bb.0 (%ir-block.0): 706 liveins: $rax, $rbp, $rbx 707 ; CHECK: $ebx = LEA64_32r killed $rbp, 1, killed $rbp, 5, $noreg 708 709 $ebx = LEA64_32r killed $rbp, 1, killed $rbp, 5, $noreg 710 RETQ $ebx 711 712... 713--- 714name: testleaadd_rbp_index2_64_32 715alignment: 4 716exposesReturnsTwice: false 717legalized: false 718regBankSelected: false 719selected: false 720tracksRegLiveness: true 721liveins: 722 - { reg: '$rbx' } 723 - { reg: '$rbp' } 724frameInfo: 725 isFrameAddressTaken: false 726 isReturnAddressTaken: false 727 hasStackMap: false 728 hasPatchPoint: false 729 stackSize: 0 730 offsetAdjustment: 0 731 maxAlignment: 0 732 adjustsStack: false 733 hasCalls: false 734 maxCallFrameSize: 0 735 hasOpaqueSPAdjustment: false 736 hasVAStart: false 737 hasMustTailInVarArgFunc: false 738body: | 739 bb.0 (%ir-block.0): 740 liveins: $eax, $ebp, $ebx 741 ; CHECK: $ebx = LEA64_32r killed $rbp, 4, killed $rbp, 5, $noreg 742 743 $ebx = LEA64_32r killed $rbp, 4, killed $rbp, 5, $noreg 744 RETQ $ebx 745 746... 747--- 748name: test2addi32_64 749alignment: 4 750exposesReturnsTwice: false 751legalized: false 752regBankSelected: false 753selected: false 754tracksRegLiveness: true 755liveins: 756 - { reg: '$rax' } 757 - { reg: '$rbp' } 758frameInfo: 759 isFrameAddressTaken: false 760 isReturnAddressTaken: false 761 hasStackMap: false 762 hasPatchPoint: false 763 stackSize: 0 764 offsetAdjustment: 0 765 maxAlignment: 0 766 adjustsStack: false 767 hasCalls: false 768 maxCallFrameSize: 0 769 hasOpaqueSPAdjustment: false 770 hasVAStart: false 771 hasMustTailInVarArgFunc: false 772body: | 773 bb.0 (%ir-block.0): 774 liveins: $rax, $rbp 775 ; CHECK: $rax = ADD64rr $rax, killed $rbp 776 ; CHECK: $rax = ADD64ri32 $rax, 129 777 778 $rax = LEA64r killed $rax, 1, killed $rbp, 129, $noreg 779 RETQ $eax 780 781... 782--- 783name: test1mov1add_rbp_64 784alignment: 4 785exposesReturnsTwice: false 786legalized: false 787regBankSelected: false 788selected: false 789tracksRegLiveness: true 790liveins: 791 - { reg: '$rax' } 792 - { reg: '$rbp' } 793frameInfo: 794 isFrameAddressTaken: false 795 isReturnAddressTaken: false 796 hasStackMap: false 797 hasPatchPoint: false 798 stackSize: 0 799 offsetAdjustment: 0 800 maxAlignment: 0 801 adjustsStack: false 802 hasCalls: false 803 maxCallFrameSize: 0 804 hasOpaqueSPAdjustment: false 805 hasVAStart: false 806 hasMustTailInVarArgFunc: false 807body: | 808 bb.0 (%ir-block.0): 809 liveins: $rax, $rbp, $rbx 810 ; CHECK: $rbx = MOV64rr $rbp 811 ; CHECK: $rbx = ADD64rr $rbx, $rbp 812 813 $rbx = LEA64r killed $rbp, 1, $rbp, 0, $noreg 814 RETQ $ebx 815 816... 817--- 818name: testleaadd_rbp_index_64 819alignment: 4 820exposesReturnsTwice: false 821legalized: false 822regBankSelected: false 823selected: false 824tracksRegLiveness: true 825liveins: 826 - { reg: '$rbx' } 827 - { reg: '$rbp' } 828frameInfo: 829 isFrameAddressTaken: false 830 isReturnAddressTaken: false 831 hasStackMap: false 832 hasPatchPoint: false 833 stackSize: 0 834 offsetAdjustment: 0 835 maxAlignment: 0 836 adjustsStack: false 837 hasCalls: false 838 maxCallFrameSize: 0 839 hasOpaqueSPAdjustment: false 840 hasVAStart: false 841 hasMustTailInVarArgFunc: false 842body: | 843 bb.0 (%ir-block.0): 844 liveins: $rax, $rbp, $rbx 845 ; CHECK: $rbx = LEA64r $noreg, 1, $rbp, 5, $noreg 846 ; CHECK: $rbx = ADD64rr $rbx, $rbp 847 848 $rbx = LEA64r $rbp, 1, $rbp, 5, $noreg 849 RETQ $ebx 850 851... 852--- 853name: testleaadd_rbp_index2_64 854alignment: 4 855exposesReturnsTwice: false 856legalized: false 857regBankSelected: false 858selected: false 859tracksRegLiveness: true 860liveins: 861 - { reg: '$rbx' } 862 - { reg: '$rbp' } 863frameInfo: 864 isFrameAddressTaken: false 865 isReturnAddressTaken: false 866 hasStackMap: false 867 hasPatchPoint: false 868 stackSize: 0 869 offsetAdjustment: 0 870 maxAlignment: 0 871 adjustsStack: false 872 hasCalls: false 873 maxCallFrameSize: 0 874 hasOpaqueSPAdjustment: false 875 hasVAStart: false 876 hasMustTailInVarArgFunc: false 877body: | 878 bb.0 (%ir-block.0): 879 liveins: $rax, $rbp, $rbx 880 ; CHECK: $rbx = LEA64r $noreg, 4, $rbp, 5, $noreg 881 ; CHECK: $rbx = ADD64rr $rbx, $rbp 882 883 $rbx = LEA64r $rbp, 4, $rbp, 5, $noreg 884 RETQ $ebx 885 886... 887--- 888name: test_skip_opt_64 889alignment: 4 890exposesReturnsTwice: false 891legalized: false 892regBankSelected: false 893selected: false 894tracksRegLiveness: true 895liveins: 896 - { reg: '$rbx' } 897 - { reg: '$rbp' } 898frameInfo: 899 isFrameAddressTaken: false 900 isReturnAddressTaken: false 901 hasStackMap: false 902 hasPatchPoint: false 903 stackSize: 0 904 offsetAdjustment: 0 905 maxAlignment: 0 906 adjustsStack: false 907 hasCalls: false 908 maxCallFrameSize: 0 909 hasOpaqueSPAdjustment: false 910 hasVAStart: false 911 hasMustTailInVarArgFunc: false 912body: | 913 bb.0 (%ir-block.0): 914 liveins: $rax, $rbp, $rbx 915 ; CHECK: $rbp = LEA64r killed $rbp, 4, killed $rbp, 0, $noreg 916 917 $rbp = LEA64r killed $rbp, 4, killed $rbp, 0, $noreg 918 RETQ $ebp 919 920... 921--- 922name: test_skip_eflags_64 923alignment: 4 924exposesReturnsTwice: false 925legalized: false 926regBankSelected: false 927selected: false 928tracksRegLiveness: true 929liveins: 930 - { reg: '$rbp' } 931 - { reg: '$rax' } 932frameInfo: 933 isFrameAddressTaken: false 934 isReturnAddressTaken: false 935 hasStackMap: false 936 hasPatchPoint: false 937 stackSize: 0 938 offsetAdjustment: 0 939 maxAlignment: 0 940 adjustsStack: false 941 hasCalls: false 942 maxCallFrameSize: 0 943 hasOpaqueSPAdjustment: false 944 hasVAStart: false 945 hasMustTailInVarArgFunc: false 946body: | 947 bb.0 (%ir-block.0): 948 liveins: $rax, $rbp, $rbx 949 ; CHECK: $rbx = LEA64r killed $rax, 4, killed $rax, 5, $noreg 950 ; CHECK: $rbp = LEA64r killed $rbx, 4, killed $rbx, 0, $noreg 951 ; CHECK: $rbp = ADD64ri8 $rbp, 5 952 953 CMP64rr $rax, killed $rbx, implicit-def $eflags 954 $rbx = LEA64r killed $rax, 4, killed $rax, 5, $noreg 955 JE_1 %bb.1, implicit $eflags 956 RETQ $ebx 957 bb.1: 958 liveins: $rax, $rbp, $rbx 959 $rbp = LEA64r killed $rbx, 4, killed $rbx, 5, $noreg 960 RETQ $ebp 961 962... 963--- 964name: test_skip_opt_64_32 965alignment: 4 966exposesReturnsTwice: false 967legalized: false 968regBankSelected: false 969selected: false 970tracksRegLiveness: true 971liveins: 972 - { reg: '$rbx' } 973 - { reg: '$rbp' } 974frameInfo: 975 isFrameAddressTaken: false 976 isReturnAddressTaken: false 977 hasStackMap: false 978 hasPatchPoint: false 979 stackSize: 0 980 offsetAdjustment: 0 981 maxAlignment: 0 982 adjustsStack: false 983 hasCalls: false 984 maxCallFrameSize: 0 985 hasOpaqueSPAdjustment: false 986 hasVAStart: false 987 hasMustTailInVarArgFunc: false 988body: | 989 bb.0 (%ir-block.0): 990 liveins: $rax, $rbp, $rbx 991 ; CHECK: $ebp = LEA64_32r killed $rbp, 4, killed $rbp, 0, $noreg 992 993 $ebp = LEA64_32r killed $rbp, 4, killed $rbp, 0, $noreg 994 RETQ $ebp 995 996... 997--- 998name: test_skip_eflags_64_32 999alignment: 4 1000exposesReturnsTwice: false 1001legalized: false 1002regBankSelected: false 1003selected: false 1004tracksRegLiveness: true 1005liveins: 1006 - { reg: '$rbp' } 1007 - { reg: '$rax' } 1008frameInfo: 1009 isFrameAddressTaken: false 1010 isReturnAddressTaken: false 1011 hasStackMap: false 1012 hasPatchPoint: false 1013 stackSize: 0 1014 offsetAdjustment: 0 1015 maxAlignment: 0 1016 adjustsStack: false 1017 hasCalls: false 1018 maxCallFrameSize: 0 1019 hasOpaqueSPAdjustment: false 1020 hasVAStart: false 1021 hasMustTailInVarArgFunc: false 1022body: | 1023 bb.0 (%ir-block.0): 1024 liveins: $rax, $rbp, $rbx 1025 ; CHECK: $ebx = LEA64_32r killed $rax, 4, killed $rax, 5, $noreg 1026 ; CHECK: $ebp = LEA64_32r killed $rbx, 4, killed $rbx, 0, $noreg 1027 ; CHECK: $ebp = ADD32ri8 $ebp, 5 1028 1029 CMP64rr $rax, killed $rbx, implicit-def $eflags 1030 $ebx = LEA64_32r killed $rax, 4, killed $rax, 5, $noreg 1031 JE_1 %bb.1, implicit $eflags 1032 RETQ $ebx 1033 bb.1: 1034 liveins: $rax, $rbp, $rbx 1035 $ebp = LEA64_32r killed $rbx, 4, killed $rbx, 5, $noreg 1036 RETQ $ebp 1037 1038... 1039 1040 1041 1042