1192 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -run-pass x86-fixup-LEAs -mtriple=x86_64-gnu-unknown -verify-machineinstrs -mcpu=corei7-avx -o - %s | FileCheck %s3--- |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.mir8 9 ;testleaadd_64_32_1: 3 operands LEA64_32r cannot be replaced with 2 add instructions10 ; but can be replaced with 1 lea + 1 add11 define i32 @testleaadd_64_32_1() {12 ret i32 013 }14 15 ;testleaadd_rbp_64_32_1: 3 operands LEA64_32r cannot be replaced with 2 add instructions16 ; where the base is rbp/r13/ebp register but it can be replaced with 1 lea + 1 add17 define i32 @testleaadd_rbp_64_32_1() {18 ret i32 019 }20 21 ;test1lea_rbp_64_32_1: 2 operands LEA64_32r where base register is rbp/r13/ebp and can not22 ; be replaced with an add instruction but can be replaced with 1 lea instruction23 define i32 @test1lea_rbp_64_32_1() {24 ret i32 025 }26 27 ;test2add_64: 3 operands LEA64r that can be replaced with 2 add instructions28 define i32 @test2add_64() {29 ret i32 030 }31 32 ;test2add_rbp_64: 3 operands LEA64r that can be replaced with 2 add instructions33 ; where the base is rbp/r13/ebp register34 define i32 @test2add_rbp_64() {35 ret i32 036 }37 38 ;test1add_rbp_64: 2 operands LEA64r where base register is rbp/r13/ebp and can be replaced39 ; with an add instruction40 define i32 @test1add_rbp_64() {41 ret i32 042 }43 44 ;testleaadd_64_32: 3 operands LEA64_32r that can be replaced with 1 lea 1 add instructions45 define i32 @testleaadd_64_32() {46 ret i32 047 }48 49 ;testleaadd_rbp_64_32: 3 operands LEA64_32r that can be replaced with 1 lea 1 add instructions50 ; where the base is rbp/r13/ebp register51 define i32 @testleaadd_rbp_64_32() {52 ret i32 053 }54 55 ;test1lea_rbp_64_32: 2 operands LEA64_32r where base register is rbp/r13/ebp and can be replaced56 ; with a lea instruction57 define i32 @test1lea_rbp_64_32() {58 ret i32 059 }60 61 ;testleaadd_64: 3 operands LEA64r that can be replaced with 1 lea 1 add instructions62 define i32 @testleaadd_64() {63 ret i32 064 }65 66 ;testleaadd_rbp_64: 3 operands LEA64r that can be replaced with 1 lea 1 add instructions67 ; where the base is rbp/r13/ebp register68 define i32 @testleaadd_rbp_64() {69 ret i32 070 }71 72 ;test1lea_rbp_64: 2 operands LEA64r wher base register is rbp/r13/ebp and can be replaced73 ; with a lea instruction74 define i32 @test1lea_rbp_64() {75 ret i32 076 }77 78 ;test8: dst = base & scale!=1, can't optimize79 define i32 @test8() {80 ret i32 081 }82 83 ;testleaaddi32_64_32: 3 operands LEA64_32r that can be replaced with 1 lea + 1 add instructions where84 ; ADD64ri32 is chosen85 define i32 @testleaaddi32_64_32() {86 ret i32 087 }88 89 ;test_leab_rbp_leais_64_32: 2 operands LEA64_32r that can be replaced with LEA_IS form90 ; where the base is rbp/r13/ebp register91 define i32 @test_leab_rbp_leais_64_32() {92 ret i32 093 }94 95 ;test_leabi_rbp_leais_64_32: 3 operands LEA64_32r that can be replaced with LEA_IS form96 ; where the base and the index are ebp register and there is offset97 define i32 @test_leabi_rbp_leais_64_32() {98 ret i32 099 }100 101 ;testleaadd_rbp_index2_64_32: 3 operands LEA64_32r that cannot replaced with 1 lea 1 add instructions102 ; where the base and the index are ebp register and there is scale103 define i32 @testleaadd_rbp_index2_64_32() {104 ret i32 0105 }106 107 ;test2addi32_64: 3 operands LEA64r that can be replaced with 2 add instructions where ADD64ri32108 ; is chosen109 define i32 @test2addi32_64() {110 ret i32 0111 }112 113 ;test_leab_rbp_leais_64: 2 operands LEA64r that can be replaced with LEA_IS form114 ; where the base is rbp/r13/ebp register115 define i32 @test_leab_rbp_leais_64() {116 ret i32 0117 }118 119 ;test_leabi_rbp_leais_64: 3 operands LEA64r that can be replaced with LEA_IS form120 ; where the base and the index are ebp register and there is offset121 define i32 @test_leabi_rbp_leais_64() {122 ret i32 0123 }124 125 ;testleaadd_rbp_index2_64: 3 operands LEA64r that can be replaced with 1 lea 1 add instructions126 ; where the base and the index are ebp register and there is scale127 define i32 @testleaadd_rbp_index2_64() {128 ret i32 0129 }130 131 ;test_skip_opt_64: 3 operands LEA64r that can not be replaced with 2 instructions132 define i32 @test_skip_opt_64() {133 ret i32 0134 }135 136 ;test_skip_eflags_64: LEA64r that cannot be replaced since its not safe to clobber eflags137 define i32 @test_skip_eflags_64() {138 ret i32 0139 }140 141 ;test_skip_opt_64_32: 3 operands LEA64_32r that can not be replaced with 2 instructions142 define i32 @test_skip_opt_64_32() {143 ret i32 0144 }145 146 ;test_skip_eflags_64_32: LEA64_32r that cannot be replaced since its not safe to clobber eflags147 define i32 @test_skip_eflags_64_32() {148 ret i32 0149 }150 151 define i32 @pr43758() {152 ret i32 0153 }154 155 156...157---158name: testleaadd_64_32_1159alignment: 16160exposesReturnsTwice: false161legalized: false162regBankSelected: false163selected: false164tracksRegLiveness: true165liveins:166 - { reg: '$rax' }167 - { reg: '$rbp' }168frameInfo:169 isFrameAddressTaken: false170 isReturnAddressTaken: false171 hasStackMap: false172 hasPatchPoint: false173 stackSize: 0174 offsetAdjustment: 0175 maxAlignment: 0176 adjustsStack: false177 hasCalls: false178 maxCallFrameSize: 0179 hasOpaqueSPAdjustment: false180 hasVAStart: false181 hasMustTailInVarArgFunc: false182body: |183 bb.0 (%ir-block.0):184 liveins: $rax, $rbp185 186 ; CHECK-LABEL: name: testleaadd_64_32_1187 ; CHECK: liveins: $rax, $rbp188 ; CHECK: $eax = ADD32rr $eax, $ebp, implicit-def $eflags, implicit $rax, implicit $rbp189 ; CHECK: $eax = ADD32ri $eax, -5, implicit-def $eflags190 ; CHECK: RET64 $eax191 $eax = LEA64_32r killed $rax, 1, killed $rbp, -5, $noreg192 RET64 $eax193 194...195---196name: testleaadd_rbp_64_32_1197alignment: 16198exposesReturnsTwice: false199legalized: false200regBankSelected: false201selected: false202tracksRegLiveness: true203liveins:204 - { reg: '$rax' }205 - { reg: '$rbp' }206frameInfo:207 isFrameAddressTaken: false208 isReturnAddressTaken: false209 hasStackMap: false210 hasPatchPoint: false211 stackSize: 0212 offsetAdjustment: 0213 maxAlignment: 0214 adjustsStack: false215 hasCalls: false216 maxCallFrameSize: 0217 hasOpaqueSPAdjustment: false218 hasVAStart: false219 hasMustTailInVarArgFunc: false220body: |221 bb.0 (%ir-block.0):222 liveins: $rax, $rbp223 224 ; CHECK-LABEL: name: testleaadd_rbp_64_32_1225 ; CHECK: liveins: $rax, $rbp226 ; CHECK: $ebp = ADD32rr $ebp, $eax, implicit-def $eflags, implicit $rbp, implicit $rax227 ; CHECK: $ebp = ADD32ri $ebp, -5, implicit-def $eflags228 ; CHECK: RET64 $ebp229 $ebp = LEA64_32r killed $rbp, 1, killed $rax, -5, $noreg230 RET64 $ebp231 232...233---234name: test1lea_rbp_64_32_1235alignment: 16236exposesReturnsTwice: false237legalized: false238regBankSelected: false239selected: false240tracksRegLiveness: true241liveins:242 - { reg: '$rax' }243 - { reg: '$rbp' }244frameInfo:245 isFrameAddressTaken: false246 isReturnAddressTaken: false247 hasStackMap: false248 hasPatchPoint: false249 stackSize: 0250 offsetAdjustment: 0251 maxAlignment: 0252 adjustsStack: false253 hasCalls: false254 maxCallFrameSize: 0255 hasOpaqueSPAdjustment: false256 hasVAStart: false257 hasMustTailInVarArgFunc: false258body: |259 bb.0 (%ir-block.0):260 liveins: $rax, $rbp261 262 ; CHECK-LABEL: name: test1lea_rbp_64_32_1263 ; CHECK: liveins: $rax, $rbp264 ; CHECK: $ebp = ADD32rr $ebp, $eax, implicit-def $eflags, implicit $rbp, implicit $rax265 ; CHECK: RET64 $ebp266 $ebp = LEA64_32r killed $rbp, 1, killed $rax, 0, $noreg267 RET64 $ebp268 269...270---271name: test2add_64272alignment: 16273exposesReturnsTwice: false274legalized: false275regBankSelected: false276selected: false277tracksRegLiveness: true278liveins:279 - { reg: '$rax' }280 - { reg: '$rbp' }281frameInfo:282 isFrameAddressTaken: false283 isReturnAddressTaken: false284 hasStackMap: false285 hasPatchPoint: false286 stackSize: 0287 offsetAdjustment: 0288 maxAlignment: 0289 adjustsStack: false290 hasCalls: false291 maxCallFrameSize: 0292 hasOpaqueSPAdjustment: false293 hasVAStart: false294 hasMustTailInVarArgFunc: false295body: |296 bb.0 (%ir-block.0):297 liveins: $rax, $rbp298 299 ; CHECK-LABEL: name: test2add_64300 ; CHECK: liveins: $rax, $rbp301 ; CHECK: $rax = ADD64rr $rax, $rbp, implicit-def $eflags302 ; CHECK: $rax = ADD64ri32 $rax, -5, implicit-def $eflags303 ; CHECK: RET64 $eax304 $rax = LEA64r killed $rax, 1, killed $rbp, -5, $noreg305 RET64 $eax306 307...308---309name: test2add_rbp_64310alignment: 16311exposesReturnsTwice: false312legalized: false313regBankSelected: false314selected: false315tracksRegLiveness: true316liveins:317 - { reg: '$rax' }318 - { reg: '$rbp' }319frameInfo:320 isFrameAddressTaken: false321 isReturnAddressTaken: false322 hasStackMap: false323 hasPatchPoint: false324 stackSize: 0325 offsetAdjustment: 0326 maxAlignment: 0327 adjustsStack: false328 hasCalls: false329 maxCallFrameSize: 0330 hasOpaqueSPAdjustment: false331 hasVAStart: false332 hasMustTailInVarArgFunc: false333body: |334 bb.0 (%ir-block.0):335 liveins: $rax, $rbp336 337 ; CHECK-LABEL: name: test2add_rbp_64338 ; CHECK: liveins: $rax, $rbp339 ; CHECK: $rbp = ADD64rr $rbp, $rax, implicit-def $eflags340 ; CHECK: $rbp = ADD64ri32 $rbp, -5, implicit-def $eflags341 ; CHECK: RET64 $ebp342 $rbp = LEA64r killed $rbp, 1, killed $rax, -5, $noreg343 RET64 $ebp344 345...346---347name: test1add_rbp_64348alignment: 16349exposesReturnsTwice: false350legalized: false351regBankSelected: false352selected: false353tracksRegLiveness: true354liveins:355 - { reg: '$rax' }356 - { reg: '$rbp' }357frameInfo:358 isFrameAddressTaken: false359 isReturnAddressTaken: false360 hasStackMap: false361 hasPatchPoint: false362 stackSize: 0363 offsetAdjustment: 0364 maxAlignment: 0365 adjustsStack: false366 hasCalls: false367 maxCallFrameSize: 0368 hasOpaqueSPAdjustment: false369 hasVAStart: false370 hasMustTailInVarArgFunc: false371body: |372 bb.0 (%ir-block.0):373 liveins: $rax, $rbp374 375 ; CHECK-LABEL: name: test1add_rbp_64376 ; CHECK: liveins: $rax, $rbp377 ; CHECK: $rbp = ADD64rr $rbp, $rax, implicit-def $eflags378 ; CHECK: RET64 $ebp379 $rbp = LEA64r killed $rbp, 1, killed $rax, 0, $noreg380 RET64 $ebp381 382...383---384name: testleaadd_64_32385alignment: 16386exposesReturnsTwice: false387legalized: false388regBankSelected: false389selected: false390tracksRegLiveness: true391liveins:392 - { reg: '$rax' }393 - { reg: '$rbp' }394 - { reg: '$rbx' }395frameInfo:396 isFrameAddressTaken: false397 isReturnAddressTaken: false398 hasStackMap: false399 hasPatchPoint: false400 stackSize: 0401 offsetAdjustment: 0402 maxAlignment: 0403 adjustsStack: false404 hasCalls: false405 maxCallFrameSize: 0406 hasOpaqueSPAdjustment: false407 hasVAStart: false408 hasMustTailInVarArgFunc: false409body: |410 bb.0 (%ir-block.0):411 liveins: $rax, $rbp412 413 ; CHECK-LABEL: name: testleaadd_64_32414 ; CHECK: liveins: $rax, $rbp415 ; CHECK: $ebx = LEA64_32r killed $rax, 1, killed $rbp, 0, $noreg416 ; CHECK: $ebx = ADD32ri $ebx, -5, implicit-def $eflags417 ; CHECK: RET64 $ebx418 $ebx = LEA64_32r killed $rax, 1, killed $rbp, -5, $noreg419 RET64 $ebx420 421...422---423name: testleaadd_rbp_64_32424alignment: 16425exposesReturnsTwice: false426legalized: false427regBankSelected: false428selected: false429tracksRegLiveness: true430liveins:431 - { reg: '$rax' }432 - { reg: '$rbp' }433 - { reg: '$rbx' }434frameInfo:435 isFrameAddressTaken: false436 isReturnAddressTaken: false437 hasStackMap: false438 hasPatchPoint: false439 stackSize: 0440 offsetAdjustment: 0441 maxAlignment: 0442 adjustsStack: false443 hasCalls: false444 maxCallFrameSize: 0445 hasOpaqueSPAdjustment: false446 hasVAStart: false447 hasMustTailInVarArgFunc: false448body: |449 bb.0 (%ir-block.0):450 liveins: $rax, $rbp451 452 ; CHECK-LABEL: name: testleaadd_rbp_64_32453 ; CHECK: liveins: $rax, $rbp454 ; CHECK: $ebx = LEA64_32r killed $rax, 1, killed $rbp, 0, $noreg455 ; CHECK: $ebx = ADD32ri $ebx, -5, implicit-def $eflags456 ; CHECK: RET64 $ebx457 $ebx = LEA64_32r killed $rbp, 1, killed $rax, -5, $noreg458 RET64 $ebx459 460...461---462name: test1lea_rbp_64_32463alignment: 16464exposesReturnsTwice: false465legalized: false466regBankSelected: false467selected: false468tracksRegLiveness: true469liveins:470 - { reg: '$rax' }471 - { reg: '$rbp' }472 - { reg: '$rbx' }473frameInfo:474 isFrameAddressTaken: false475 isReturnAddressTaken: false476 hasStackMap: false477 hasPatchPoint: false478 stackSize: 0479 offsetAdjustment: 0480 maxAlignment: 0481 adjustsStack: false482 hasCalls: false483 maxCallFrameSize: 0484 hasOpaqueSPAdjustment: false485 hasVAStart: false486 hasMustTailInVarArgFunc: false487body: |488 bb.0 (%ir-block.0):489 liveins: $rax, $rbp490 491 ; CHECK-LABEL: name: test1lea_rbp_64_32492 ; CHECK: liveins: $rax, $rbp493 ; CHECK: $ebx = LEA64_32r killed $rax, 1, killed $rbp, 0, $noreg494 ; CHECK: RET64 $ebx495 $ebx = LEA64_32r killed $rbp, 1, killed $rax, 0, $noreg496 RET64 $ebx497 498...499---500name: testleaadd_64501alignment: 16502exposesReturnsTwice: false503legalized: false504regBankSelected: false505selected: false506tracksRegLiveness: true507liveins:508 - { reg: '$rax' }509 - { reg: '$rbp' }510 - { reg: '$rbx' }511frameInfo:512 isFrameAddressTaken: false513 isReturnAddressTaken: false514 hasStackMap: false515 hasPatchPoint: false516 stackSize: 0517 offsetAdjustment: 0518 maxAlignment: 0519 adjustsStack: false520 hasCalls: false521 maxCallFrameSize: 0522 hasOpaqueSPAdjustment: false523 hasVAStart: false524 hasMustTailInVarArgFunc: false525body: |526 bb.0 (%ir-block.0):527 liveins: $rax, $rbp528 529 ; CHECK-LABEL: name: testleaadd_64530 ; CHECK: liveins: $rax, $rbp531 ; CHECK: $rbx = LEA64r killed $rax, 1, killed $rbp, 0, $noreg532 ; CHECK: $rbx = ADD64ri32 $rbx, -5, implicit-def $eflags533 ; CHECK: RET64 $ebx534 $rbx = LEA64r killed $rax, 1, killed $rbp, -5, $noreg535 RET64 $ebx536 537...538---539name: testleaadd_rbp_64540alignment: 16541exposesReturnsTwice: false542legalized: false543regBankSelected: false544selected: false545tracksRegLiveness: true546liveins:547 - { reg: '$rax' }548 - { reg: '$rbp' }549 - { reg: '$rbx' }550frameInfo:551 isFrameAddressTaken: false552 isReturnAddressTaken: false553 hasStackMap: false554 hasPatchPoint: false555 stackSize: 0556 offsetAdjustment: 0557 maxAlignment: 0558 adjustsStack: false559 hasCalls: false560 maxCallFrameSize: 0561 hasOpaqueSPAdjustment: false562 hasVAStart: false563 hasMustTailInVarArgFunc: false564body: |565 bb.0 (%ir-block.0):566 liveins: $rax, $rbp567 568 ; CHECK-LABEL: name: testleaadd_rbp_64569 ; CHECK: liveins: $rax, $rbp570 ; CHECK: $rbx = LEA64r killed $rax, 1, killed $rbp, 0, $noreg571 ; CHECK: $rbx = ADD64ri32 $rbx, -5, implicit-def $eflags572 ; CHECK: RET64 $ebx573 $rbx = LEA64r killed $rbp, 1, killed $rax, -5, $noreg574 RET64 $ebx575 576...577---578name: test1lea_rbp_64579alignment: 16580exposesReturnsTwice: false581legalized: false582regBankSelected: false583selected: false584tracksRegLiveness: true585liveins:586 - { reg: '$rax' }587 - { reg: '$rbp' }588 - { reg: '$rbx' }589frameInfo:590 isFrameAddressTaken: false591 isReturnAddressTaken: false592 hasStackMap: false593 hasPatchPoint: false594 stackSize: 0595 offsetAdjustment: 0596 maxAlignment: 0597 adjustsStack: false598 hasCalls: false599 maxCallFrameSize: 0600 hasOpaqueSPAdjustment: false601 hasVAStart: false602 hasMustTailInVarArgFunc: false603body: |604 bb.0 (%ir-block.0):605 liveins: $rax, $rbp606 607 ; CHECK-LABEL: name: test1lea_rbp_64608 ; CHECK: liveins: $rax, $rbp609 ; CHECK: $rbx = LEA64r killed $rax, 1, killed $rbp, 0, $noreg610 ; CHECK: RET64 $ebx611 $rbx = LEA64r killed $rbp, 1, killed $rax, 0, $noreg612 RET64 $ebx613 614...615---616name: test8617alignment: 16618exposesReturnsTwice: false619legalized: false620regBankSelected: false621selected: false622tracksRegLiveness: true623liveins:624 - { reg: '$rdi' }625 - { reg: '$rbp' }626frameInfo:627 isFrameAddressTaken: false628 isReturnAddressTaken: false629 hasStackMap: false630 hasPatchPoint: false631 stackSize: 0632 offsetAdjustment: 0633 maxAlignment: 0634 adjustsStack: false635 hasCalls: false636 maxCallFrameSize: 0637 hasOpaqueSPAdjustment: false638 hasVAStart: false639 hasMustTailInVarArgFunc: false640body: |641 bb.0 (%ir-block.0):642 liveins: $rdi, $rbp643 ; CHECK-LABEL: name: test8644 ; CHECK: liveins: $rdi, $rbp645 ; CHECK: $rbp = KILL $rbp, implicit-def $rbp646 ; CHECK: $r13 = KILL $rdi, implicit-def $r13647 ; CHECK: $r12 = LEA64r $noreg, 2, killed $r13, 5, $noreg648 ; CHECK: $r12 = ADD64rr $r12, killed $rbp, implicit-def $eflags649 ; CHECK: RET64 $r12650 $rbp = KILL $rbp, implicit-def $rbp651 $r13 = KILL $rdi, implicit-def $r13652 $r12 = LEA64r killed $rbp, 2, killed $r13, 5, $noreg653 RET64 $r12654 655...656---657name: testleaaddi32_64_32658alignment: 16659exposesReturnsTwice: false660legalized: false661regBankSelected: false662selected: false663tracksRegLiveness: true664liveins:665 - { reg: '$rax' }666 - { reg: '$rbp' }667frameInfo:668 isFrameAddressTaken: false669 isReturnAddressTaken: false670 hasStackMap: false671 hasPatchPoint: false672 stackSize: 0673 offsetAdjustment: 0674 maxAlignment: 0675 adjustsStack: false676 hasCalls: false677 maxCallFrameSize: 0678 hasOpaqueSPAdjustment: false679 hasVAStart: false680 hasMustTailInVarArgFunc: false681body: |682 bb.0 (%ir-block.0):683 liveins: $rax, $rbp684 685 ; CHECK-LABEL: name: testleaaddi32_64_32686 ; CHECK: liveins: $rax, $rbp687 ; CHECK: $eax = ADD32rr $eax, $ebp, implicit-def $eflags, implicit $rax, implicit $rbp688 ; CHECK: $eax = ADD32ri $eax, 129, implicit-def $eflags689 ; CHECK: RET64 $eax690 $eax = LEA64_32r killed $rax, 1, killed $rbp, 129, $noreg691 RET64 $eax692 693...694---695name: test_leab_rbp_leais_64_32696alignment: 16697exposesReturnsTwice: false698legalized: false699regBankSelected: false700selected: false701tracksRegLiveness: true702liveins:703 - { reg: '$rax' }704 - { reg: '$rbp' }705frameInfo:706 isFrameAddressTaken: false707 isReturnAddressTaken: false708 hasStackMap: false709 hasPatchPoint: false710 stackSize: 0711 offsetAdjustment: 0712 maxAlignment: 0713 adjustsStack: false714 hasCalls: false715 maxCallFrameSize: 0716 hasOpaqueSPAdjustment: false717 hasVAStart: false718 hasMustTailInVarArgFunc: false719body: |720 bb.0 (%ir-block.0):721 liveins: $rax, $rbp, $rbx722 723 ; CHECK-LABEL: name: test_leab_rbp_leais_64_32724 ; CHECK: liveins: $rax, $rbp, $rbx725 ; CHECK: $ebx = LEA64_32r $noreg, 2, killed $rbp, 0, $noreg726 ; CHECK: RET64 $ebx727 $ebx = LEA64_32r killed $rbp, 1, killed $rbp, 0, $noreg728 RET64 $ebx729 730...731---732name: test_leabi_rbp_leais_64_32733alignment: 16734exposesReturnsTwice: false735legalized: false736regBankSelected: false737selected: false738tracksRegLiveness: true739liveins:740 - { reg: '$rbx' }741 - { reg: '$rbp' }742frameInfo:743 isFrameAddressTaken: false744 isReturnAddressTaken: false745 hasStackMap: false746 hasPatchPoint: false747 stackSize: 0748 offsetAdjustment: 0749 maxAlignment: 0750 adjustsStack: false751 hasCalls: false752 maxCallFrameSize: 0753 hasOpaqueSPAdjustment: false754 hasVAStart: false755 hasMustTailInVarArgFunc: false756body: |757 bb.0 (%ir-block.0):758 liveins: $rax, $rbp, $rbx759 760 ; CHECK-LABEL: name: test_leabi_rbp_leais_64_32761 ; CHECK: liveins: $rax, $rbp, $rbx762 ; CHECK: $ebx = LEA64_32r $noreg, 2, killed $rbp, 5, $noreg763 ; CHECK: RET64 $ebx764 $ebx = LEA64_32r killed $rbp, 1, killed $rbp, 5, $noreg765 RET64 $ebx766 767...768---769name: testleaadd_rbp_index2_64_32770alignment: 16771exposesReturnsTwice: false772legalized: false773regBankSelected: false774selected: false775tracksRegLiveness: true776liveins:777 - { reg: '$rbx' }778 - { reg: '$rbp' }779frameInfo:780 isFrameAddressTaken: false781 isReturnAddressTaken: false782 hasStackMap: false783 hasPatchPoint: false784 stackSize: 0785 offsetAdjustment: 0786 maxAlignment: 0787 adjustsStack: false788 hasCalls: false789 maxCallFrameSize: 0790 hasOpaqueSPAdjustment: false791 hasVAStart: false792 hasMustTailInVarArgFunc: false793body: |794 bb.0 (%ir-block.0):795 liveins: $eax, $ebp, $ebx796 797 ; CHECK-LABEL: name: testleaadd_rbp_index2_64_32798 ; CHECK: liveins: $eax, $ebp, $ebx799 ; CHECK: $ebx = LEA64_32r killed $rbp, 4, killed $rbp, 5, $noreg800 ; CHECK: RET64 $ebx801 $ebx = LEA64_32r killed $rbp, 4, killed $rbp, 5, $noreg802 RET64 $ebx803 804...805---806name: test2addi32_64807alignment: 16808exposesReturnsTwice: false809legalized: false810regBankSelected: false811selected: false812tracksRegLiveness: true813liveins:814 - { reg: '$rax' }815 - { reg: '$rbp' }816frameInfo:817 isFrameAddressTaken: false818 isReturnAddressTaken: false819 hasStackMap: false820 hasPatchPoint: false821 stackSize: 0822 offsetAdjustment: 0823 maxAlignment: 0824 adjustsStack: false825 hasCalls: false826 maxCallFrameSize: 0827 hasOpaqueSPAdjustment: false828 hasVAStart: false829 hasMustTailInVarArgFunc: false830body: |831 bb.0 (%ir-block.0):832 liveins: $rax, $rbp833 834 ; CHECK-LABEL: name: test2addi32_64835 ; CHECK: liveins: $rax, $rbp836 ; CHECK: $rax = ADD64rr $rax, $rbp, implicit-def $eflags837 ; CHECK: $rax = ADD64ri32 $rax, 129, implicit-def $eflags838 ; CHECK: RET64 $eax839 $rax = LEA64r killed $rax, 1, killed $rbp, 129, $noreg840 RET64 $eax841 842...843---844name: test_leab_rbp_leais_64845alignment: 16846exposesReturnsTwice: false847legalized: false848regBankSelected: false849selected: false850tracksRegLiveness: true851liveins:852 - { reg: '$rax' }853 - { reg: '$rbp' }854frameInfo:855 isFrameAddressTaken: false856 isReturnAddressTaken: false857 hasStackMap: false858 hasPatchPoint: false859 stackSize: 0860 offsetAdjustment: 0861 maxAlignment: 0862 adjustsStack: false863 hasCalls: false864 maxCallFrameSize: 0865 hasOpaqueSPAdjustment: false866 hasVAStart: false867 hasMustTailInVarArgFunc: false868body: |869 bb.0 (%ir-block.0):870 liveins: $rax, $rbp, $rbx871 872 ; CHECK-LABEL: name: test_leab_rbp_leais_64873 ; CHECK: liveins: $rax, $rbp, $rbx874 ; CHECK: $rbx = LEA64r $noreg, 2, $rbp, 0, $noreg875 ; CHECK: RET64 $ebx876 $rbx = LEA64r killed $rbp, 1, $rbp, 0, $noreg877 RET64 $ebx878 879...880---881name: test_leabi_rbp_leais_64882alignment: 16883exposesReturnsTwice: false884legalized: false885regBankSelected: false886selected: false887tracksRegLiveness: true888liveins:889 - { reg: '$rbx' }890 - { reg: '$rbp' }891frameInfo:892 isFrameAddressTaken: false893 isReturnAddressTaken: false894 hasStackMap: false895 hasPatchPoint: false896 stackSize: 0897 offsetAdjustment: 0898 maxAlignment: 0899 adjustsStack: false900 hasCalls: false901 maxCallFrameSize: 0902 hasOpaqueSPAdjustment: false903 hasVAStart: false904 hasMustTailInVarArgFunc: false905body: |906 bb.0 (%ir-block.0):907 liveins: $rax, $rbp, $rbx908 909 ; CHECK-LABEL: name: test_leabi_rbp_leais_64910 ; CHECK: liveins: $rax, $rbp, $rbx911 ; CHECK: $rbx = LEA64r $noreg, 2, $rbp, 5, $noreg912 ; CHECK: RET64 $ebx913 $rbx = LEA64r $rbp, 1, $rbp, 5, $noreg914 RET64 $ebx915 916...917---918name: testleaadd_rbp_index2_64919alignment: 16920exposesReturnsTwice: false921legalized: false922regBankSelected: false923selected: false924tracksRegLiveness: true925liveins:926 - { reg: '$rbx' }927 - { reg: '$rbp' }928frameInfo:929 isFrameAddressTaken: false930 isReturnAddressTaken: false931 hasStackMap: false932 hasPatchPoint: false933 stackSize: 0934 offsetAdjustment: 0935 maxAlignment: 0936 adjustsStack: false937 hasCalls: false938 maxCallFrameSize: 0939 hasOpaqueSPAdjustment: false940 hasVAStart: false941 hasMustTailInVarArgFunc: false942body: |943 bb.0 (%ir-block.0):944 liveins: $rax, $rbp, $rbx945 946 ; CHECK-LABEL: name: testleaadd_rbp_index2_64947 ; CHECK: liveins: $rax, $rbp, $rbx948 ; CHECK: $rbx = LEA64r $noreg, 4, $rbp, 5, $noreg949 ; CHECK: $rbx = ADD64rr $rbx, $rbp, implicit-def $eflags950 ; CHECK: RET64 $ebx951 $rbx = LEA64r $rbp, 4, $rbp, 5, $noreg952 RET64 $ebx953 954...955---956name: test_skip_opt_64957alignment: 16958exposesReturnsTwice: false959legalized: false960regBankSelected: false961selected: false962tracksRegLiveness: true963liveins:964 - { reg: '$rbx' }965 - { reg: '$rbp' }966frameInfo:967 isFrameAddressTaken: false968 isReturnAddressTaken: false969 hasStackMap: false970 hasPatchPoint: false971 stackSize: 0972 offsetAdjustment: 0973 maxAlignment: 0974 adjustsStack: false975 hasCalls: false976 maxCallFrameSize: 0977 hasOpaqueSPAdjustment: false978 hasVAStart: false979 hasMustTailInVarArgFunc: false980body: |981 bb.0 (%ir-block.0):982 liveins: $rax, $rbp, $rbx983 984 ; CHECK-LABEL: name: test_skip_opt_64985 ; CHECK: liveins: $rax, $rbp, $rbx986 ; CHECK: $rbp = LEA64r killed $rbp, 4, killed $rbp, 0, $noreg987 ; CHECK: RET64 $ebp988 $rbp = LEA64r killed $rbp, 4, killed $rbp, 0, $noreg989 RET64 $ebp990 991...992---993name: test_skip_eflags_64994alignment: 16995exposesReturnsTwice: false996legalized: false997regBankSelected: false998selected: false999tracksRegLiveness: true1000liveins:1001 - { reg: '$rbp' }1002 - { reg: '$rax' }1003frameInfo:1004 isFrameAddressTaken: false1005 isReturnAddressTaken: false1006 hasStackMap: false1007 hasPatchPoint: false1008 stackSize: 01009 offsetAdjustment: 01010 maxAlignment: 01011 adjustsStack: false1012 hasCalls: false1013 maxCallFrameSize: 01014 hasOpaqueSPAdjustment: false1015 hasVAStart: false1016 hasMustTailInVarArgFunc: false1017body: |1018 ; CHECK-LABEL: name: test_skip_eflags_641019 ; CHECK: bb.0 (%ir-block.0):1020 ; CHECK: successors: %bb.1(0x80000000)1021 ; CHECK: liveins: $rax, $rbp, $rbx1022 ; CHECK: CMP64rr $rax, killed $rbx, implicit-def $eflags1023 ; CHECK: $rbx = LEA64r killed $rax, 4, killed $rax, 5, $noreg1024 ; CHECK: JCC_1 %bb.1, 4, implicit $eflags1025 ; CHECK: RET64 $ebx1026 ; CHECK: bb.1:1027 ; CHECK: liveins: $rax, $rbp, $rbx1028 ; CHECK: $rbp = LEA64r killed $rbx, 4, killed $rbx, 0, $noreg1029 ; CHECK: $rbp = ADD64ri32 $rbp, 5, implicit-def $eflags1030 ; CHECK: RET64 $ebp1031 bb.0 (%ir-block.0):1032 liveins: $rax, $rbp, $rbx1033 1034 CMP64rr $rax, killed $rbx, implicit-def $eflags1035 $rbx = LEA64r killed $rax, 4, killed $rax, 5, $noreg1036 JCC_1 %bb.1, 4, implicit $eflags1037 RET64 $ebx1038 bb.1:1039 liveins: $rax, $rbp, $rbx1040 $rbp = LEA64r killed $rbx, 4, killed $rbx, 5, $noreg1041 RET64 $ebp1042 1043...1044---1045name: test_skip_opt_64_321046alignment: 161047exposesReturnsTwice: false1048legalized: false1049regBankSelected: false1050selected: false1051tracksRegLiveness: true1052liveins:1053 - { reg: '$rbx' }1054 - { reg: '$rbp' }1055frameInfo:1056 isFrameAddressTaken: false1057 isReturnAddressTaken: false1058 hasStackMap: false1059 hasPatchPoint: false1060 stackSize: 01061 offsetAdjustment: 01062 maxAlignment: 01063 adjustsStack: false1064 hasCalls: false1065 maxCallFrameSize: 01066 hasOpaqueSPAdjustment: false1067 hasVAStart: false1068 hasMustTailInVarArgFunc: false1069body: |1070 bb.0 (%ir-block.0):1071 liveins: $rax, $rbp, $rbx1072 1073 ; CHECK-LABEL: name: test_skip_opt_64_321074 ; CHECK: liveins: $rax, $rbp, $rbx1075 ; CHECK: $ebp = LEA64_32r killed $rbp, 4, killed $rbp, 0, $noreg1076 ; CHECK: RET64 $ebp1077 $ebp = LEA64_32r killed $rbp, 4, killed $rbp, 0, $noreg1078 RET64 $ebp1079 1080...1081---1082name: test_skip_eflags_64_321083alignment: 161084exposesReturnsTwice: false1085legalized: false1086regBankSelected: false1087selected: false1088tracksRegLiveness: true1089liveins:1090 - { reg: '$rbp' }1091 - { reg: '$rax' }1092frameInfo:1093 isFrameAddressTaken: false1094 isReturnAddressTaken: false1095 hasStackMap: false1096 hasPatchPoint: false1097 stackSize: 01098 offsetAdjustment: 01099 maxAlignment: 01100 adjustsStack: false1101 hasCalls: false1102 maxCallFrameSize: 01103 hasOpaqueSPAdjustment: false1104 hasVAStart: false1105 hasMustTailInVarArgFunc: false1106body: |1107 ; CHECK-LABEL: name: test_skip_eflags_64_321108 ; CHECK: bb.0 (%ir-block.0):1109 ; CHECK: successors: %bb.1(0x80000000)1110 ; CHECK: liveins: $rax, $rbp, $rbx1111 ; CHECK: CMP64rr $rax, killed $rbx, implicit-def $eflags1112 ; CHECK: $ebx = LEA64_32r killed $rax, 4, killed $rax, 5, $noreg1113 ; CHECK: JCC_1 %bb.1, 4, implicit $eflags1114 ; CHECK: RET64 $ebx1115 ; CHECK: bb.1:1116 ; CHECK: liveins: $rax, $rbp, $rbx1117 ; CHECK: $ebp = LEA64_32r killed $rbx, 4, killed $rbx, 0, $noreg1118 ; CHECK: $ebp = ADD32ri $ebp, 5, implicit-def $eflags1119 ; CHECK: RET64 $ebp1120 bb.0 (%ir-block.0):1121 liveins: $rax, $rbp, $rbx1122 1123 CMP64rr $rax, killed $rbx, implicit-def $eflags1124 $ebx = LEA64_32r killed $rax, 4, killed $rax, 5, $noreg1125 JCC_1 %bb.1, 4, implicit $eflags1126 RET64 $ebx1127 bb.1:1128 liveins: $rax, $rbp, $rbx1129 $ebp = LEA64_32r killed $rbx, 4, killed $rbx, 5, $noreg1130 RET64 $ebp1131 1132...1133---1134name: pr437581135alignment: 161136exposesReturnsTwice: false1137legalized: false1138regBankSelected: false1139selected: false1140tracksRegLiveness: true1141liveins:1142 - { reg: '$rax' }1143 - { reg: '$rbp' }1144frameInfo:1145 isFrameAddressTaken: false1146 isReturnAddressTaken: false1147 hasStackMap: false1148 hasPatchPoint: false1149 stackSize: 01150 offsetAdjustment: 01151 maxAlignment: 01152 adjustsStack: false1153 hasCalls: false1154 maxCallFrameSize: 01155 hasOpaqueSPAdjustment: false1156 hasVAStart: false1157 hasMustTailInVarArgFunc: false1158body: |1159 bb.0 (%ir-block.0):1160 liveins: $rax, $rbp1161 1162 ; CHECK-LABEL: name: pr437581163 ; CHECK: liveins: $rax, $rbp1164 ; CHECK: DBG_VALUE 0, $noreg1165 ; CHECK: NOOP1166 ; CHECK: NOOP1167 ; CHECK: NOOP1168 ; CHECK: NOOP1169 ; CHECK: $ebp = ADD32rr $ebp, $eax, implicit-def $eflags, implicit $rbp, implicit $rax1170 ; CHECK: NOOP1171 ; CHECK: NOOP1172 ; CHECK: NOOP1173 ; CHECK: NOOP1174 ; CHECK: RET64 $ebp1175 DBG_VALUE 0, $noreg1176 NOOP1177 NOOP1178 NOOP1179 NOOP1180 $ebp = LEA64_32r killed $rbp, 1, killed $rax, 0, $noreg1181 NOOP1182 NOOP1183 NOOP1184 NOOP1185 RET64 $ebp1186 1187...1188...1189 1190 1191 1192