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 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 = ADD32ri8 $eax, -5, implicit-def $eflags 190 ; CHECK: RETQ $eax 191 $eax = LEA64_32r killed $rax, 1, killed $rbp, -5, $noreg 192 RETQ $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 = ADD32ri8 $ebp, -5, implicit-def $eflags 228 ; CHECK: RETQ $ebp 229 $ebp = LEA64_32r killed $rbp, 1, killed $rax, -5, $noreg 230 RETQ $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: RETQ $ebp 266 $ebp = LEA64_32r killed $rbp, 1, killed $rax, 0, $noreg 267 RETQ $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 = ADD64ri8 $rax, -5, implicit-def $eflags 303 ; CHECK: RETQ $eax 304 $rax = LEA64r killed $rax, 1, killed $rbp, -5, $noreg 305 RETQ $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 = ADD64ri8 $rbp, -5, implicit-def $eflags 341 ; CHECK: RETQ $ebp 342 $rbp = LEA64r killed $rbp, 1, killed $rax, -5, $noreg 343 RETQ $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: RETQ $ebp 379 $rbp = LEA64r killed $rbp, 1, killed $rax, 0, $noreg 380 RETQ $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 = ADD32ri8 $ebx, -5, implicit-def $eflags 417 ; CHECK: RETQ $ebx 418 $ebx = LEA64_32r killed $rax, 1, killed $rbp, -5, $noreg 419 RETQ $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 = ADD32ri8 $ebx, -5, implicit-def $eflags 456 ; CHECK: RETQ $ebx 457 $ebx = LEA64_32r killed $rbp, 1, killed $rax, -5, $noreg 458 RETQ $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: RETQ $ebx 495 $ebx = LEA64_32r killed $rbp, 1, killed $rax, 0, $noreg 496 RETQ $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 = ADD64ri8 $rbx, -5, implicit-def $eflags 533 ; CHECK: RETQ $ebx 534 $rbx = LEA64r killed $rax, 1, killed $rbp, -5, $noreg 535 RETQ $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 = ADD64ri8 $rbx, -5, implicit-def $eflags 572 ; CHECK: RETQ $ebx 573 $rbx = LEA64r killed $rbp, 1, killed $rax, -5, $noreg 574 RETQ $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: RETQ $ebx 611 $rbx = LEA64r killed $rbp, 1, killed $rax, 0, $noreg 612 RETQ $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: RETQ $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 RETQ $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: RETQ $eax 690 $eax = LEA64_32r killed $rax, 1, killed $rbp, 129, $noreg 691 RETQ $eax 692 693... 694--- 695name: test1mov1add_rbp_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: test1mov1add_rbp_64_32 724 ; CHECK: liveins: $rax, $rbp, $rbx 725 ; CHECK: $ebx = LEA64_32r killed $rbp, 1, killed $rbp, 0, $noreg 726 ; CHECK: RETQ $ebx 727 $ebx = LEA64_32r killed $rbp, 1, killed $rbp, 0, $noreg 728 RETQ $ebx 729 730... 731--- 732name: testleaadd_rbp_index_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: testleaadd_rbp_index_64_32 761 ; CHECK: liveins: $rax, $rbp, $rbx 762 ; CHECK: $ebx = LEA64_32r killed $rbp, 1, killed $rbp, 5, $noreg 763 ; CHECK: RETQ $ebx 764 $ebx = LEA64_32r killed $rbp, 1, killed $rbp, 5, $noreg 765 RETQ $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: RETQ $ebx 801 $ebx = LEA64_32r killed $rbp, 4, killed $rbp, 5, $noreg 802 RETQ $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: RETQ $eax 839 $rax = LEA64r killed $rax, 1, killed $rbp, 129, $noreg 840 RETQ $eax 841 842... 843--- 844name: test1mov1add_rbp_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: test1mov1add_rbp_64 873 ; CHECK: liveins: $rax, $rbp, $rbx 874 ; CHECK: $rbx = MOV64rr $rbp 875 ; CHECK: $rbx = ADD64rr $rbx, $rbp, implicit-def $eflags 876 ; CHECK: $rbx = LEA64r killed $rbp, 1, $rbp, 0, $noreg 877 ; CHECK: RETQ $ebx 878 $rbx = LEA64r killed $rbp, 1, $rbp, 0, $noreg 879 RETQ $ebx 880 881... 882--- 883name: testleaadd_rbp_index_64 884alignment: 16 885exposesReturnsTwice: false 886legalized: false 887regBankSelected: false 888selected: false 889tracksRegLiveness: true 890liveins: 891 - { reg: '$rbx' } 892 - { reg: '$rbp' } 893frameInfo: 894 isFrameAddressTaken: false 895 isReturnAddressTaken: false 896 hasStackMap: false 897 hasPatchPoint: false 898 stackSize: 0 899 offsetAdjustment: 0 900 maxAlignment: 0 901 adjustsStack: false 902 hasCalls: false 903 maxCallFrameSize: 0 904 hasOpaqueSPAdjustment: false 905 hasVAStart: false 906 hasMustTailInVarArgFunc: false 907body: | 908 bb.0 (%ir-block.0): 909 liveins: $rax, $rbp, $rbx 910 911 ; CHECK-LABEL: name: testleaadd_rbp_index_64 912 ; CHECK: liveins: $rax, $rbp, $rbx 913 ; CHECK: $rbx = LEA64r $noreg, 1, $rbp, 5, $noreg 914 ; CHECK: $rbx = ADD64rr $rbx, $rbp, implicit-def $eflags 915 ; CHECK: RETQ $ebx 916 $rbx = LEA64r $rbp, 1, $rbp, 5, $noreg 917 RETQ $ebx 918 919... 920--- 921name: testleaadd_rbp_index2_64 922alignment: 16 923exposesReturnsTwice: false 924legalized: false 925regBankSelected: false 926selected: false 927tracksRegLiveness: true 928liveins: 929 - { reg: '$rbx' } 930 - { reg: '$rbp' } 931frameInfo: 932 isFrameAddressTaken: false 933 isReturnAddressTaken: false 934 hasStackMap: false 935 hasPatchPoint: false 936 stackSize: 0 937 offsetAdjustment: 0 938 maxAlignment: 0 939 adjustsStack: false 940 hasCalls: false 941 maxCallFrameSize: 0 942 hasOpaqueSPAdjustment: false 943 hasVAStart: false 944 hasMustTailInVarArgFunc: false 945body: | 946 bb.0 (%ir-block.0): 947 liveins: $rax, $rbp, $rbx 948 949 ; CHECK-LABEL: name: testleaadd_rbp_index2_64 950 ; CHECK: liveins: $rax, $rbp, $rbx 951 ; CHECK: $rbx = LEA64r $noreg, 4, $rbp, 5, $noreg 952 ; CHECK: $rbx = ADD64rr $rbx, $rbp, implicit-def $eflags 953 ; CHECK: RETQ $ebx 954 $rbx = LEA64r $rbp, 4, $rbp, 5, $noreg 955 RETQ $ebx 956 957... 958--- 959name: test_skip_opt_64 960alignment: 16 961exposesReturnsTwice: false 962legalized: false 963regBankSelected: false 964selected: false 965tracksRegLiveness: true 966liveins: 967 - { reg: '$rbx' } 968 - { reg: '$rbp' } 969frameInfo: 970 isFrameAddressTaken: false 971 isReturnAddressTaken: false 972 hasStackMap: false 973 hasPatchPoint: false 974 stackSize: 0 975 offsetAdjustment: 0 976 maxAlignment: 0 977 adjustsStack: false 978 hasCalls: false 979 maxCallFrameSize: 0 980 hasOpaqueSPAdjustment: false 981 hasVAStart: false 982 hasMustTailInVarArgFunc: false 983body: | 984 bb.0 (%ir-block.0): 985 liveins: $rax, $rbp, $rbx 986 987 ; CHECK-LABEL: name: test_skip_opt_64 988 ; CHECK: liveins: $rax, $rbp, $rbx 989 ; CHECK: $rbp = LEA64r killed $rbp, 4, killed $rbp, 0, $noreg 990 ; CHECK: RETQ $ebp 991 $rbp = LEA64r killed $rbp, 4, killed $rbp, 0, $noreg 992 RETQ $ebp 993 994... 995--- 996name: test_skip_eflags_64 997alignment: 16 998exposesReturnsTwice: false 999legalized: false 1000regBankSelected: false 1001selected: false 1002tracksRegLiveness: true 1003liveins: 1004 - { reg: '$rbp' } 1005 - { reg: '$rax' } 1006frameInfo: 1007 isFrameAddressTaken: false 1008 isReturnAddressTaken: false 1009 hasStackMap: false 1010 hasPatchPoint: false 1011 stackSize: 0 1012 offsetAdjustment: 0 1013 maxAlignment: 0 1014 adjustsStack: false 1015 hasCalls: false 1016 maxCallFrameSize: 0 1017 hasOpaqueSPAdjustment: false 1018 hasVAStart: false 1019 hasMustTailInVarArgFunc: false 1020body: | 1021 ; CHECK-LABEL: name: test_skip_eflags_64 1022 ; CHECK: bb.0 (%ir-block.0): 1023 ; CHECK: successors: %bb.1(0x80000000) 1024 ; CHECK: liveins: $rax, $rbp, $rbx 1025 ; CHECK: CMP64rr $rax, killed $rbx, implicit-def $eflags 1026 ; CHECK: $rbx = LEA64r killed $rax, 4, killed $rax, 5, $noreg 1027 ; CHECK: JCC_1 %bb.1, 4, implicit $eflags 1028 ; CHECK: RETQ $ebx 1029 ; CHECK: bb.1: 1030 ; CHECK: liveins: $rax, $rbp, $rbx 1031 ; CHECK: $rbp = LEA64r killed $rbx, 4, killed $rbx, 0, $noreg 1032 ; CHECK: $rbp = ADD64ri8 $rbp, 5, implicit-def $eflags 1033 ; CHECK: RETQ $ebp 1034 bb.0 (%ir-block.0): 1035 liveins: $rax, $rbp, $rbx 1036 1037 CMP64rr $rax, killed $rbx, implicit-def $eflags 1038 $rbx = LEA64r killed $rax, 4, killed $rax, 5, $noreg 1039 JCC_1 %bb.1, 4, implicit $eflags 1040 RETQ $ebx 1041 bb.1: 1042 liveins: $rax, $rbp, $rbx 1043 $rbp = LEA64r killed $rbx, 4, killed $rbx, 5, $noreg 1044 RETQ $ebp 1045 1046... 1047--- 1048name: test_skip_opt_64_32 1049alignment: 16 1050exposesReturnsTwice: false 1051legalized: false 1052regBankSelected: false 1053selected: false 1054tracksRegLiveness: true 1055liveins: 1056 - { reg: '$rbx' } 1057 - { reg: '$rbp' } 1058frameInfo: 1059 isFrameAddressTaken: false 1060 isReturnAddressTaken: false 1061 hasStackMap: false 1062 hasPatchPoint: false 1063 stackSize: 0 1064 offsetAdjustment: 0 1065 maxAlignment: 0 1066 adjustsStack: false 1067 hasCalls: false 1068 maxCallFrameSize: 0 1069 hasOpaqueSPAdjustment: false 1070 hasVAStart: false 1071 hasMustTailInVarArgFunc: false 1072body: | 1073 bb.0 (%ir-block.0): 1074 liveins: $rax, $rbp, $rbx 1075 1076 ; CHECK-LABEL: name: test_skip_opt_64_32 1077 ; CHECK: liveins: $rax, $rbp, $rbx 1078 ; CHECK: $ebp = LEA64_32r killed $rbp, 4, killed $rbp, 0, $noreg 1079 ; CHECK: RETQ $ebp 1080 $ebp = LEA64_32r killed $rbp, 4, killed $rbp, 0, $noreg 1081 RETQ $ebp 1082 1083... 1084--- 1085name: test_skip_eflags_64_32 1086alignment: 16 1087exposesReturnsTwice: false 1088legalized: false 1089regBankSelected: false 1090selected: false 1091tracksRegLiveness: true 1092liveins: 1093 - { reg: '$rbp' } 1094 - { reg: '$rax' } 1095frameInfo: 1096 isFrameAddressTaken: false 1097 isReturnAddressTaken: false 1098 hasStackMap: false 1099 hasPatchPoint: false 1100 stackSize: 0 1101 offsetAdjustment: 0 1102 maxAlignment: 0 1103 adjustsStack: false 1104 hasCalls: false 1105 maxCallFrameSize: 0 1106 hasOpaqueSPAdjustment: false 1107 hasVAStart: false 1108 hasMustTailInVarArgFunc: false 1109body: | 1110 ; CHECK-LABEL: name: test_skip_eflags_64_32 1111 ; CHECK: bb.0 (%ir-block.0): 1112 ; CHECK: successors: %bb.1(0x80000000) 1113 ; CHECK: liveins: $rax, $rbp, $rbx 1114 ; CHECK: CMP64rr $rax, killed $rbx, implicit-def $eflags 1115 ; CHECK: $ebx = LEA64_32r killed $rax, 4, killed $rax, 5, $noreg 1116 ; CHECK: JCC_1 %bb.1, 4, implicit $eflags 1117 ; CHECK: RETQ $ebx 1118 ; CHECK: bb.1: 1119 ; CHECK: liveins: $rax, $rbp, $rbx 1120 ; CHECK: $ebp = LEA64_32r killed $rbx, 4, killed $rbx, 0, $noreg 1121 ; CHECK: $ebp = ADD32ri8 $ebp, 5, implicit-def $eflags 1122 ; CHECK: RETQ $ebp 1123 bb.0 (%ir-block.0): 1124 liveins: $rax, $rbp, $rbx 1125 1126 CMP64rr $rax, killed $rbx, implicit-def $eflags 1127 $ebx = LEA64_32r killed $rax, 4, killed $rax, 5, $noreg 1128 JCC_1 %bb.1, 4, implicit $eflags 1129 RETQ $ebx 1130 bb.1: 1131 liveins: $rax, $rbp, $rbx 1132 $ebp = LEA64_32r killed $rbx, 4, killed $rbx, 5, $noreg 1133 RETQ $ebp 1134 1135... 1136--- 1137name: pr43758 1138alignment: 16 1139exposesReturnsTwice: false 1140legalized: false 1141regBankSelected: false 1142selected: false 1143tracksRegLiveness: true 1144liveins: 1145 - { reg: '$rax' } 1146 - { reg: '$rbp' } 1147frameInfo: 1148 isFrameAddressTaken: false 1149 isReturnAddressTaken: false 1150 hasStackMap: false 1151 hasPatchPoint: false 1152 stackSize: 0 1153 offsetAdjustment: 0 1154 maxAlignment: 0 1155 adjustsStack: false 1156 hasCalls: false 1157 maxCallFrameSize: 0 1158 hasOpaqueSPAdjustment: false 1159 hasVAStart: false 1160 hasMustTailInVarArgFunc: false 1161body: | 1162 bb.0 (%ir-block.0): 1163 liveins: $rax, $rbp 1164 1165 ; CHECK-LABEL: name: pr43758 1166 ; CHECK: liveins: $rax, $rbp 1167 ; CHECK: DBG_VALUE 0, $noreg 1168 ; CHECK: NOOP 1169 ; CHECK: NOOP 1170 ; CHECK: NOOP 1171 ; CHECK: NOOP 1172 ; CHECK: $ebp = LEA64_32r killed $rbp, 1, killed $rax, 0, $noreg 1173 ; CHECK: NOOP 1174 ; CHECK: NOOP 1175 ; CHECK: NOOP 1176 ; CHECK: NOOP 1177 ; CHECK: RETQ $ebp 1178 DBG_VALUE 0, $noreg 1179 NOOP 1180 NOOP 1181 NOOP 1182 NOOP 1183 $ebp = LEA64_32r killed $rbp, 1, killed $rax, 0, $noreg 1184 NOOP 1185 NOOP 1186 NOOP 1187 NOOP 1188 RETQ $ebp 1189 1190... 1191... 1192 1193 1194 1195