|
1 | 1 | # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 5
|
2 | 2 | # 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 %s
|
3 |
| -# Check that only the computed goto is not be restrict by tail-dup-pred-size and tail-dup-succ-size. |
| 3 | +# |
| 4 | +# Check that only the computed goto and others are restricted by tail-dup-pred-size and tail-dup-succ-size. |
| 5 | +# |
4 | 6 | --- |
|
5 | 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)]
|
6 | 8 | declare i64 @f0()
|
@@ -30,54 +32,54 @@ tracksRegLiveness: true
|
30 | 32 | body: |
|
31 | 33 | ; CHECK-LABEL: name: computed_goto
|
32 | 34 | ; CHECK: bb.0:
|
33 |
| - ; CHECK-NEXT: successors: %bb.1(0x20000000), %bb.2(0x20000000), %bb.3(0x20000000), %bb.4(0x20000000) |
| 35 | + ; CHECK-NEXT: successors: %bb.5(0x80000000) |
34 | 36 | ; CHECK-NEXT: {{ $}}
|
35 | 37 | ; CHECK-NEXT: ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
|
36 | 38 | ; CHECK-NEXT: CALL64pcrel32 target-flags(x86-plt) @f0, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax
|
37 | 39 | ; CHECK-NEXT: ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
|
38 |
| - ; CHECK-NEXT: [[COPY:%[0-9]+]]:gr64_nosp = COPY $rax |
39 |
| - ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gr64_nosp = COPY [[COPY]] |
40 |
| - ; CHECK-NEXT: JMP64m $noreg, 8, [[COPY]], @computed_goto.dispatch, $noreg |
| 40 | + ; CHECK-NEXT: [[COPY:%[0-9]+]]:gr64 = COPY $rax |
| 41 | + ; CHECK-NEXT: JMP_1 %bb.5 |
41 | 42 | ; CHECK-NEXT: {{ $}}
|
42 | 43 | ; CHECK-NEXT: bb.1.bb1 (ir-block-address-taken %ir-block.bb1):
|
43 |
| - ; CHECK-NEXT: successors: %bb.1(0x20000000), %bb.2(0x20000000), %bb.3(0x20000000), %bb.4(0x20000000) |
| 44 | + ; CHECK-NEXT: successors: %bb.5(0x80000000) |
44 | 45 | ; CHECK-NEXT: {{ $}}
|
45 | 46 | ; CHECK-NEXT: ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
|
46 | 47 | ; CHECK-NEXT: CALL64pcrel32 target-flags(x86-plt) @f1, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax
|
47 | 48 | ; CHECK-NEXT: ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
|
48 |
| - ; CHECK-NEXT: [[COPY2:%[0-9]+]]:gr64_nosp = COPY $rax |
49 |
| - ; CHECK-NEXT: [[COPY3:%[0-9]+]]:gr64_nosp = COPY [[COPY2]] |
50 |
| - ; CHECK-NEXT: JMP64m $noreg, 8, [[COPY2]], @computed_goto.dispatch, $noreg |
| 49 | + ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gr64 = COPY $rax |
| 50 | + ; CHECK-NEXT: JMP_1 %bb.5 |
51 | 51 | ; CHECK-NEXT: {{ $}}
|
52 | 52 | ; CHECK-NEXT: bb.2.bb2 (ir-block-address-taken %ir-block.bb2):
|
53 |
| - ; CHECK-NEXT: successors: %bb.1(0x20000000), %bb.2(0x20000000), %bb.3(0x20000000), %bb.4(0x20000000) |
| 53 | + ; CHECK-NEXT: successors: %bb.5(0x80000000) |
54 | 54 | ; CHECK-NEXT: {{ $}}
|
55 | 55 | ; CHECK-NEXT: ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
|
56 | 56 | ; CHECK-NEXT: CALL64pcrel32 target-flags(x86-plt) @f2, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax
|
57 | 57 | ; CHECK-NEXT: ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
|
58 |
| - ; CHECK-NEXT: [[COPY4:%[0-9]+]]:gr64_nosp = COPY $rax |
59 |
| - ; CHECK-NEXT: [[COPY5:%[0-9]+]]:gr64_nosp = COPY [[COPY4]] |
60 |
| - ; CHECK-NEXT: JMP64m $noreg, 8, [[COPY4]], @computed_goto.dispatch, $noreg |
| 58 | + ; CHECK-NEXT: [[COPY2:%[0-9]+]]:gr64 = COPY $rax |
| 59 | + ; CHECK-NEXT: JMP_1 %bb.5 |
61 | 60 | ; CHECK-NEXT: {{ $}}
|
62 | 61 | ; CHECK-NEXT: bb.3.bb3 (ir-block-address-taken %ir-block.bb3):
|
63 |
| - ; CHECK-NEXT: successors: %bb.1(0x20000000), %bb.2(0x20000000), %bb.3(0x20000000), %bb.4(0x20000000) |
| 62 | + ; CHECK-NEXT: successors: %bb.5(0x80000000) |
64 | 63 | ; CHECK-NEXT: {{ $}}
|
65 | 64 | ; CHECK-NEXT: ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
|
66 | 65 | ; CHECK-NEXT: CALL64pcrel32 target-flags(x86-plt) @f3, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax
|
67 | 66 | ; CHECK-NEXT: ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
|
68 |
| - ; CHECK-NEXT: [[COPY6:%[0-9]+]]:gr64_nosp = COPY $rax |
69 |
| - ; CHECK-NEXT: [[COPY7:%[0-9]+]]:gr64_nosp = COPY [[COPY6]] |
70 |
| - ; CHECK-NEXT: JMP64m $noreg, 8, [[COPY6]], @computed_goto.dispatch, $noreg |
| 67 | + ; CHECK-NEXT: [[COPY3:%[0-9]+]]:gr64 = COPY $rax |
| 68 | + ; CHECK-NEXT: JMP_1 %bb.5 |
71 | 69 | ; CHECK-NEXT: {{ $}}
|
72 | 70 | ; CHECK-NEXT: bb.4.bb4 (ir-block-address-taken %ir-block.bb4):
|
73 |
| - ; CHECK-NEXT: successors: %bb.1(0x20000000), %bb.2(0x20000000), %bb.3(0x20000000), %bb.4(0x20000000) |
| 71 | + ; CHECK-NEXT: successors: %bb.5(0x80000000) |
74 | 72 | ; CHECK-NEXT: {{ $}}
|
75 | 73 | ; CHECK-NEXT: ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
|
76 | 74 | ; CHECK-NEXT: CALL64pcrel32 target-flags(x86-plt) @f4, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax
|
77 | 75 | ; CHECK-NEXT: ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
|
78 |
| - ; CHECK-NEXT: [[COPY8:%[0-9]+]]:gr64_nosp = COPY $rax |
79 |
| - ; CHECK-NEXT: [[COPY9:%[0-9]+]]:gr64_nosp = COPY [[COPY8]] |
80 |
| - ; CHECK-NEXT: JMP64m $noreg, 8, [[COPY8]], @computed_goto.dispatch, $noreg |
| 76 | + ; CHECK-NEXT: [[COPY4:%[0-9]+]]:gr64 = COPY $rax |
| 77 | + ; 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.1 |
| 82 | + ; CHECK-NEXT: JMP64m $noreg, 8, [[PHI]], @computed_goto.dispatch, $noreg |
81 | 83 | bb.0:
|
82 | 84 | ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
|
83 | 85 | CALL64pcrel32 target-flags(x86-plt) @f0, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax
|
|
0 commit comments