brintos

brintos / llvm-project-archived public Read only

0
0
Text · 22.6 KiB · 0f28964 Raw
369 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 52# RUN: llc -mtriple=x86_64-unknown-linux-gnu -run-pass=early-tailduplication -tail-dup-pred-size=1 -tail-dup-succ-size=1 %s -o - | FileCheck %s3#4# Check that only the computed goto and others are restricted by tail-dup-pred-size and tail-dup-succ-size.5#6--- |7  @computed_goto.dispatch = constant [5 x ptr] [ptr null, ptr blockaddress(@computed_goto, %bb1), ptr blockaddress(@computed_goto, %bb2), ptr blockaddress(@computed_goto, %bb3), ptr blockaddress(@computed_goto, %bb4)]8  declare i64 @f0()9  declare i64 @f1()10  declare i64 @f2()11  declare i64 @f3()12  declare i64 @f4()13  declare i64 @f5()14  define void @computed_goto() {15    start:16      ret void17    bb1:18      ret void19    bb2:20      ret void21    bb3:22      ret void23    bb4:24      ret void25  }26  define void @jump_table() { ret void }27  define void @jump_table_pic() { ret void }28...29---30name:            computed_goto31tracksRegLiveness: true32body:             |33  ; CHECK-LABEL: name: computed_goto34  ; CHECK: bb.0:35  ; CHECK-NEXT:   successors: %bb.5(0x80000000)36  ; CHECK-NEXT: {{  $}}37  ; CHECK-NEXT:   ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp38  ; CHECK-NEXT:   CALL64pcrel32 target-flags(x86-plt) @f0, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax39  ; CHECK-NEXT:   ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp40  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:gr64 = COPY $rax41  ; CHECK-NEXT:   JMP_1 %bb.542  ; CHECK-NEXT: {{  $}}43  ; CHECK-NEXT: bb.1.bb1 (ir-block-address-taken %ir-block.bb1):44  ; CHECK-NEXT:   successors: %bb.5(0x80000000)45  ; CHECK-NEXT: {{  $}}46  ; CHECK-NEXT:   ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp47  ; CHECK-NEXT:   CALL64pcrel32 target-flags(x86-plt) @f1, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax48  ; CHECK-NEXT:   ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp49  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:gr64 = COPY $rax50  ; CHECK-NEXT:   JMP_1 %bb.551  ; CHECK-NEXT: {{  $}}52  ; CHECK-NEXT: bb.2.bb2 (ir-block-address-taken %ir-block.bb2):53  ; CHECK-NEXT:   successors: %bb.5(0x80000000)54  ; CHECK-NEXT: {{  $}}55  ; CHECK-NEXT:   ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp56  ; CHECK-NEXT:   CALL64pcrel32 target-flags(x86-plt) @f2, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax57  ; CHECK-NEXT:   ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp58  ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:gr64 = COPY $rax59  ; CHECK-NEXT:   JMP_1 %bb.560  ; CHECK-NEXT: {{  $}}61  ; CHECK-NEXT: bb.3.bb3 (ir-block-address-taken %ir-block.bb3):62  ; CHECK-NEXT:   successors: %bb.5(0x80000000)63  ; CHECK-NEXT: {{  $}}64  ; CHECK-NEXT:   ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp65  ; CHECK-NEXT:   CALL64pcrel32 target-flags(x86-plt) @f3, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax66  ; CHECK-NEXT:   ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp67  ; CHECK-NEXT:   [[COPY3:%[0-9]+]]:gr64 = COPY $rax68  ; CHECK-NEXT:   JMP_1 %bb.569  ; CHECK-NEXT: {{  $}}70  ; CHECK-NEXT: bb.4.bb4 (ir-block-address-taken %ir-block.bb4):71  ; CHECK-NEXT:   successors: %bb.5(0x80000000)72  ; CHECK-NEXT: {{  $}}73  ; CHECK-NEXT:   ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp74  ; CHECK-NEXT:   CALL64pcrel32 target-flags(x86-plt) @f4, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax75  ; CHECK-NEXT:   ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp76  ; CHECK-NEXT:   [[COPY4:%[0-9]+]]:gr64 = COPY $rax77  ; CHECK-NEXT: {{  $}}78  ; CHECK-NEXT: bb.5:79  ; CHECK-NEXT:   successors: %bb.1(0x20000000), %bb.2(0x20000000), %bb.3(0x20000000), %bb.4(0x20000000)80  ; CHECK-NEXT: {{  $}}81  ; CHECK-NEXT:   [[PHI:%[0-9]+]]:gr64_nosp = PHI [[COPY]], %bb.0, [[COPY4]], %bb.4, [[COPY3]], %bb.3, [[COPY2]], %bb.2, [[COPY1]], %bb.182  ; CHECK-NEXT:   JMP64m $noreg, 8, [[PHI]], @computed_goto.dispatch, $noreg83  bb.0:84    ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp85    CALL64pcrel32 target-flags(x86-plt) @f0, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax86    ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp87    %1:gr64 = COPY $rax88    JMP_1 %bb.589 90  bb.1.bb1 (ir-block-address-taken %ir-block.bb1):91    ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp92    CALL64pcrel32 target-flags(x86-plt) @f1, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax93    ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp94    %3:gr64 = COPY $rax95    JMP_1 %bb.596 97  bb.2.bb2 (ir-block-address-taken %ir-block.bb2):98    ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp99    CALL64pcrel32 target-flags(x86-plt) @f2, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax100    ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp101    %5:gr64 = COPY $rax102    JMP_1 %bb.5103 104  bb.3.bb3 (ir-block-address-taken %ir-block.bb3):105    ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp106    CALL64pcrel32 target-flags(x86-plt) @f3, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax107    ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp108    %7:gr64 = COPY $rax109    JMP_1 %bb.5110 111  bb.4.bb4 (ir-block-address-taken %ir-block.bb4):112    ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp113    CALL64pcrel32 target-flags(x86-plt) @f4, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax114    ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp115    %9:gr64 = COPY $rax116 117  bb.5:118    successors: %bb.1, %bb.2, %bb.3, %bb.4119 120    %10:gr64_nosp = PHI %1, %bb.0, %9, %bb.4, %7, %bb.3, %5, %bb.2, %3, %bb.1121    JMP64m $noreg, 8, %10, @computed_goto.dispatch, $noreg122 123...124---125name:            jump_table126tracksRegLiveness: true127jumpTable:128  kind:            block-address129  entries:130    - id:              0131      blocks:          [ '%bb.3', '%bb.4', '%bb.5', '%bb.6', '%bb.7' ]132body:             |133  ; CHECK-LABEL: name: jump_table134  ; CHECK: bb.0:135  ; CHECK-NEXT:   successors: %bb.1(0x80000000)136  ; CHECK-NEXT: {{  $}}137  ; CHECK-NEXT:   ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp138  ; CHECK-NEXT:   CALL64pcrel32 target-flags(x86-plt) @f0, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax139  ; CHECK-NEXT:   ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp140  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:gr64 = COPY $rax141  ; CHECK-NEXT: {{  $}}142  ; CHECK-NEXT: bb.1:143  ; CHECK-NEXT:   successors: %bb.3(0x1999999a), %bb.4(0x1999999a), %bb.5(0x1999999a), %bb.6(0x1999999a), %bb.7(0x1999999a)144  ; CHECK-NEXT: {{  $}}145  ; CHECK-NEXT:   [[PHI:%[0-9]+]]:gr64 = PHI [[COPY]], %bb.0, %2, %bb.7, %3, %bb.6, %4, %bb.5, %5, %bb.4, %6, %bb.3146  ; CHECK-NEXT:   [[DEC64r:%[0-9]+]]:gr64_nosp = DEC64r [[PHI]], implicit-def dead $eflags147  ; CHECK-NEXT:   JMP64m $noreg, 8, [[DEC64r]], %jump-table.0, $noreg :: (load (s64) from jump-table)148  ; CHECK-NEXT: {{  $}}149  ; CHECK-NEXT: bb.3:150  ; CHECK-NEXT:   successors: %bb.1(0x80000000)151  ; CHECK-NEXT: {{  $}}152  ; CHECK-NEXT:   ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp153  ; CHECK-NEXT:   CALL64pcrel32 target-flags(x86-plt) @f1, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax154  ; CHECK-NEXT:   ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp155  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:gr64 = COPY $rax156  ; CHECK-NEXT:   JMP_1 %bb.1157  ; CHECK-NEXT: {{  $}}158  ; CHECK-NEXT: bb.4:159  ; CHECK-NEXT:   successors: %bb.1(0x80000000)160  ; CHECK-NEXT: {{  $}}161  ; CHECK-NEXT:   ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp162  ; CHECK-NEXT:   CALL64pcrel32 target-flags(x86-plt) @f2, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax163  ; CHECK-NEXT:   ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp164  ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:gr64 = COPY $rax165  ; CHECK-NEXT:   JMP_1 %bb.1166  ; CHECK-NEXT: {{  $}}167  ; CHECK-NEXT: bb.5:168  ; CHECK-NEXT:   successors: %bb.1(0x80000000)169  ; CHECK-NEXT: {{  $}}170  ; CHECK-NEXT:   ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp171  ; CHECK-NEXT:   CALL64pcrel32 target-flags(x86-plt) @f3, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax172  ; CHECK-NEXT:   ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp173  ; CHECK-NEXT:   [[COPY3:%[0-9]+]]:gr64 = COPY $rax174  ; CHECK-NEXT:   JMP_1 %bb.1175  ; CHECK-NEXT: {{  $}}176  ; CHECK-NEXT: bb.6:177  ; CHECK-NEXT:   successors: %bb.1(0x80000000)178  ; CHECK-NEXT: {{  $}}179  ; CHECK-NEXT:   ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp180  ; CHECK-NEXT:   CALL64pcrel32 target-flags(x86-plt) @f4, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax181  ; CHECK-NEXT:   ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp182  ; CHECK-NEXT:   [[COPY4:%[0-9]+]]:gr64 = COPY $rax183  ; CHECK-NEXT:   JMP_1 %bb.1184  ; CHECK-NEXT: {{  $}}185  ; CHECK-NEXT: bb.7:186  ; CHECK-NEXT:   successors: %bb.1(0x80000000)187  ; CHECK-NEXT: {{  $}}188  ; CHECK-NEXT:   ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp189  ; CHECK-NEXT:   CALL64pcrel32 target-flags(x86-plt) @f5, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax190  ; CHECK-NEXT:   ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp191  ; CHECK-NEXT:   [[COPY5:%[0-9]+]]:gr64 = COPY $rax192  ; CHECK-NEXT:   JMP_1 %bb.1193  bb.0:194    ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp195    CALL64pcrel32 target-flags(x86-plt) @f0, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax196    ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp197    %1:gr64 = COPY $rax198 199  bb.1:200    %2:gr64 = PHI %1, %bb.0, %3, %bb.7, %4, %bb.6, %5, %bb.5, %6, %bb.4, %7, %bb.3201    %8:gr64_nosp = DEC64r %2, implicit-def dead $eflags202 203  bb.2:204    successors: %bb.3(0x1999999a), %bb.4(0x1999999a), %bb.5(0x1999999a), %bb.6(0x1999999a), %bb.7(0x1999999a)205 206    JMP64m $noreg, 8, %8, %jump-table.0, $noreg :: (load (s64) from jump-table)207 208  bb.3:209    ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp210    CALL64pcrel32 target-flags(x86-plt) @f1, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax211    ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp212    %7:gr64 = COPY $rax213    JMP_1 %bb.1214 215  bb.4:216    ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp217    CALL64pcrel32 target-flags(x86-plt) @f2, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax218    ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp219    %6:gr64 = COPY $rax220    JMP_1 %bb.1221 222  bb.5:223    ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp224    CALL64pcrel32 target-flags(x86-plt) @f3, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax225    ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp226    %5:gr64 = COPY $rax227    JMP_1 %bb.1228 229  bb.6:230    ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp231    CALL64pcrel32 target-flags(x86-plt) @f4, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax232    ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp233    %4:gr64 = COPY $rax234    JMP_1 %bb.1235 236  bb.7:237    ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp238    CALL64pcrel32 target-flags(x86-plt) @f5, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax239    ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp240    %3:gr64 = COPY $rax241    JMP_1 %bb.1242 243...244---245name:            jump_table_pic246tracksRegLiveness: true247jumpTable:248  kind:            block-address249  entries:250    - id:              0251      blocks:          [ '%bb.3', '%bb.4', '%bb.5', '%bb.6', '%bb.7' ]252body:             |253  ; CHECK-LABEL: name: jump_table_pic254  ; CHECK: bb.0:255  ; CHECK-NEXT:   successors: %bb.1(0x80000000)256  ; CHECK-NEXT: {{  $}}257  ; CHECK-NEXT:   ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp258  ; CHECK-NEXT:   CALL64pcrel32 target-flags(x86-plt) @f0, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax259  ; CHECK-NEXT:   ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp260  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:gr64 = COPY $rax261  ; CHECK-NEXT: {{  $}}262  ; CHECK-NEXT: bb.1:263  ; CHECK-NEXT:   successors: %bb.3(0x1999999a), %bb.4(0x1999999a), %bb.5(0x1999999a), %bb.6(0x1999999a), %bb.7(0x1999999a)264  ; CHECK-NEXT: {{  $}}265  ; CHECK-NEXT:   [[PHI:%[0-9]+]]:gr64 = PHI [[COPY]], %bb.0, %2, %bb.7, %3, %bb.6, %4, %bb.5, %5, %bb.4, %6, %bb.3266  ; CHECK-NEXT:   [[DEC64r:%[0-9]+]]:gr64_nosp = DEC64r [[PHI]], implicit-def dead $eflags267  ; CHECK-NEXT:   [[LEA64r:%[0-9]+]]:gr64 = LEA64r $rip, 1, $noreg, %jump-table.0, $noreg268  ; CHECK-NEXT:   [[MOVSX64rm32_:%[0-9]+]]:gr64 = MOVSX64rm32 [[DEC64r]], 4, [[DEC64r]], 0, $noreg :: (load (s32) from jump-table)269  ; CHECK-NEXT:   [[ADD64rr:%[0-9]+]]:gr64 = ADD64rr [[LEA64r]], [[MOVSX64rm32_]], implicit-def dead $eflags270  ; CHECK-NEXT:   JMP64r [[ADD64rr]]271  ; CHECK-NEXT: {{  $}}272  ; CHECK-NEXT: bb.3:273  ; CHECK-NEXT:   successors: %bb.1(0x80000000)274  ; CHECK-NEXT: {{  $}}275  ; CHECK-NEXT:   ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp276  ; CHECK-NEXT:   CALL64pcrel32 target-flags(x86-plt) @f1, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax277  ; CHECK-NEXT:   ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp278  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:gr64 = COPY $rax279  ; CHECK-NEXT:   JMP_1 %bb.1280  ; CHECK-NEXT: {{  $}}281  ; CHECK-NEXT: bb.4:282  ; CHECK-NEXT:   successors: %bb.1(0x80000000)283  ; CHECK-NEXT: {{  $}}284  ; CHECK-NEXT:   ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp285  ; CHECK-NEXT:   CALL64pcrel32 target-flags(x86-plt) @f2, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax286  ; CHECK-NEXT:   ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp287  ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:gr64 = COPY $rax288  ; CHECK-NEXT:   JMP_1 %bb.1289  ; CHECK-NEXT: {{  $}}290  ; CHECK-NEXT: bb.5:291  ; CHECK-NEXT:   successors: %bb.1(0x80000000)292  ; CHECK-NEXT: {{  $}}293  ; CHECK-NEXT:   ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp294  ; CHECK-NEXT:   CALL64pcrel32 target-flags(x86-plt) @f3, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax295  ; CHECK-NEXT:   ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp296  ; CHECK-NEXT:   [[COPY3:%[0-9]+]]:gr64 = COPY $rax297  ; CHECK-NEXT:   JMP_1 %bb.1298  ; CHECK-NEXT: {{  $}}299  ; CHECK-NEXT: bb.6:300  ; CHECK-NEXT:   successors: %bb.1(0x80000000)301  ; CHECK-NEXT: {{  $}}302  ; CHECK-NEXT:   ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp303  ; CHECK-NEXT:   CALL64pcrel32 target-flags(x86-plt) @f4, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax304  ; CHECK-NEXT:   ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp305  ; CHECK-NEXT:   [[COPY4:%[0-9]+]]:gr64 = COPY $rax306  ; CHECK-NEXT:   JMP_1 %bb.1307  ; CHECK-NEXT: {{  $}}308  ; CHECK-NEXT: bb.7:309  ; CHECK-NEXT:   successors: %bb.1(0x80000000)310  ; CHECK-NEXT: {{  $}}311  ; CHECK-NEXT:   ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp312  ; CHECK-NEXT:   CALL64pcrel32 target-flags(x86-plt) @f5, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax313  ; CHECK-NEXT:   ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp314  ; CHECK-NEXT:   [[COPY5:%[0-9]+]]:gr64 = COPY $rax315  ; CHECK-NEXT:   JMP_1 %bb.1316  bb.0:317    ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp318    CALL64pcrel32 target-flags(x86-plt) @f0, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax319    ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp320    %1:gr64 = COPY $rax321 322  bb.1:323    %2:gr64 = PHI %1, %bb.0, %3, %bb.7, %4, %bb.6, %5, %bb.5, %6, %bb.4, %7, %bb.3324    %8:gr64_nosp = DEC64r %2, implicit-def dead $eflags325 326  bb.2:327    successors: %bb.3(0x1999999a), %bb.4(0x1999999a), %bb.5(0x1999999a), %bb.6(0x1999999a), %bb.7(0x1999999a)328    %9:gr64 = LEA64r $rip, 1, $noreg, %jump-table.0, $noreg329    %10:gr64 = MOVSX64rm32 %8, 4, %8, 0, $noreg :: (load (s32) from jump-table)330    %11:gr64 = ADD64rr %9, %10, implicit-def dead $eflags331    JMP64r %11332 333  bb.3:334    ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp335    CALL64pcrel32 target-flags(x86-plt) @f1, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax336    ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp337    %7:gr64 = COPY $rax338    JMP_1 %bb.1339 340  bb.4:341    ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp342    CALL64pcrel32 target-flags(x86-plt) @f2, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax343    ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp344    %6:gr64 = COPY $rax345    JMP_1 %bb.1346 347  bb.5:348    ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp349    CALL64pcrel32 target-flags(x86-plt) @f3, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax350    ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp351    %5:gr64 = COPY $rax352    JMP_1 %bb.1353 354  bb.6:355    ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp356    CALL64pcrel32 target-flags(x86-plt) @f4, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax357    ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp358    %4:gr64 = COPY $rax359    JMP_1 %bb.1360 361  bb.7:362    ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp363    CALL64pcrel32 target-flags(x86-plt) @f5, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax364    ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp365    %3:gr64 = COPY $rax366    JMP_1 %bb.1367 368...369