brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.7 KiB · e272e7e Raw
129 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=tailduplication -tail-dup-pred-size=1 -tail-dup-succ-size=1 %s -o - | FileCheck %s3#4# Check that only the computed gotos are duplicated aggressively.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_goto31alignment:       132exposesReturnsTwice: false33legalized:       false34regBankSelected: false35selected:        false36failedISel:      false37tracksRegLiveness: true38body:             |39  ; CHECK-LABEL: name: computed_goto40  ; CHECK: bb.0:41  ; CHECK-NEXT:   successors: %bb.1(0x20000000), %bb.2(0x20000000), %bb.3(0x20000000), %bb.4(0x20000000)42  ; CHECK-NEXT: {{  $}}43  ; CHECK-NEXT:   CALL64pcrel32 target-flags(x86-plt) @f0, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax44  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:gr64 = COPY $rax45  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:gr64_nosp = COPY [[COPY]]46  ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:gr64_nosp = COPY [[COPY1]]47  ; CHECK-NEXT:   JMP64m $noreg, 8, [[COPY2]], @computed_goto.dispatch, $noreg48  ; CHECK-NEXT: {{  $}}49  ; CHECK-NEXT: bb.1.bb1 (ir-block-address-taken %ir-block.bb1):50  ; CHECK-NEXT:   successors: %bb.1(0x20000000), %bb.2(0x20000000), %bb.3(0x20000000), %bb.4(0x20000000)51  ; CHECK-NEXT: {{  $}}52  ; CHECK-NEXT:   CALL64pcrel32 target-flags(x86-plt) @f1, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax53  ; CHECK-NEXT:   [[COPY3:%[0-9]+]]:gr64 = COPY $rax54  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:gr64_nosp = COPY [[COPY3]]55  ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:gr64_nosp = COPY [[COPY1]]56  ; CHECK-NEXT:   JMP64m $noreg, 8, [[COPY2]], @computed_goto.dispatch, $noreg57  ; CHECK-NEXT: {{  $}}58  ; CHECK-NEXT: bb.2.bb2 (ir-block-address-taken %ir-block.bb2):59  ; CHECK-NEXT:   successors: %bb.1(0x20000000), %bb.2(0x20000000), %bb.3(0x20000000), %bb.4(0x20000000)60  ; CHECK-NEXT: {{  $}}61  ; CHECK-NEXT:   CALL64pcrel32 target-flags(x86-plt) @f2, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax62  ; CHECK-NEXT:   [[COPY4:%[0-9]+]]:gr64 = COPY $rax63  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:gr64_nosp = COPY [[COPY4]]64  ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:gr64_nosp = COPY [[COPY1]]65  ; CHECK-NEXT:   JMP64m $noreg, 8, [[COPY2]], @computed_goto.dispatch, $noreg66  ; CHECK-NEXT: {{  $}}67  ; CHECK-NEXT: bb.3.bb3 (ir-block-address-taken %ir-block.bb3):68  ; CHECK-NEXT:   successors: %bb.1(0x20000000), %bb.2(0x20000000), %bb.3(0x20000000), %bb.4(0x20000000)69  ; CHECK-NEXT: {{  $}}70  ; CHECK-NEXT:   CALL64pcrel32 target-flags(x86-plt) @f3, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax71  ; CHECK-NEXT:   [[COPY5:%[0-9]+]]:gr64 = COPY $rax72  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:gr64_nosp = COPY [[COPY5]]73  ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:gr64_nosp = COPY [[COPY1]]74  ; CHECK-NEXT:   JMP64m $noreg, 8, [[COPY2]], @computed_goto.dispatch, $noreg75  ; CHECK-NEXT: {{  $}}76  ; CHECK-NEXT: bb.4.bb4 (ir-block-address-taken %ir-block.bb4):77  ; CHECK-NEXT:   successors: %bb.1(0x20000000), %bb.2(0x20000000), %bb.3(0x20000000), %bb.4(0x20000000)78  ; CHECK-NEXT: {{  $}}79  ; CHECK-NEXT:   CALL64pcrel32 target-flags(x86-plt) @f4, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax80  ; CHECK-NEXT:   [[COPY6:%[0-9]+]]:gr64 = COPY $rax81  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:gr64_nosp = COPY [[COPY6]]82  ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:gr64_nosp = COPY [[COPY1]]83  ; CHECK-NEXT:   JMP64m $noreg, 8, [[COPY2]], @computed_goto.dispatch, $noreg84  bb.0:85    successors: %bb.5(0x80000000)86 87    CALL64pcrel32 target-flags(x86-plt) @f0, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax88    %0:gr64 = COPY $rax89    %6:gr64_nosp = COPY %090    JMP_1 %bb.591 92  bb.1.bb1 (ir-block-address-taken %ir-block.bb1):93    successors: %bb.5(0x80000000)94 95    CALL64pcrel32 target-flags(x86-plt) @f1, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax96    %1:gr64 = COPY $rax97    %6:gr64_nosp = COPY %198    JMP_1 %bb.599 100  bb.2.bb2 (ir-block-address-taken %ir-block.bb2):101    successors: %bb.5(0x80000000)102 103    CALL64pcrel32 target-flags(x86-plt) @f2, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax104    %2:gr64 = COPY $rax105    %6:gr64_nosp = COPY %2106    JMP_1 %bb.5107 108  bb.3.bb3 (ir-block-address-taken %ir-block.bb3):109    successors: %bb.5(0x80000000)110 111    CALL64pcrel32 target-flags(x86-plt) @f3, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax112    %3:gr64 = COPY $rax113    %6:gr64_nosp = COPY %3114    JMP_1 %bb.5115 116  bb.4.bb4 (ir-block-address-taken %ir-block.bb4):117    successors: %bb.5(0x80000000)118 119    CALL64pcrel32 target-flags(x86-plt) @f4, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax120    %4:gr64 = COPY $rax121    %6:gr64_nosp = COPY %4122 123  bb.5:124    successors: %bb.1(0x20000000), %bb.2(0x20000000), %bb.3(0x20000000), %bb.4(0x20000000)125 126    %5:gr64_nosp = COPY %6127    JMP64m $noreg, 8, %5, @computed_goto.dispatch, $noreg128...129