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