brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.1 KiB · 2ca192e Raw
252 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -mtriple=x86_64-- -run-pass=machine-sink -verify-machineinstrs  -o - %s | FileCheck %s3 4---5name:            func_no_pic6tracksRegLiveness: true7jumpTable:8  kind:            block-address9  entries:10    - id:              011      blocks:          [ '%bb.4', '%bb.1', '%bb.2', '%bb.3' ]12body:             |13  ; CHECK-LABEL: name: func_no_pic14  ; CHECK: bb.0:15  ; CHECK-NEXT:   successors: %bb.5(0x20000000), %bb.1(0x20000000), %bb.2(0x20000000), %bb.3(0x20000000)16  ; CHECK-NEXT:   liveins: $edi17  ; CHECK-NEXT: {{  $}}18  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:gr64_nosp = COPY $rdi19  ; CHECK-NEXT:   JMP64m $noreg, 8, [[COPY]], %jump-table.0, $noreg :: (load (s64) from jump-table)20  ; CHECK-NEXT: {{  $}}21  ; CHECK-NEXT: bb.5:22  ; CHECK-NEXT:   successors: %bb.4(0x80000000)23  ; CHECK-NEXT: {{  $}}24  ; CHECK-NEXT:   [[MOV32ri:%[0-9]+]]:gr32 = MOV32ri 4225  ; CHECK-NEXT:   JMP_1 %bb.426  ; CHECK-NEXT: {{  $}}27  ; CHECK-NEXT: bb.1:28  ; CHECK-NEXT:   successors: %bb.4(0x80000000)29  ; CHECK-NEXT: {{  $}}30  ; CHECK-NEXT:   [[MOV32ri1:%[0-9]+]]:gr32 = MOV32ri 631  ; CHECK-NEXT:   JMP_1 %bb.432  ; CHECK-NEXT: {{  $}}33  ; CHECK-NEXT: bb.2:34  ; CHECK-NEXT:   successors: %bb.4(0x80000000)35  ; CHECK-NEXT: {{  $}}36  ; CHECK-NEXT:   [[MOV32ri2:%[0-9]+]]:gr32 = MOV32ri 137  ; CHECK-NEXT:   JMP_1 %bb.438  ; CHECK-NEXT: {{  $}}39  ; CHECK-NEXT: bb.3:40  ; CHECK-NEXT:   successors: %bb.4(0x80000000)41  ; CHECK-NEXT: {{  $}}42  ; CHECK-NEXT:   [[MOV32ri3:%[0-9]+]]:gr32 = MOV32ri 9243  ; CHECK-NEXT:   JMP_1 %bb.444  ; CHECK-NEXT: {{  $}}45  ; CHECK-NEXT: bb.4:46  ; CHECK-NEXT:   [[PHI:%[0-9]+]]:gr32 = PHI [[MOV32ri]], %bb.5, [[MOV32ri1]], %bb.1, [[MOV32ri2]], %bb.2, [[MOV32ri3]], %bb.347  ; CHECK-NEXT:   $eax = COPY [[PHI]]48  ; CHECK-NEXT:   RET 049  bb.0:50    successors: %bb.4, %bb.1, %bb.2, %bb.351    liveins: $edi52 53    %0:gr64_nosp = COPY $rdi54    ; MachineSink should split the critical edges and sink the next two55    ; insns out of the switch-jump header into new less frequently executed56    ; blocks.57    %1:gr32 = MOV32ri 4258    JMP64m $noreg, 8, %0, %jump-table.0, $noreg :: (load (s64) from jump-table)59 60  bb.1:61    %2:gr32 = MOV32ri 662    JMP_1 %bb.463 64  bb.2:65    %3:gr32 = MOV32ri 166    JMP_1 %bb.467 68  bb.3:69    %4:gr32 = MOV32ri 9270    JMP_1 %bb.471 72  bb.4:73    %5:gr32 = PHI %1, %bb.0, %2, %bb.1, %3, %bb.2, %4, %bb.374    $eax = COPY %575    RET 076 77...78---79name:            func_pic80tracksRegLiveness: true81jumpTable:82  kind:            label-difference3283  entries:84    - id:              085      blocks:          [ '%bb.4', '%bb.1', '%bb.2', '%bb.3' ]86body:             |87  ; CHECK-LABEL: name: func_pic88  ; CHECK: bb.0:89  ; CHECK-NEXT:   successors: %bb.5(0x20000000), %bb.1(0x20000000), %bb.2(0x20000000), %bb.3(0x20000000)90  ; CHECK-NEXT:   liveins: $edi91  ; CHECK-NEXT: {{  $}}92  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:gr64_nosp = COPY $rdi93  ; CHECK-NEXT:   [[LEA64r:%[0-9]+]]:gr64 = LEA64r $rip, 1, $noreg, %jump-table.0, $noreg94  ; CHECK-NEXT:   [[MOVSX64rm32_:%[0-9]+]]:gr64 = MOVSX64rm32 [[LEA64r]], 4, [[COPY]], 0, $noreg :: (load (s32) from jump-table)95  ; CHECK-NEXT:   [[ADD64rr:%[0-9]+]]:gr64 = ADD64rr [[MOVSX64rm32_]], [[LEA64r]], implicit-def dead $eflags96  ; CHECK-NEXT:   JMP64r killed [[ADD64rr]]97  ; CHECK-NEXT: {{  $}}98  ; CHECK-NEXT: bb.5:99  ; CHECK-NEXT:   successors: %bb.4(0x80000000)100  ; CHECK-NEXT: {{  $}}101  ; CHECK-NEXT:   [[MOV32ri:%[0-9]+]]:gr32 = MOV32ri 42102  ; CHECK-NEXT:   JMP_1 %bb.4103  ; CHECK-NEXT: {{  $}}104  ; CHECK-NEXT: bb.1:105  ; CHECK-NEXT:   successors: %bb.4(0x80000000)106  ; CHECK-NEXT: {{  $}}107  ; CHECK-NEXT:   [[MOV32ri1:%[0-9]+]]:gr32 = MOV32ri 6108  ; CHECK-NEXT:   JMP_1 %bb.4109  ; CHECK-NEXT: {{  $}}110  ; CHECK-NEXT: bb.2:111  ; CHECK-NEXT:   successors: %bb.4(0x80000000)112  ; CHECK-NEXT: {{  $}}113  ; CHECK-NEXT:   [[MOV32ri2:%[0-9]+]]:gr32 = MOV32ri 1114  ; CHECK-NEXT:   JMP_1 %bb.4115  ; CHECK-NEXT: {{  $}}116  ; CHECK-NEXT: bb.3:117  ; CHECK-NEXT:   successors: %bb.4(0x80000000)118  ; CHECK-NEXT: {{  $}}119  ; CHECK-NEXT:   [[MOV32ri3:%[0-9]+]]:gr32 = MOV32ri 92120  ; CHECK-NEXT:   JMP_1 %bb.4121  ; CHECK-NEXT: {{  $}}122  ; CHECK-NEXT: bb.4:123  ; CHECK-NEXT:   [[PHI:%[0-9]+]]:gr32 = PHI [[MOV32ri]], %bb.5, [[MOV32ri1]], %bb.1, [[MOV32ri2]], %bb.2, [[MOV32ri3]], %bb.3124  ; CHECK-NEXT:   $eax = COPY [[PHI]]125  ; CHECK-NEXT:   RET 0126  bb.0:127    successors: %bb.4, %bb.1, %bb.2, %bb.3128    liveins: $edi129 130    %0:gr64_nosp = COPY $rdi131    ; MachineSink should split the critical edges and sink the next two132    ; insns out of the switch-jump header into new less frequently executed133    ; blocks.134    %1:gr32 = MOV32ri 42135    %2:gr64 = LEA64r $rip, 1, $noreg, %jump-table.0, $noreg136    %3:gr64 = MOVSX64rm32 %2, 4, %0, 0, $noreg :: (load (s32) from jump-table)137    %4:gr64 = ADD64rr %3, %2, implicit-def dead $eflags138    JMP64r killed %4139 140  bb.1:141    %5:gr32 = MOV32ri 6142    JMP_1 %bb.4143 144  bb.2:145    %6:gr32 = MOV32ri 1146    JMP_1 %bb.4147 148  bb.3:149    %7:gr32 = MOV32ri 92150    JMP_1 %bb.4151 152  bb.4:153    %8:gr32 = PHI %1, %bb.0, %5, %bb.1, %6, %bb.2, %7, %bb.3154    $eax = COPY %8155    RET 0156 157...158---159name:            multiple_jump_table_users160tracksRegLiveness: true161jumpTable:162  kind:            block-address163  entries:164    - id:              0165      blocks:          [ '%bb.6', '%bb.3', '%bb.4', '%bb.5' ]166body:             |167  ; CHECK-LABEL: name: multiple_jump_table_users168  ; CHECK: bb.0:169  ; CHECK-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)170  ; CHECK-NEXT:   liveins: $edi171  ; CHECK-NEXT: {{  $}}172  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:gr64_nosp = COPY $rdi173  ; CHECK-NEXT:   CMP64ri8 [[COPY]], 42, implicit-def $eflags174  ; CHECK-NEXT:   JCC_1 %bb.1, 15, implicit $eflags175  ; CHECK-NEXT:   JMP_1 %bb.2176  ; CHECK-NEXT: {{  $}}177  ; CHECK-NEXT: bb.1:178  ; CHECK-NEXT:   successors: %bb.6(0x20000000), %bb.3(0x20000000), %bb.4(0x20000000), %bb.5(0x20000000)179  ; CHECK-NEXT: {{  $}}180  ; CHECK-NEXT:   INLINEASM &"", 1 /* sideeffect attdialect */181  ; CHECK-NEXT:   [[MOV32ri:%[0-9]+]]:gr32 = MOV32ri 13182  ; CHECK-NEXT:   JMP64m $noreg, 8, [[COPY]], %jump-table.0, $noreg :: (load (s64) from jump-table)183  ; CHECK-NEXT: {{  $}}184  ; CHECK-NEXT: bb.2:185  ; CHECK-NEXT:   successors: %bb.6(0x20000000), %bb.3(0x20000000), %bb.4(0x20000000), %bb.5(0x20000000)186  ; CHECK-NEXT: {{  $}}187  ; CHECK-NEXT:   INLINEASM &"", 1 /* sideeffect attdialect */188  ; CHECK-NEXT:   [[MOV32ri1:%[0-9]+]]:gr32 = MOV32ri 42189  ; CHECK-NEXT:   JMP64m $noreg, 8, [[COPY]], %jump-table.0, $noreg :: (load (s64) from jump-table)190  ; CHECK-NEXT: {{  $}}191  ; CHECK-NEXT: bb.3:192  ; CHECK-NEXT:   successors: %bb.6(0x80000000)193  ; CHECK-NEXT: {{  $}}194  ; CHECK-NEXT:   [[MOV32ri2:%[0-9]+]]:gr32 = MOV32ri 6195  ; CHECK-NEXT:   JMP_1 %bb.6196  ; CHECK-NEXT: {{  $}}197  ; CHECK-NEXT: bb.4:198  ; CHECK-NEXT:   successors: %bb.6(0x80000000)199  ; CHECK-NEXT: {{  $}}200  ; CHECK-NEXT:   [[MOV32ri3:%[0-9]+]]:gr32 = MOV32ri 1201  ; CHECK-NEXT:   JMP_1 %bb.6202  ; CHECK-NEXT: {{  $}}203  ; CHECK-NEXT: bb.5:204  ; CHECK-NEXT:   successors: %bb.6(0x80000000)205  ; CHECK-NEXT: {{  $}}206  ; CHECK-NEXT:   [[MOV32ri4:%[0-9]+]]:gr32 = MOV32ri 92207  ; CHECK-NEXT:   JMP_1 %bb.6208  ; CHECK-NEXT: {{  $}}209  ; CHECK-NEXT: bb.6:210  ; CHECK-NEXT:   [[PHI:%[0-9]+]]:gr32 = PHI [[MOV32ri]], %bb.1, [[MOV32ri1]], %bb.2, [[MOV32ri2]], %bb.3, [[MOV32ri3]], %bb.4, [[MOV32ri4]], %bb.5211  ; CHECK-NEXT:   $eax = COPY [[PHI]]212  ; CHECK-NEXT:   RET 0213  bb.0:214    liveins: $edi215    %0:gr64_nosp = COPY $rdi216 217    CMP64ri8 %0:gr64_nosp, 42, implicit-def $eflags218    JCC_1 %bb.1, 15, implicit $eflags219    JMP_1 %bb.2220 221  bb.1:222    successors: %bb.6, %bb.3, %bb.4, %bb.5223    INLINEASM &"", 1 /* sideeffect attdialect */224    %1:gr32 = MOV32ri 13225    JMP64m $noreg, 8, %0, %jump-table.0, $noreg :: (load (s64) from jump-table)226 227  bb.2:228    successors: %bb.6, %bb.3, %bb.4, %bb.5229    INLINEASM &"", 1 /* sideeffect attdialect */230    %2:gr32 = MOV32ri 42231    ; This is a 2d user of jump-table.0 . This case is not supported yet;232    ; Should not attempt edge splitting.233    JMP64m $noreg, 8, %0, %jump-table.0, $noreg :: (load (s64) from jump-table)234 235  bb.3:236    %3:gr32 = MOV32ri 6237    JMP_1 %bb.6238 239  bb.4:240    %4:gr32 = MOV32ri 1241    JMP_1 %bb.6242 243  bb.5:244    %5:gr32 = MOV32ri 92245    JMP_1 %bb.6246 247  bb.6:248    %6:gr32 = PHI %1, %bb.1, %2, %bb.2, %3, %bb.3, %4, %bb.4, %5, %bb.5249    $eax = COPY %6250    RET 0251...252