brintos

brintos / llvm-project-archived public Read only

0
0
Text · 13.8 KiB · 6733971 Raw
552 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -run-pass x86-fixup-LEAs -mtriple=i386 -verify-machineinstrs -mcpu=corei7-avx -o - %s | FileCheck %s3--- |4  ; ModuleID = 'test/CodeGen/X86/fixup-lea.ll'5  source_filename = "test/CodeGen/X86/fixup-lea.ll"6  target datalayout = "e-m:e-p:32:32-f64:32:64-f80:32-n8:16:32-S128"7  target triple = "i386"8  ;generated using: llc -stop-after x86-pad-short-functions fixup-lea.ll > leaFinxup32.mir9 10  ;test2add_32: 3 operands LEA32r that can be replaced with 2 add instructions11  ; where ADD32ri is chosen12  define i32 @test2add_32() {13    ret i32 014  }15 16  ;test2add_ebp_32: 3 operands LEA32r that can be replaced with 2 add instructions17  ; where the base is rbp/r13/ebp register18  define i32 @test2add_ebp_32() {19    ret i32 020  }21 22  ;test1add_ebp_32: 2 operands LEA32r where base register is ebp and can be replaced23  ; with an add instruction24  define i32 @test1add_ebp_32() {25    ret i32 026  }27 28  ;testleaadd_32: 3 operands LEA32r that can be replaced with 1 lea 1 add instructions29  define i32 @testleaadd_32() {30    ret i32 031  }32 33  ;testleaadd_ebp_32: 3 operands LEA32r that can be replaced with 1 lea 1 add instructions34  ; where the base is ebp register35  define i32 @testleaadd_ebp_32() {36    ret i32 037  }38 39  ;test1lea_ebp_32: 2 operands LEA32r wher base register is rbp/r13/ebp and can be replaced40  ; with a lea instruction41  define i32 @test1lea_ebp_32() {42    ret i32 043  }44 45  ;test2addi32_32: 3 operands LEA32r that can be replaced with 2 add instructions where ADD32ri3246  ; is chosen47  define i32 @test2addi32_32() {48    ret i32 049  }50 51  ;test_leab_ebp_leais_32: 2 operands LEA32r that can be replaced with LEA_IS form52  ; where the base is rbp/r13/ebp register53  define i32 @test_leab_ebp_leais_32() {54    ret i32 055  }56 57  ;test_leabi_ebp_leais_32: 3 operands LEA32r that can be replaced with LEA_IS form58  ; where the base and the index are ebp register and there is offset59  define i32 @test_leabi_ebp_leais_32() {60    ret i32 061  }62 63  ;testleaadd_ebp_index2_32: 3 operands LEA32r that can be replaced with 1 lea 1 add instructions64  ; where the base and the index are ebp register and there is scale65  define i32 @testleaadd_ebp_index2_32() {66    ret i32 067  }68 69  ;test_skip_opt_32: 3 operands LEA32r that can not be replaced with 2 instructions70  define i32 @test_skip_opt_32() {71    ret i32 072  }73 74  ;test_skip_eflags_32: LEA32r that cannot be replaced since its not safe to clobber eflags75  define i32 @test_skip_eflags_32() {76    ret i32 077  }78 79...80---81name:            test2add_3282alignment:       1683exposesReturnsTwice: false84legalized:       false85regBankSelected: false86selected:        false87tracksRegLiveness: true88liveins:89  - { reg: '$eax' }90  - { reg: '$ebp' }91frameInfo:92  isFrameAddressTaken: false93  isReturnAddressTaken: false94  hasStackMap:     false95  hasPatchPoint:   false96  stackSize:       097  offsetAdjustment: 098  maxAlignment:    099  adjustsStack:    false100  hasCalls:        false101  maxCallFrameSize: 0102  hasOpaqueSPAdjustment: false103  hasVAStart:      false104  hasMustTailInVarArgFunc: false105body:             |106  bb.0 (%ir-block.0):107    liveins: $eax, $ebp108 109    ; CHECK-LABEL: name: test2add_32110    ; CHECK: liveins: $eax, $ebp111    ; CHECK: $eax = ADD32rr $eax, $ebp, implicit-def $eflags112    ; CHECK: $eax = ADD32ri $eax, -5, implicit-def $eflags113    ; CHECK: RET64 $eax114    $eax = LEA32r killed $eax, 1, killed $ebp, -5, $noreg115    RET64 $eax116 117...118---119name:            test2add_ebp_32120alignment:       16121exposesReturnsTwice: false122legalized:       false123regBankSelected: false124selected:        false125tracksRegLiveness: true126liveins:127  - { reg: '$eax' }128  - { reg: '$ebp' }129frameInfo:130  isFrameAddressTaken: false131  isReturnAddressTaken: false132  hasStackMap:     false133  hasPatchPoint:   false134  stackSize:       0135  offsetAdjustment: 0136  maxAlignment:    0137  adjustsStack:    false138  hasCalls:        false139  maxCallFrameSize: 0140  hasOpaqueSPAdjustment: false141  hasVAStart:      false142  hasMustTailInVarArgFunc: false143body:             |144  bb.0 (%ir-block.0):145    liveins: $eax, $ebp146 147    ; CHECK-LABEL: name: test2add_ebp_32148    ; CHECK: liveins: $eax, $ebp149    ; CHECK: $ebp = ADD32rr $ebp, $eax, implicit-def $eflags150    ; CHECK: $ebp = ADD32ri $ebp, -5, implicit-def $eflags151    ; CHECK: RET64 $ebp152    $ebp = LEA32r killed $ebp, 1, killed $eax, -5, $noreg153    RET64 $ebp154 155...156---157name:            test1add_ebp_32158alignment:       16159exposesReturnsTwice: false160legalized:       false161regBankSelected: false162selected:        false163tracksRegLiveness: true164liveins:165  - { reg: '$eax' }166  - { reg: '$ebp' }167frameInfo:168  isFrameAddressTaken: false169  isReturnAddressTaken: false170  hasStackMap:     false171  hasPatchPoint:   false172  stackSize:       0173  offsetAdjustment: 0174  maxAlignment:    0175  adjustsStack:    false176  hasCalls:        false177  maxCallFrameSize: 0178  hasOpaqueSPAdjustment: false179  hasVAStart:      false180  hasMustTailInVarArgFunc: false181body:             |182  bb.0 (%ir-block.0):183    liveins: $eax, $ebp184 185    ; CHECK-LABEL: name: test1add_ebp_32186    ; CHECK: liveins: $eax, $ebp187    ; CHECK: $ebp = ADD32rr $ebp, $eax, implicit-def $eflags188    ; CHECK: RET64 $ebp189    $ebp = LEA32r killed $ebp, 1, killed $eax, 0, $noreg190    RET64 $ebp191 192...193---194name:            testleaadd_32195alignment:       16196exposesReturnsTwice: false197legalized:       false198regBankSelected: false199selected:        false200tracksRegLiveness: true201liveins:202  - { reg: '$eax' }203  - { reg: '$ebp' }204  - { reg: '$ebx' }205frameInfo:206  isFrameAddressTaken: false207  isReturnAddressTaken: false208  hasStackMap:     false209  hasPatchPoint:   false210  stackSize:       0211  offsetAdjustment: 0212  maxAlignment:    0213  adjustsStack:    false214  hasCalls:        false215  maxCallFrameSize: 0216  hasOpaqueSPAdjustment: false217  hasVAStart:      false218  hasMustTailInVarArgFunc: false219body:             |220  bb.0 (%ir-block.0):221    liveins: $eax, $ebp, $esi222 223    ; CHECK-LABEL: name: testleaadd_32224    ; CHECK: liveins: $eax, $ebp, $esi225    ; CHECK: $ebx = LEA32r killed $eax, 1, killed $ebp, 0, $noreg226    ; CHECK: $ebx = ADD32ri $ebx, -5, implicit-def $eflags227    ; CHECK: RET64 $ebx228    $ebx = LEA32r killed $eax, 1, killed $ebp, -5, $noreg229    RET64 $ebx230 231...232---233name:            testleaadd_ebp_32234alignment:       16235exposesReturnsTwice: false236legalized:       false237regBankSelected: false238selected:        false239tracksRegLiveness: true240liveins:241  - { reg: '$eax' }242  - { reg: '$ebp' }243  - { reg: '$ebx' }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: $eax, $ebp261 262    ; CHECK-LABEL: name: testleaadd_ebp_32263    ; CHECK: liveins: $eax, $ebp264    ; CHECK: $ebx = LEA32r killed $eax, 1, killed $ebp, 0, $noreg265    ; CHECK: $ebx = ADD32ri $ebx, -5, implicit-def $eflags266    ; CHECK: RET64 $ebx267    $ebx = LEA32r killed $ebp, 1, killed $eax, -5, $noreg268    RET64 $ebx269 270...271---272name:            test1lea_ebp_32273alignment:       16274exposesReturnsTwice: false275legalized:       false276regBankSelected: false277selected:        false278tracksRegLiveness: true279liveins:280  - { reg: '$eax' }281  - { reg: '$ebp' }282  - { reg: '$ebx' }283frameInfo:284  isFrameAddressTaken: false285  isReturnAddressTaken: false286  hasStackMap:     false287  hasPatchPoint:   false288  stackSize:       0289  offsetAdjustment: 0290  maxAlignment:    0291  adjustsStack:    false292  hasCalls:        false293  maxCallFrameSize: 0294  hasOpaqueSPAdjustment: false295  hasVAStart:      false296  hasMustTailInVarArgFunc: false297body:             |298  bb.0 (%ir-block.0):299    liveins: $eax, $ebp300 301    ; CHECK-LABEL: name: test1lea_ebp_32302    ; CHECK: liveins: $eax, $ebp303    ; CHECK: $ebx = LEA32r killed $eax, 1, killed $ebp, 0, $noreg304    ; CHECK: RET64 $ebx305    $ebx = LEA32r killed $ebp, 1, killed $eax, 0, $noreg306    RET64 $ebx307 308...309---310name:            test2addi32_32311alignment:       16312exposesReturnsTwice: false313legalized:       false314regBankSelected: false315selected:        false316tracksRegLiveness: true317liveins:318  - { reg: '$eax' }319  - { reg: '$ebp' }320frameInfo:321  isFrameAddressTaken: false322  isReturnAddressTaken: false323  hasStackMap:     false324  hasPatchPoint:   false325  stackSize:       0326  offsetAdjustment: 0327  maxAlignment:    0328  adjustsStack:    false329  hasCalls:        false330  maxCallFrameSize: 0331  hasOpaqueSPAdjustment: false332  hasVAStart:      false333  hasMustTailInVarArgFunc: false334body:             |335  bb.0 (%ir-block.0):336    liveins: $eax, $ebp337 338    ; CHECK-LABEL: name: test2addi32_32339    ; CHECK: liveins: $eax, $ebp340    ; CHECK: $eax = ADD32rr $eax, $ebp, implicit-def $eflags341    ; CHECK: $eax = ADD32ri $eax, 129, implicit-def $eflags342    ; CHECK: RET64 $eax343    $eax = LEA32r killed $eax, 1, killed $ebp, 129, $noreg344    RET64 $eax345 346...347---348name:            test_leab_ebp_leais_32349alignment:       16350exposesReturnsTwice: false351legalized:       false352regBankSelected: false353selected:        false354tracksRegLiveness: true355liveins:356  - { reg: '$eax' }357  - { reg: '$ebx' }358  - { reg: '$ebp' }359frameInfo:360  isFrameAddressTaken: false361  isReturnAddressTaken: false362  hasStackMap:     false363  hasPatchPoint:   false364  stackSize:       0365  offsetAdjustment: 0366  maxAlignment:    0367  adjustsStack:    false368  hasCalls:        false369  maxCallFrameSize: 0370  hasOpaqueSPAdjustment: false371  hasVAStart:      false372  hasMustTailInVarArgFunc: false373body:             |374  bb.0 (%ir-block.0):375    liveins: $eax, $ebp, $ebx376 377    ; CHECK-LABEL: name: test_leab_ebp_leais_32378    ; CHECK: liveins: $eax, $ebp, $ebx379    ; CHECK: $ebx = LEA32r $noreg, 2, $ebp, 0, $noreg380    ; CHECK: RET64 $ebx381    $ebx = LEA32r killed $ebp, 1, $ebp, 0, $noreg382    RET64 $ebx383 384...385---386name:            test_leabi_ebp_leais_32387alignment:       16388exposesReturnsTwice: false389legalized:       false390regBankSelected: false391selected:        false392tracksRegLiveness: true393liveins:394  - { reg: '$ebx' }395  - { reg: '$ebp' }396frameInfo:397  isFrameAddressTaken: false398  isReturnAddressTaken: false399  hasStackMap:     false400  hasPatchPoint:   false401  stackSize:       0402  offsetAdjustment: 0403  maxAlignment:    0404  adjustsStack:    false405  hasCalls:        false406  maxCallFrameSize: 0407  hasOpaqueSPAdjustment: false408  hasVAStart:      false409  hasMustTailInVarArgFunc: false410body:             |411  bb.0 (%ir-block.0):412    liveins: $eax, $ebp, $ebx413 414    ; CHECK-LABEL: name: test_leabi_ebp_leais_32415    ; CHECK: liveins: $eax, $ebp, $ebx416    ; CHECK: $ebx = LEA32r $noreg, 2, $ebp, 5, $noreg417    ; CHECK: RET64 $ebx418    $ebx = LEA32r $ebp, 1, $ebp, 5, $noreg419    RET64 $ebx420 421...422---423name:            testleaadd_ebp_index2_32424alignment:       16425exposesReturnsTwice: false426legalized:       false427regBankSelected: false428selected:        false429tracksRegLiveness: true430liveins:431  - { reg: '$ebx' }432  - { reg: '$ebp' }433frameInfo:434  isFrameAddressTaken: false435  isReturnAddressTaken: false436  hasStackMap:     false437  hasPatchPoint:   false438  stackSize:       0439  offsetAdjustment: 0440  maxAlignment:    0441  adjustsStack:    false442  hasCalls:        false443  maxCallFrameSize: 0444  hasOpaqueSPAdjustment: false445  hasVAStart:      false446  hasMustTailInVarArgFunc: false447body:             |448  bb.0 (%ir-block.0):449    liveins: $eax, $ebp, $ebx450 451    ; CHECK-LABEL: name: testleaadd_ebp_index2_32452    ; CHECK: liveins: $eax, $ebp, $ebx453    ; CHECK: $ebx = LEA32r $noreg, 4, $ebp, 5, $noreg454    ; CHECK: $ebx = ADD32rr $ebx, $ebp, implicit-def $eflags455    ; CHECK: RET64 $ebx456    $ebx = LEA32r $ebp, 4, $ebp, 5, $noreg457    RET64 $ebx458 459...460---461name:            test_skip_opt_32462alignment:       16463exposesReturnsTwice: false464legalized:       false465regBankSelected: false466selected:        false467tracksRegLiveness: true468liveins:469  - { reg: '$ebx' }470  - { reg: '$ebp' }471frameInfo:472  isFrameAddressTaken: false473  isReturnAddressTaken: false474  hasStackMap:     false475  hasPatchPoint:   false476  stackSize:       0477  offsetAdjustment: 0478  maxAlignment:    0479  adjustsStack:    false480  hasCalls:        false481  maxCallFrameSize: 0482  hasOpaqueSPAdjustment: false483  hasVAStart:      false484  hasMustTailInVarArgFunc: false485body:             |486  bb.0 (%ir-block.0):487    liveins: $eax, $ebp, $ebx488 489    ; CHECK-LABEL: name: test_skip_opt_32490    ; CHECK: liveins: $eax, $ebp, $ebx491    ; CHECK: $ebp = LEA32r killed $ebp, 4, killed $ebp, 0, $noreg492    ; CHECK: RET64 $ebp493    $ebp = LEA32r killed $ebp, 4, killed $ebp, 0, $noreg494    RET64 $ebp495 496...497---498name:            test_skip_eflags_32499alignment:       16500exposesReturnsTwice: false501legalized:       false502regBankSelected: false503selected:        false504tracksRegLiveness: true505liveins:506  - { reg: '$ebp' }507  - { reg: '$eax' }508frameInfo:509  isFrameAddressTaken: false510  isReturnAddressTaken: false511  hasStackMap:     false512  hasPatchPoint:   false513  stackSize:       0514  offsetAdjustment: 0515  maxAlignment:    0516  adjustsStack:    false517  hasCalls:        false518  maxCallFrameSize: 0519  hasOpaqueSPAdjustment: false520  hasVAStart:      false521  hasMustTailInVarArgFunc: false522body:             |523  ; CHECK-LABEL: name: test_skip_eflags_32524  ; CHECK: bb.0 (%ir-block.0):525  ; CHECK:   successors: %bb.1(0x80000000)526  ; CHECK:   liveins: $eax, $ebp, $ebx527  ; CHECK:   CMP32rr $eax, killed $ebx, implicit-def $eflags528  ; CHECK:   $ebx = LEA32r killed $eax, 4, killed $eax, 5, $noreg529  ; CHECK:   JCC_1 %bb.1, 4, implicit $eflags530  ; CHECK:   RET64 $ebx531  ; CHECK: bb.1:532  ; CHECK:   liveins: $eax, $ebp, $ebx533  ; CHECK:   $ebp = LEA32r killed $ebx, 4, killed $ebx, 0, $noreg534  ; CHECK:   $ebp = ADD32ri $ebp, 5, implicit-def $eflags535  ; CHECK:   RET64 $ebp536  bb.0 (%ir-block.0):537    liveins: $eax, $ebp, $ebx538 539    CMP32rr   $eax, killed $ebx, implicit-def $eflags540    $ebx = LEA32r killed $eax, 4, killed $eax, 5, $noreg541    JCC_1 %bb.1, 4, implicit $eflags542    RET64 $ebx543  bb.1:544    liveins: $eax, $ebp, $ebx545    $ebp = LEA32r killed $ebx, 4, killed $ebx, 5, $noreg546    RET64 $ebp547 548...549 550 551 552