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 ;test_leab_rbp_leais_64_32: 2 operands LEA64_32r that can be replaced with LEA_IS form 90 ; where the base is rbp/r13/ebp register 91 define i32 @test_leab_rbp_leais_64_32() { 92 ret i32 0 93 } 94 95 ;test_leabi_rbp_leais_64_32: 3 operands LEA64_32r that can be replaced with LEA_IS form 96 ; where the base and the index are ebp register and there is offset 97 define i32 @test_leabi_rbp_leais_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 ;test_leab_rbp_leais_64: 2 operands LEA64r that can be replaced with LEA_IS form 114 ; where the base is rbp/r13/ebp register 115 define i32 @test_leab_rbp_leais_64() { 116 ret i32 0 117 } 118 119 ;test_leabi_rbp_leais_64: 3 operands LEA64r that can be replaced with LEA_IS form 120 ; where the base and the index are ebp register and there is offset 121 define i32 @test_leabi_rbp_leais_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 define i32 @pr43758() { 152 ret i32 0 153 } 154 155 156... 157--- 158name: testleaadd_64_32_1 159alignment: 16 160exposesReturnsTwice: false 161legalized: false 162regBankSelected: false 163selected: false 164tracksRegLiveness: true 165liveins: 166 - { reg: '$rax' } 167 - { reg: '$rbp' } 168frameInfo: 169 isFrameAddressTaken: false 170 isReturnAddressTaken: false 171 hasStackMap: false 172 hasPatchPoint: false 173 stackSize: 0 174 offsetAdjustment: 0 175 maxAlignment: 0 176 adjustsStack: false 177 hasCalls: false 178 maxCallFrameSize: 0 179 hasOpaqueSPAdjustment: false 180 hasVAStart: false 181 hasMustTailInVarArgFunc: false 182body: | 183 bb.0 (%ir-block.0): 184 liveins: $rax, $rbp 185 186 ; CHECK-LABEL: name: testleaadd_64_32_1 187 ; CHECK: liveins: $rax, $rbp 188 ; CHECK: $eax = ADD32rr $eax, $ebp, implicit-def $eflags, implicit $rax, implicit $rbp 189 ; CHECK: $eax = ADD32ri $eax, -5, implicit-def $eflags 190 ; CHECK: RET64 $eax 191 $eax = LEA64_32r killed $rax, 1, killed $rbp, -5, $noreg 192 RET64 $eax 193 194... 195--- 196name: testleaadd_rbp_64_32_1 197alignment: 16 198exposesReturnsTwice: false 199legalized: false 200regBankSelected: false 201selected: false 202tracksRegLiveness: true 203liveins: 204 - { reg: '$rax' } 205 - { reg: '$rbp' } 206frameInfo: 207 isFrameAddressTaken: false 208 isReturnAddressTaken: false 209 hasStackMap: false 210 hasPatchPoint: false 211 stackSize: 0 212 offsetAdjustment: 0 213 maxAlignment: 0 214 adjustsStack: false 215 hasCalls: false 216 maxCallFrameSize: 0 217 hasOpaqueSPAdjustment: false 218 hasVAStart: false 219 hasMustTailInVarArgFunc: false 220body: | 221 bb.0 (%ir-block.0): 222 liveins: $rax, $rbp 223 224 ; CHECK-LABEL: name: testleaadd_rbp_64_32_1 225 ; CHECK: liveins: $rax, $rbp 226 ; CHECK: $ebp = ADD32rr $ebp, $eax, implicit-def $eflags, implicit $rbp, implicit $rax 227 ; CHECK: $ebp = ADD32ri $ebp, -5, implicit-def $eflags 228 ; CHECK: RET64 $ebp 229 $ebp = LEA64_32r killed $rbp, 1, killed $rax, -5, $noreg 230 RET64 $ebp 231 232... 233--- 234name: test1lea_rbp_64_32_1 235alignment: 16 236exposesReturnsTwice: false 237legalized: false 238regBankSelected: false 239selected: false 240tracksRegLiveness: true 241liveins: 242 - { reg: '$rax' } 243 - { reg: '$rbp' } 244frameInfo: 245 isFrameAddressTaken: false 246 isReturnAddressTaken: false 247 hasStackMap: false 248 hasPatchPoint: false 249 stackSize: 0 250 offsetAdjustment: 0 251 maxAlignment: 0 252 adjustsStack: false 253 hasCalls: false 254 maxCallFrameSize: 0 255 hasOpaqueSPAdjustment: false 256 hasVAStart: false 257 hasMustTailInVarArgFunc: false 258body: | 259 bb.0 (%ir-block.0): 260 liveins: $rax, $rbp 261 262 ; CHECK-LABEL: name: test1lea_rbp_64_32_1 263 ; CHECK: liveins: $rax, $rbp 264 ; CHECK: $ebp = ADD32rr $ebp, $eax, implicit-def $eflags, implicit $rbp, implicit $rax 265 ; CHECK: RET64 $ebp 266 $ebp = LEA64_32r killed $rbp, 1, killed $rax, 0, $noreg 267 RET64 $ebp 268 269... 270--- 271name: test2add_64 272alignment: 16 273exposesReturnsTwice: false 274legalized: false 275regBankSelected: false 276selected: false 277tracksRegLiveness: true 278liveins: 279 - { reg: '$rax' } 280 - { reg: '$rbp' } 281frameInfo: 282 isFrameAddressTaken: false 283 isReturnAddressTaken: false 284 hasStackMap: false 285 hasPatchPoint: false 286 stackSize: 0 287 offsetAdjustment: 0 288 maxAlignment: 0 289 adjustsStack: false 290 hasCalls: false 291 maxCallFrameSize: 0 292 hasOpaqueSPAdjustment: false 293 hasVAStart: false 294 hasMustTailInVarArgFunc: false 295body: | 296 bb.0 (%ir-block.0): 297 liveins: $rax, $rbp 298 299 ; CHECK-LABEL: name: test2add_64 300 ; CHECK: liveins: $rax, $rbp 301 ; CHECK: $rax = ADD64rr $rax, $rbp, implicit-def $eflags 302 ; CHECK: $rax = ADD64ri32 $rax, -5, implicit-def $eflags 303 ; CHECK: RET64 $eax 304 $rax = LEA64r killed $rax, 1, killed $rbp, -5, $noreg 305 RET64 $eax 306 307... 308--- 309name: test2add_rbp_64 310alignment: 16 311exposesReturnsTwice: false 312legalized: false 313regBankSelected: false 314selected: false 315tracksRegLiveness: true 316liveins: 317 - { reg: '$rax' } 318 - { reg: '$rbp' } 319frameInfo: 320 isFrameAddressTaken: false 321 isReturnAddressTaken: false 322 hasStackMap: false 323 hasPatchPoint: false 324 stackSize: 0 325 offsetAdjustment: 0 326 maxAlignment: 0 327 adjustsStack: false 328 hasCalls: false 329 maxCallFrameSize: 0 330 hasOpaqueSPAdjustment: false 331 hasVAStart: false 332 hasMustTailInVarArgFunc: false 333body: | 334 bb.0 (%ir-block.0): 335 liveins: $rax, $rbp 336 337 ; CHECK-LABEL: name: test2add_rbp_64 338 ; CHECK: liveins: $rax, $rbp 339 ; CHECK: $rbp = ADD64rr $rbp, $rax, implicit-def $eflags 340 ; CHECK: $rbp = ADD64ri32 $rbp, -5, implicit-def $eflags 341 ; CHECK: RET64 $ebp 342 $rbp = LEA64r killed $rbp, 1, killed $rax, -5, $noreg 343 RET64 $ebp 344 345... 346--- 347name: test1add_rbp_64 348alignment: 16 349exposesReturnsTwice: false 350legalized: false 351regBankSelected: false 352selected: false 353tracksRegLiveness: true 354liveins: 355 - { reg: '$rax' } 356 - { reg: '$rbp' } 357frameInfo: 358 isFrameAddressTaken: false 359 isReturnAddressTaken: false 360 hasStackMap: false 361 hasPatchPoint: false 362 stackSize: 0 363 offsetAdjustment: 0 364 maxAlignment: 0 365 adjustsStack: false 366 hasCalls: false 367 maxCallFrameSize: 0 368 hasOpaqueSPAdjustment: false 369 hasVAStart: false 370 hasMustTailInVarArgFunc: false 371body: | 372 bb.0 (%ir-block.0): 373 liveins: $rax, $rbp 374 375 ; CHECK-LABEL: name: test1add_rbp_64 376 ; CHECK: liveins: $rax, $rbp 377 ; CHECK: $rbp = ADD64rr $rbp, $rax, implicit-def $eflags 378 ; CHECK: RET64 $ebp 379 $rbp = LEA64r killed $rbp, 1, killed $rax, 0, $noreg 380 RET64 $ebp 381 382... 383--- 384name: testleaadd_64_32 385alignment: 16 386exposesReturnsTwice: false 387legalized: false 388regBankSelected: false 389selected: false 390tracksRegLiveness: true 391liveins: 392 - { reg: '$rax' } 393 - { reg: '$rbp' } 394 - { reg: '$rbx' } 395frameInfo: 396 isFrameAddressTaken: false 397 isReturnAddressTaken: false 398 hasStackMap: false 399 hasPatchPoint: false 400 stackSize: 0 401 offsetAdjustment: 0 402 maxAlignment: 0 403 adjustsStack: false 404 hasCalls: false 405 maxCallFrameSize: 0 406 hasOpaqueSPAdjustment: false 407 hasVAStart: false 408 hasMustTailInVarArgFunc: false 409body: | 410 bb.0 (%ir-block.0): 411 liveins: $rax, $rbp 412 413 ; CHECK-LABEL: name: testleaadd_64_32 414 ; CHECK: liveins: $rax, $rbp 415 ; CHECK: $ebx = LEA64_32r killed $rax, 1, killed $rbp, 0, $noreg 416 ; CHECK: $ebx = ADD32ri $ebx, -5, implicit-def $eflags 417 ; CHECK: RET64 $ebx 418 $ebx = LEA64_32r killed $rax, 1, killed $rbp, -5, $noreg 419 RET64 $ebx 420 421... 422--- 423name: testleaadd_rbp_64_32 424alignment: 16 425exposesReturnsTwice: false 426legalized: false 427regBankSelected: false 428selected: false 429tracksRegLiveness: true 430liveins: 431 - { reg: '$rax' } 432 - { reg: '$rbp' } 433 - { reg: '$rbx' } 434frameInfo: 435 isFrameAddressTaken: false 436 isReturnAddressTaken: false 437 hasStackMap: false 438 hasPatchPoint: false 439 stackSize: 0 440 offsetAdjustment: 0 441 maxAlignment: 0 442 adjustsStack: false 443 hasCalls: false 444 maxCallFrameSize: 0 445 hasOpaqueSPAdjustment: false 446 hasVAStart: false 447 hasMustTailInVarArgFunc: false 448body: | 449 bb.0 (%ir-block.0): 450 liveins: $rax, $rbp 451 452 ; CHECK-LABEL: name: testleaadd_rbp_64_32 453 ; CHECK: liveins: $rax, $rbp 454 ; CHECK: $ebx = LEA64_32r killed $rax, 1, killed $rbp, 0, $noreg 455 ; CHECK: $ebx = ADD32ri $ebx, -5, implicit-def $eflags 456 ; CHECK: RET64 $ebx 457 $ebx = LEA64_32r killed $rbp, 1, killed $rax, -5, $noreg 458 RET64 $ebx 459 460... 461--- 462name: test1lea_rbp_64_32 463alignment: 16 464exposesReturnsTwice: false 465legalized: false 466regBankSelected: false 467selected: false 468tracksRegLiveness: true 469liveins: 470 - { reg: '$rax' } 471 - { reg: '$rbp' } 472 - { reg: '$rbx' } 473frameInfo: 474 isFrameAddressTaken: false 475 isReturnAddressTaken: false 476 hasStackMap: false 477 hasPatchPoint: false 478 stackSize: 0 479 offsetAdjustment: 0 480 maxAlignment: 0 481 adjustsStack: false 482 hasCalls: false 483 maxCallFrameSize: 0 484 hasOpaqueSPAdjustment: false 485 hasVAStart: false 486 hasMustTailInVarArgFunc: false 487body: | 488 bb.0 (%ir-block.0): 489 liveins: $rax, $rbp 490 491 ; CHECK-LABEL: name: test1lea_rbp_64_32 492 ; CHECK: liveins: $rax, $rbp 493 ; CHECK: $ebx = LEA64_32r killed $rax, 1, killed $rbp, 0, $noreg 494 ; CHECK: RET64 $ebx 495 $ebx = LEA64_32r killed $rbp, 1, killed $rax, 0, $noreg 496 RET64 $ebx 497 498... 499--- 500name: testleaadd_64 501alignment: 16 502exposesReturnsTwice: false 503legalized: false 504regBankSelected: false 505selected: false 506tracksRegLiveness: true 507liveins: 508 - { reg: '$rax' } 509 - { reg: '$rbp' } 510 - { reg: '$rbx' } 511frameInfo: 512 isFrameAddressTaken: false 513 isReturnAddressTaken: false 514 hasStackMap: false 515 hasPatchPoint: false 516 stackSize: 0 517 offsetAdjustment: 0 518 maxAlignment: 0 519 adjustsStack: false 520 hasCalls: false 521 maxCallFrameSize: 0 522 hasOpaqueSPAdjustment: false 523 hasVAStart: false 524 hasMustTailInVarArgFunc: false 525body: | 526 bb.0 (%ir-block.0): 527 liveins: $rax, $rbp 528 529 ; CHECK-LABEL: name: testleaadd_64 530 ; CHECK: liveins: $rax, $rbp 531 ; CHECK: $rbx = LEA64r killed $rax, 1, killed $rbp, 0, $noreg 532 ; CHECK: $rbx = ADD64ri32 $rbx, -5, implicit-def $eflags 533 ; CHECK: RET64 $ebx 534 $rbx = LEA64r killed $rax, 1, killed $rbp, -5, $noreg 535 RET64 $ebx 536 537... 538--- 539name: testleaadd_rbp_64 540alignment: 16 541exposesReturnsTwice: false 542legalized: false 543regBankSelected: false 544selected: false 545tracksRegLiveness: true 546liveins: 547 - { reg: '$rax' } 548 - { reg: '$rbp' } 549 - { reg: '$rbx' } 550frameInfo: 551 isFrameAddressTaken: false 552 isReturnAddressTaken: false 553 hasStackMap: false 554 hasPatchPoint: false 555 stackSize: 0 556 offsetAdjustment: 0 557 maxAlignment: 0 558 adjustsStack: false 559 hasCalls: false 560 maxCallFrameSize: 0 561 hasOpaqueSPAdjustment: false 562 hasVAStart: false 563 hasMustTailInVarArgFunc: false 564body: | 565 bb.0 (%ir-block.0): 566 liveins: $rax, $rbp 567 568 ; CHECK-LABEL: name: testleaadd_rbp_64 569 ; CHECK: liveins: $rax, $rbp 570 ; CHECK: $rbx = LEA64r killed $rax, 1, killed $rbp, 0, $noreg 571 ; CHECK: $rbx = ADD64ri32 $rbx, -5, implicit-def $eflags 572 ; CHECK: RET64 $ebx 573 $rbx = LEA64r killed $rbp, 1, killed $rax, -5, $noreg 574 RET64 $ebx 575 576... 577--- 578name: test1lea_rbp_64 579alignment: 16 580exposesReturnsTwice: false 581legalized: false 582regBankSelected: false 583selected: false 584tracksRegLiveness: true 585liveins: 586 - { reg: '$rax' } 587 - { reg: '$rbp' } 588 - { reg: '$rbx' } 589frameInfo: 590 isFrameAddressTaken: false 591 isReturnAddressTaken: false 592 hasStackMap: false 593 hasPatchPoint: false 594 stackSize: 0 595 offsetAdjustment: 0 596 maxAlignment: 0 597 adjustsStack: false 598 hasCalls: false 599 maxCallFrameSize: 0 600 hasOpaqueSPAdjustment: false 601 hasVAStart: false 602 hasMustTailInVarArgFunc: false 603body: | 604 bb.0 (%ir-block.0): 605 liveins: $rax, $rbp 606 607 ; CHECK-LABEL: name: test1lea_rbp_64 608 ; CHECK: liveins: $rax, $rbp 609 ; CHECK: $rbx = LEA64r killed $rax, 1, killed $rbp, 0, $noreg 610 ; CHECK: RET64 $ebx 611 $rbx = LEA64r killed $rbp, 1, killed $rax, 0, $noreg 612 RET64 $ebx 613 614... 615--- 616name: test8 617alignment: 16 618exposesReturnsTwice: false 619legalized: false 620regBankSelected: false 621selected: false 622tracksRegLiveness: true 623liveins: 624 - { reg: '$rdi' } 625 - { reg: '$rbp' } 626frameInfo: 627 isFrameAddressTaken: false 628 isReturnAddressTaken: false 629 hasStackMap: false 630 hasPatchPoint: false 631 stackSize: 0 632 offsetAdjustment: 0 633 maxAlignment: 0 634 adjustsStack: false 635 hasCalls: false 636 maxCallFrameSize: 0 637 hasOpaqueSPAdjustment: false 638 hasVAStart: false 639 hasMustTailInVarArgFunc: false 640body: | 641 bb.0 (%ir-block.0): 642 liveins: $rdi, $rbp 643 ; CHECK-LABEL: name: test8 644 ; CHECK: liveins: $rdi, $rbp 645 ; CHECK: $rbp = KILL $rbp, implicit-def $rbp 646 ; CHECK: $r13 = KILL $rdi, implicit-def $r13 647 ; CHECK: $r12 = LEA64r $noreg, 2, killed $r13, 5, $noreg 648 ; CHECK: $r12 = ADD64rr $r12, killed $rbp, implicit-def $eflags 649 ; CHECK: RET64 $r12 650 $rbp = KILL $rbp, implicit-def $rbp 651 $r13 = KILL $rdi, implicit-def $r13 652 $r12 = LEA64r killed $rbp, 2, killed $r13, 5, $noreg 653 RET64 $r12 654 655... 656--- 657name: testleaaddi32_64_32 658alignment: 16 659exposesReturnsTwice: false 660legalized: false 661regBankSelected: false 662selected: false 663tracksRegLiveness: true 664liveins: 665 - { reg: '$rax' } 666 - { reg: '$rbp' } 667frameInfo: 668 isFrameAddressTaken: false 669 isReturnAddressTaken: false 670 hasStackMap: false 671 hasPatchPoint: false 672 stackSize: 0 673 offsetAdjustment: 0 674 maxAlignment: 0 675 adjustsStack: false 676 hasCalls: false 677 maxCallFrameSize: 0 678 hasOpaqueSPAdjustment: false 679 hasVAStart: false 680 hasMustTailInVarArgFunc: false 681body: | 682 bb.0 (%ir-block.0): 683 liveins: $rax, $rbp 684 685 ; CHECK-LABEL: name: testleaaddi32_64_32 686 ; CHECK: liveins: $rax, $rbp 687 ; CHECK: $eax = ADD32rr $eax, $ebp, implicit-def $eflags, implicit $rax, implicit $rbp 688 ; CHECK: $eax = ADD32ri $eax, 129, implicit-def $eflags 689 ; CHECK: RET64 $eax 690 $eax = LEA64_32r killed $rax, 1, killed $rbp, 129, $noreg 691 RET64 $eax 692 693... 694--- 695name: test_leab_rbp_leais_64_32 696alignment: 16 697exposesReturnsTwice: false 698legalized: false 699regBankSelected: false 700selected: false 701tracksRegLiveness: true 702liveins: 703 - { reg: '$rax' } 704 - { reg: '$rbp' } 705frameInfo: 706 isFrameAddressTaken: false 707 isReturnAddressTaken: false 708 hasStackMap: false 709 hasPatchPoint: false 710 stackSize: 0 711 offsetAdjustment: 0 712 maxAlignment: 0 713 adjustsStack: false 714 hasCalls: false 715 maxCallFrameSize: 0 716 hasOpaqueSPAdjustment: false 717 hasVAStart: false 718 hasMustTailInVarArgFunc: false 719body: | 720 bb.0 (%ir-block.0): 721 liveins: $rax, $rbp, $rbx 722 723 ; CHECK-LABEL: name: test_leab_rbp_leais_64_32 724 ; CHECK: liveins: $rax, $rbp, $rbx 725 ; CHECK: $ebx = LEA64_32r $noreg, 2, killed $rbp, 0, $noreg 726 ; CHECK: RET64 $ebx 727 $ebx = LEA64_32r killed $rbp, 1, killed $rbp, 0, $noreg 728 RET64 $ebx 729 730... 731--- 732name: test_leabi_rbp_leais_64_32 733alignment: 16 734exposesReturnsTwice: false 735legalized: false 736regBankSelected: false 737selected: false 738tracksRegLiveness: true 739liveins: 740 - { reg: '$rbx' } 741 - { reg: '$rbp' } 742frameInfo: 743 isFrameAddressTaken: false 744 isReturnAddressTaken: false 745 hasStackMap: false 746 hasPatchPoint: false 747 stackSize: 0 748 offsetAdjustment: 0 749 maxAlignment: 0 750 adjustsStack: false 751 hasCalls: false 752 maxCallFrameSize: 0 753 hasOpaqueSPAdjustment: false 754 hasVAStart: false 755 hasMustTailInVarArgFunc: false 756body: | 757 bb.0 (%ir-block.0): 758 liveins: $rax, $rbp, $rbx 759 760 ; CHECK-LABEL: name: test_leabi_rbp_leais_64_32 761 ; CHECK: liveins: $rax, $rbp, $rbx 762 ; CHECK: $ebx = LEA64_32r $noreg, 2, killed $rbp, 5, $noreg 763 ; CHECK: RET64 $ebx 764 $ebx = LEA64_32r killed $rbp, 1, killed $rbp, 5, $noreg 765 RET64 $ebx 766 767... 768--- 769name: testleaadd_rbp_index2_64_32 770alignment: 16 771exposesReturnsTwice: false 772legalized: false 773regBankSelected: false 774selected: false 775tracksRegLiveness: true 776liveins: 777 - { reg: '$rbx' } 778 - { reg: '$rbp' } 779frameInfo: 780 isFrameAddressTaken: false 781 isReturnAddressTaken: false 782 hasStackMap: false 783 hasPatchPoint: false 784 stackSize: 0 785 offsetAdjustment: 0 786 maxAlignment: 0 787 adjustsStack: false 788 hasCalls: false 789 maxCallFrameSize: 0 790 hasOpaqueSPAdjustment: false 791 hasVAStart: false 792 hasMustTailInVarArgFunc: false 793body: | 794 bb.0 (%ir-block.0): 795 liveins: $eax, $ebp, $ebx 796 797 ; CHECK-LABEL: name: testleaadd_rbp_index2_64_32 798 ; CHECK: liveins: $eax, $ebp, $ebx 799 ; CHECK: $ebx = LEA64_32r killed $rbp, 4, killed $rbp, 5, $noreg 800 ; CHECK: RET64 $ebx 801 $ebx = LEA64_32r killed $rbp, 4, killed $rbp, 5, $noreg 802 RET64 $ebx 803 804... 805--- 806name: test2addi32_64 807alignment: 16 808exposesReturnsTwice: false 809legalized: false 810regBankSelected: false 811selected: false 812tracksRegLiveness: true 813liveins: 814 - { reg: '$rax' } 815 - { reg: '$rbp' } 816frameInfo: 817 isFrameAddressTaken: false 818 isReturnAddressTaken: false 819 hasStackMap: false 820 hasPatchPoint: false 821 stackSize: 0 822 offsetAdjustment: 0 823 maxAlignment: 0 824 adjustsStack: false 825 hasCalls: false 826 maxCallFrameSize: 0 827 hasOpaqueSPAdjustment: false 828 hasVAStart: false 829 hasMustTailInVarArgFunc: false 830body: | 831 bb.0 (%ir-block.0): 832 liveins: $rax, $rbp 833 834 ; CHECK-LABEL: name: test2addi32_64 835 ; CHECK: liveins: $rax, $rbp 836 ; CHECK: $rax = ADD64rr $rax, $rbp, implicit-def $eflags 837 ; CHECK: $rax = ADD64ri32 $rax, 129, implicit-def $eflags 838 ; CHECK: RET64 $eax 839 $rax = LEA64r killed $rax, 1, killed $rbp, 129, $noreg 840 RET64 $eax 841 842... 843--- 844name: test_leab_rbp_leais_64 845alignment: 16 846exposesReturnsTwice: false 847legalized: false 848regBankSelected: false 849selected: false 850tracksRegLiveness: true 851liveins: 852 - { reg: '$rax' } 853 - { reg: '$rbp' } 854frameInfo: 855 isFrameAddressTaken: false 856 isReturnAddressTaken: false 857 hasStackMap: false 858 hasPatchPoint: false 859 stackSize: 0 860 offsetAdjustment: 0 861 maxAlignment: 0 862 adjustsStack: false 863 hasCalls: false 864 maxCallFrameSize: 0 865 hasOpaqueSPAdjustment: false 866 hasVAStart: false 867 hasMustTailInVarArgFunc: false 868body: | 869 bb.0 (%ir-block.0): 870 liveins: $rax, $rbp, $rbx 871 872 ; CHECK-LABEL: name: test_leab_rbp_leais_64 873 ; CHECK: liveins: $rax, $rbp, $rbx 874 ; CHECK: $rbx = LEA64r $noreg, 2, $rbp, 0, $noreg 875 ; CHECK: RET64 $ebx 876 $rbx = LEA64r killed $rbp, 1, $rbp, 0, $noreg 877 RET64 $ebx 878 879... 880--- 881name: test_leabi_rbp_leais_64 882alignment: 16 883exposesReturnsTwice: false 884legalized: false 885regBankSelected: false 886selected: false 887tracksRegLiveness: true 888liveins: 889 - { reg: '$rbx' } 890 - { reg: '$rbp' } 891frameInfo: 892 isFrameAddressTaken: false 893 isReturnAddressTaken: false 894 hasStackMap: false 895 hasPatchPoint: false 896 stackSize: 0 897 offsetAdjustment: 0 898 maxAlignment: 0 899 adjustsStack: false 900 hasCalls: false 901 maxCallFrameSize: 0 902 hasOpaqueSPAdjustment: false 903 hasVAStart: false 904 hasMustTailInVarArgFunc: false 905body: | 906 bb.0 (%ir-block.0): 907 liveins: $rax, $rbp, $rbx 908 909 ; CHECK-LABEL: name: test_leabi_rbp_leais_64 910 ; CHECK: liveins: $rax, $rbp, $rbx 911 ; CHECK: $rbx = LEA64r $noreg, 2, $rbp, 5, $noreg 912 ; CHECK: RET64 $ebx 913 $rbx = LEA64r $rbp, 1, $rbp, 5, $noreg 914 RET64 $ebx 915 916... 917--- 918name: testleaadd_rbp_index2_64 919alignment: 16 920exposesReturnsTwice: false 921legalized: false 922regBankSelected: false 923selected: false 924tracksRegLiveness: true 925liveins: 926 - { reg: '$rbx' } 927 - { reg: '$rbp' } 928frameInfo: 929 isFrameAddressTaken: false 930 isReturnAddressTaken: false 931 hasStackMap: false 932 hasPatchPoint: false 933 stackSize: 0 934 offsetAdjustment: 0 935 maxAlignment: 0 936 adjustsStack: false 937 hasCalls: false 938 maxCallFrameSize: 0 939 hasOpaqueSPAdjustment: false 940 hasVAStart: false 941 hasMustTailInVarArgFunc: false 942body: | 943 bb.0 (%ir-block.0): 944 liveins: $rax, $rbp, $rbx 945 946 ; CHECK-LABEL: name: testleaadd_rbp_index2_64 947 ; CHECK: liveins: $rax, $rbp, $rbx 948 ; CHECK: $rbx = LEA64r $noreg, 4, $rbp, 5, $noreg 949 ; CHECK: $rbx = ADD64rr $rbx, $rbp, implicit-def $eflags 950 ; CHECK: RET64 $ebx 951 $rbx = LEA64r $rbp, 4, $rbp, 5, $noreg 952 RET64 $ebx 953 954... 955--- 956name: test_skip_opt_64 957alignment: 16 958exposesReturnsTwice: false 959legalized: false 960regBankSelected: false 961selected: false 962tracksRegLiveness: true 963liveins: 964 - { reg: '$rbx' } 965 - { reg: '$rbp' } 966frameInfo: 967 isFrameAddressTaken: false 968 isReturnAddressTaken: false 969 hasStackMap: false 970 hasPatchPoint: false 971 stackSize: 0 972 offsetAdjustment: 0 973 maxAlignment: 0 974 adjustsStack: false 975 hasCalls: false 976 maxCallFrameSize: 0 977 hasOpaqueSPAdjustment: false 978 hasVAStart: false 979 hasMustTailInVarArgFunc: false 980body: | 981 bb.0 (%ir-block.0): 982 liveins: $rax, $rbp, $rbx 983 984 ; CHECK-LABEL: name: test_skip_opt_64 985 ; CHECK: liveins: $rax, $rbp, $rbx 986 ; CHECK: $rbp = LEA64r killed $rbp, 4, killed $rbp, 0, $noreg 987 ; CHECK: RET64 $ebp 988 $rbp = LEA64r killed $rbp, 4, killed $rbp, 0, $noreg 989 RET64 $ebp 990 991... 992--- 993name: test_skip_eflags_64 994alignment: 16 995exposesReturnsTwice: false 996legalized: false 997regBankSelected: false 998selected: false 999tracksRegLiveness: true 1000liveins: 1001 - { reg: '$rbp' } 1002 - { reg: '$rax' } 1003frameInfo: 1004 isFrameAddressTaken: false 1005 isReturnAddressTaken: false 1006 hasStackMap: false 1007 hasPatchPoint: false 1008 stackSize: 0 1009 offsetAdjustment: 0 1010 maxAlignment: 0 1011 adjustsStack: false 1012 hasCalls: false 1013 maxCallFrameSize: 0 1014 hasOpaqueSPAdjustment: false 1015 hasVAStart: false 1016 hasMustTailInVarArgFunc: false 1017body: | 1018 ; CHECK-LABEL: name: test_skip_eflags_64 1019 ; CHECK: bb.0 (%ir-block.0): 1020 ; CHECK: successors: %bb.1(0x80000000) 1021 ; CHECK: liveins: $rax, $rbp, $rbx 1022 ; CHECK: CMP64rr $rax, killed $rbx, implicit-def $eflags 1023 ; CHECK: $rbx = LEA64r killed $rax, 4, killed $rax, 5, $noreg 1024 ; CHECK: JCC_1 %bb.1, 4, implicit $eflags 1025 ; CHECK: RET64 $ebx 1026 ; CHECK: bb.1: 1027 ; CHECK: liveins: $rax, $rbp, $rbx 1028 ; CHECK: $rbp = LEA64r killed $rbx, 4, killed $rbx, 0, $noreg 1029 ; CHECK: $rbp = ADD64ri32 $rbp, 5, implicit-def $eflags 1030 ; CHECK: RET64 $ebp 1031 bb.0 (%ir-block.0): 1032 liveins: $rax, $rbp, $rbx 1033 1034 CMP64rr $rax, killed $rbx, implicit-def $eflags 1035 $rbx = LEA64r killed $rax, 4, killed $rax, 5, $noreg 1036 JCC_1 %bb.1, 4, implicit $eflags 1037 RET64 $ebx 1038 bb.1: 1039 liveins: $rax, $rbp, $rbx 1040 $rbp = LEA64r killed $rbx, 4, killed $rbx, 5, $noreg 1041 RET64 $ebp 1042 1043... 1044--- 1045name: test_skip_opt_64_32 1046alignment: 16 1047exposesReturnsTwice: false 1048legalized: false 1049regBankSelected: false 1050selected: false 1051tracksRegLiveness: true 1052liveins: 1053 - { reg: '$rbx' } 1054 - { reg: '$rbp' } 1055frameInfo: 1056 isFrameAddressTaken: false 1057 isReturnAddressTaken: false 1058 hasStackMap: false 1059 hasPatchPoint: false 1060 stackSize: 0 1061 offsetAdjustment: 0 1062 maxAlignment: 0 1063 adjustsStack: false 1064 hasCalls: false 1065 maxCallFrameSize: 0 1066 hasOpaqueSPAdjustment: false 1067 hasVAStart: false 1068 hasMustTailInVarArgFunc: false 1069body: | 1070 bb.0 (%ir-block.0): 1071 liveins: $rax, $rbp, $rbx 1072 1073 ; CHECK-LABEL: name: test_skip_opt_64_32 1074 ; CHECK: liveins: $rax, $rbp, $rbx 1075 ; CHECK: $ebp = LEA64_32r killed $rbp, 4, killed $rbp, 0, $noreg 1076 ; CHECK: RET64 $ebp 1077 $ebp = LEA64_32r killed $rbp, 4, killed $rbp, 0, $noreg 1078 RET64 $ebp 1079 1080... 1081--- 1082name: test_skip_eflags_64_32 1083alignment: 16 1084exposesReturnsTwice: false 1085legalized: false 1086regBankSelected: false 1087selected: false 1088tracksRegLiveness: true 1089liveins: 1090 - { reg: '$rbp' } 1091 - { reg: '$rax' } 1092frameInfo: 1093 isFrameAddressTaken: false 1094 isReturnAddressTaken: false 1095 hasStackMap: false 1096 hasPatchPoint: false 1097 stackSize: 0 1098 offsetAdjustment: 0 1099 maxAlignment: 0 1100 adjustsStack: false 1101 hasCalls: false 1102 maxCallFrameSize: 0 1103 hasOpaqueSPAdjustment: false 1104 hasVAStart: false 1105 hasMustTailInVarArgFunc: false 1106body: | 1107 ; CHECK-LABEL: name: test_skip_eflags_64_32 1108 ; CHECK: bb.0 (%ir-block.0): 1109 ; CHECK: successors: %bb.1(0x80000000) 1110 ; CHECK: liveins: $rax, $rbp, $rbx 1111 ; CHECK: CMP64rr $rax, killed $rbx, implicit-def $eflags 1112 ; CHECK: $ebx = LEA64_32r killed $rax, 4, killed $rax, 5, $noreg 1113 ; CHECK: JCC_1 %bb.1, 4, implicit $eflags 1114 ; CHECK: RET64 $ebx 1115 ; CHECK: bb.1: 1116 ; CHECK: liveins: $rax, $rbp, $rbx 1117 ; CHECK: $ebp = LEA64_32r killed $rbx, 4, killed $rbx, 0, $noreg 1118 ; CHECK: $ebp = ADD32ri $ebp, 5, implicit-def $eflags 1119 ; CHECK: RET64 $ebp 1120 bb.0 (%ir-block.0): 1121 liveins: $rax, $rbp, $rbx 1122 1123 CMP64rr $rax, killed $rbx, implicit-def $eflags 1124 $ebx = LEA64_32r killed $rax, 4, killed $rax, 5, $noreg 1125 JCC_1 %bb.1, 4, implicit $eflags 1126 RET64 $ebx 1127 bb.1: 1128 liveins: $rax, $rbp, $rbx 1129 $ebp = LEA64_32r killed $rbx, 4, killed $rbx, 5, $noreg 1130 RET64 $ebp 1131 1132... 1133--- 1134name: pr43758 1135alignment: 16 1136exposesReturnsTwice: false 1137legalized: false 1138regBankSelected: false 1139selected: false 1140tracksRegLiveness: true 1141liveins: 1142 - { reg: '$rax' } 1143 - { reg: '$rbp' } 1144frameInfo: 1145 isFrameAddressTaken: false 1146 isReturnAddressTaken: false 1147 hasStackMap: false 1148 hasPatchPoint: false 1149 stackSize: 0 1150 offsetAdjustment: 0 1151 maxAlignment: 0 1152 adjustsStack: false 1153 hasCalls: false 1154 maxCallFrameSize: 0 1155 hasOpaqueSPAdjustment: false 1156 hasVAStart: false 1157 hasMustTailInVarArgFunc: false 1158body: | 1159 bb.0 (%ir-block.0): 1160 liveins: $rax, $rbp 1161 1162 ; CHECK-LABEL: name: pr43758 1163 ; CHECK: liveins: $rax, $rbp 1164 ; CHECK: DBG_VALUE 0, $noreg 1165 ; CHECK: NOOP 1166 ; CHECK: NOOP 1167 ; CHECK: NOOP 1168 ; CHECK: NOOP 1169 ; CHECK: $ebp = ADD32rr $ebp, $eax, implicit-def $eflags, implicit $rbp, implicit $rax 1170 ; CHECK: NOOP 1171 ; CHECK: NOOP 1172 ; CHECK: NOOP 1173 ; CHECK: NOOP 1174 ; CHECK: RET64 $ebp 1175 DBG_VALUE 0, $noreg 1176 NOOP 1177 NOOP 1178 NOOP 1179 NOOP 1180 $ebp = LEA64_32r killed $rbp, 1, killed $rax, 0, $noreg 1181 NOOP 1182 NOOP 1183 NOOP 1184 NOOP 1185 RET64 $ebp 1186 1187... 1188... 1189 1190 1191 1192