Skip to content

Commit 4ed0b5f

Browse files
committed
[TailDuplicator] Determine if computed gotos using blockaddress
1 parent 33b40ec commit 4ed0b5f

File tree

3 files changed

+58
-61
lines changed

3 files changed

+58
-61
lines changed

llvm/include/llvm/CodeGen/MachineInstr.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -997,9 +997,7 @@ class MachineInstr
997997
bool isIndirectBranch(QueryType Type = AnyInBundle,
998998
bool IncludeJumpTable = true) const {
999999
return hasProperty(MCID::IndirectBranch, Type) &&
1000-
(IncludeJumpTable || !llvm::any_of(operands(), [](const auto &Op) {
1001-
return Op.isJTI();
1002-
}));
1000+
(IncludeJumpTable || jumpToIRBlockAddressTaken());
10031001
}
10041002

10051003
bool isComputedGoto(QueryType Type = AnyInBundle) const {
@@ -2088,6 +2086,9 @@ class MachineInstr
20882086
MCSymbol *PreInstrSymbol, MCSymbol *PostInstrSymbol,
20892087
MDNode *HeapAllocMarker, MDNode *PCSections,
20902088
uint32_t CFIType, MDNode *MMRAs);
2089+
2090+
/// Returns true if all successors are IRBlockAddressTaken.
2091+
bool jumpToIRBlockAddressTaken() const;
20912092
};
20922093

20932094
/// Special DenseMapInfo traits to compare MachineInstr* by *value* of the

llvm/lib/CodeGen/MachineInstr.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -359,6 +359,12 @@ void MachineInstr::setExtraInfo(MachineFunction &MF,
359359
Info.set<EIIK_MMO>(MMOs[0]);
360360
}
361361

362+
bool MachineInstr::jumpToIRBlockAddressTaken() const {
363+
return llvm::all_of(getParent()->successors(), [](const auto *Succ) {
364+
return Succ->isIRBlockAddressTaken();
365+
});
366+
}
367+
362368
void MachineInstr::dropMemRefs(MachineFunction &MF) {
363369
if (memoperands_empty())
364370
return;

llvm/test/CodeGen/X86/tail-dup-computed-goto.mir

Lines changed: 48 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,19 @@
88
declare i64 @f3()
99
declare i64 @f4()
1010
declare i64 @f5()
11-
@computed_goto.dispatch = external global [5 x ptr]
12-
define void @computed_goto() { ret void }
11+
@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)]
12+
define void @computed_goto() {
13+
start:
14+
ret void
15+
bb1:
16+
ret void
17+
bb2:
18+
ret void
19+
bb3:
20+
ret void
21+
bb4:
22+
ret void
23+
}
1324
define void @jump_table() { ret void }
1425
define void @jump_table_pic() { ret void }
1526
...
@@ -29,7 +40,7 @@ body: |
2940
; CHECK-NEXT: [[COPY2:%[0-9]+]]:gr64_nosp = COPY [[COPY1]]
3041
; CHECK-NEXT: JMP64m $noreg, 8, [[COPY1]], @computed_goto.dispatch, $noreg
3142
; CHECK-NEXT: {{ $}}
32-
; CHECK-NEXT: bb.1:
43+
; CHECK-NEXT: bb.1.bb1 (ir-block-address-taken %ir-block.bb1):
3344
; CHECK-NEXT: successors: %bb.1(0x20000000), %bb.2(0x20000000), %bb.3(0x20000000), %bb.4(0x20000000)
3445
; CHECK-NEXT: {{ $}}
3546
; CHECK-NEXT: ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
@@ -40,7 +51,7 @@ body: |
4051
; CHECK-NEXT: [[COPY5:%[0-9]+]]:gr64_nosp = COPY [[COPY4]]
4152
; CHECK-NEXT: JMP64m $noreg, 8, [[COPY4]], @computed_goto.dispatch, $noreg
4253
; CHECK-NEXT: {{ $}}
43-
; CHECK-NEXT: bb.2:
54+
; CHECK-NEXT: bb.2.bb2 (ir-block-address-taken %ir-block.bb2):
4455
; CHECK-NEXT: successors: %bb.1(0x20000000), %bb.2(0x20000000), %bb.3(0x20000000), %bb.4(0x20000000)
4556
; CHECK-NEXT: {{ $}}
4657
; CHECK-NEXT: ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
@@ -51,7 +62,7 @@ body: |
5162
; CHECK-NEXT: [[COPY8:%[0-9]+]]:gr64_nosp = COPY [[COPY7]]
5263
; CHECK-NEXT: JMP64m $noreg, 8, [[COPY7]], @computed_goto.dispatch, $noreg
5364
; CHECK-NEXT: {{ $}}
54-
; CHECK-NEXT: bb.3:
65+
; CHECK-NEXT: bb.3.bb3 (ir-block-address-taken %ir-block.bb3):
5566
; CHECK-NEXT: successors: %bb.1(0x20000000), %bb.2(0x20000000), %bb.3(0x20000000), %bb.4(0x20000000)
5667
; CHECK-NEXT: {{ $}}
5768
; CHECK-NEXT: ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
@@ -62,7 +73,7 @@ body: |
6273
; CHECK-NEXT: [[COPY11:%[0-9]+]]:gr64_nosp = COPY [[COPY10]]
6374
; CHECK-NEXT: JMP64m $noreg, 8, [[COPY10]], @computed_goto.dispatch, $noreg
6475
; CHECK-NEXT: {{ $}}
65-
; CHECK-NEXT: bb.4:
76+
; CHECK-NEXT: bb.4.bb4 (ir-block-address-taken %ir-block.bb4):
6677
; CHECK-NEXT: successors: %bb.1(0x20000000), %bb.2(0x20000000), %bb.3(0x20000000), %bb.4(0x20000000)
6778
; CHECK-NEXT: {{ $}}
6879
; CHECK-NEXT: ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
@@ -80,31 +91,31 @@ body: |
8091
%0:gr64 = COPY %6
8192
JMP_1 %bb.5
8293
83-
bb.1:
94+
bb.1.bb1 (ir-block-address-taken %ir-block.bb1):
8495
ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
8596
CALL64pcrel32 target-flags(x86-plt) @f1, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax
8697
ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
8798
%10:gr64 = COPY $rax
8899
%1:gr64 = COPY %10
89100
JMP_1 %bb.5
90101
91-
bb.2:
102+
bb.2.bb2 (ir-block-address-taken %ir-block.bb2):
92103
ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
93104
CALL64pcrel32 target-flags(x86-plt) @f2, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax
94105
ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
95106
%9:gr64 = COPY $rax
96107
%2:gr64 = COPY %9
97108
JMP_1 %bb.5
98109
99-
bb.3:
110+
bb.3.bb3 (ir-block-address-taken %ir-block.bb3):
100111
ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
101112
CALL64pcrel32 target-flags(x86-plt) @f3, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax
102113
ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
103114
%8:gr64 = COPY $rax
104115
%3:gr64 = COPY %8
105116
JMP_1 %bb.5
106117
107-
bb.4:
118+
bb.4.bb4 (ir-block-address-taken %ir-block.bb4):
108119
ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
109120
CALL64pcrel32 target-flags(x86-plt) @f4, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax
110121
ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
@@ -265,94 +276,73 @@ jumpTable:
265276
body: |
266277
; CHECK-LABEL: name: jump_table_pic
267278
; CHECK: bb.0:
268-
; CHECK-NEXT: successors: %bb.3(0x1999999a), %bb.4(0x1999999a), %bb.5(0x1999999a), %bb.6(0x1999999a), %bb.7(0x1999999a)
279+
; CHECK-NEXT: successors: %bb.1(0x80000000)
269280
; CHECK-NEXT: {{ $}}
270281
; CHECK-NEXT: ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
271282
; CHECK-NEXT: CALL64pcrel32 target-flags(x86-plt) @f0, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax
272283
; CHECK-NEXT: ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
273284
; CHECK-NEXT: [[COPY:%[0-9]+]]:gr64 = COPY $rax
274285
; CHECK-NEXT: [[COPY1:%[0-9]+]]:gr64 = COPY [[COPY]]
275-
; CHECK-NEXT: [[DEC64r:%[0-9]+]]:gr64_nosp = DEC64r [[COPY1]], implicit-def dead $eflags
286+
; CHECK-NEXT: {{ $}}
287+
; CHECK-NEXT: bb.1:
288+
; CHECK-NEXT: successors: %bb.3(0x1999999a), %bb.4(0x1999999a), %bb.5(0x1999999a), %bb.6(0x1999999a), %bb.7(0x1999999a)
289+
; CHECK-NEXT: {{ $}}
290+
; CHECK-NEXT: [[PHI:%[0-9]+]]:gr64 = PHI [[COPY1]], %bb.0, %3, %bb.7, %4, %bb.6, %5, %bb.5, %6, %bb.4, %7, %bb.3
291+
; CHECK-NEXT: [[DEC64r:%[0-9]+]]:gr64_nosp = DEC64r [[PHI]], implicit-def dead $eflags
276292
; CHECK-NEXT: [[LEA64r:%[0-9]+]]:gr64 = LEA64r $rip, 1, $noreg, %jump-table.0, $noreg
277293
; CHECK-NEXT: [[MOVSX64rm32_:%[0-9]+]]:gr64 = MOVSX64rm32 [[DEC64r]], 4, [[DEC64r]], 0, $noreg :: (load (s32) from jump-table)
278294
; CHECK-NEXT: [[ADD64rr:%[0-9]+]]:gr64 = ADD64rr [[LEA64r]], [[MOVSX64rm32_]], implicit-def dead $eflags
279-
; CHECK-NEXT: [[COPY2:%[0-9]+]]:gr64 = COPY [[COPY1]]
280295
; CHECK-NEXT: JMP64r [[ADD64rr]]
281296
; CHECK-NEXT: {{ $}}
282297
; CHECK-NEXT: bb.3:
283-
; CHECK-NEXT: successors: %bb.3(0x1999999a), %bb.4(0x1999999a), %bb.5(0x1999999a), %bb.6(0x1999999a), %bb.7(0x1999999a)
298+
; CHECK-NEXT: successors: %bb.1(0x80000000)
284299
; CHECK-NEXT: {{ $}}
285300
; CHECK-NEXT: ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
286301
; CHECK-NEXT: CALL64pcrel32 target-flags(x86-plt) @f1, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax
287302
; CHECK-NEXT: ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
288-
; CHECK-NEXT: [[COPY3:%[0-9]+]]:gr64 = COPY $rax
289-
; CHECK-NEXT: [[COPY4:%[0-9]+]]:gr64 = COPY [[COPY3]]
290-
; CHECK-NEXT: [[DEC64r1:%[0-9]+]]:gr64_nosp = DEC64r [[COPY4]], implicit-def dead $eflags
291-
; CHECK-NEXT: [[LEA64r1:%[0-9]+]]:gr64 = LEA64r $rip, 1, $noreg, %jump-table.0, $noreg
292-
; CHECK-NEXT: [[MOVSX64rm32_1:%[0-9]+]]:gr64 = MOVSX64rm32 [[DEC64r1]], 4, [[DEC64r1]], 0, $noreg :: (load (s32) from jump-table)
293-
; CHECK-NEXT: [[ADD64rr1:%[0-9]+]]:gr64 = ADD64rr [[LEA64r1]], [[MOVSX64rm32_1]], implicit-def dead $eflags
294-
; CHECK-NEXT: [[COPY5:%[0-9]+]]:gr64 = COPY [[COPY4]]
295-
; CHECK-NEXT: JMP64r [[ADD64rr1]]
303+
; CHECK-NEXT: [[COPY2:%[0-9]+]]:gr64 = COPY $rax
304+
; CHECK-NEXT: [[COPY3:%[0-9]+]]:gr64 = COPY [[COPY2]]
305+
; CHECK-NEXT: JMP_1 %bb.1
296306
; CHECK-NEXT: {{ $}}
297307
; CHECK-NEXT: bb.4:
298-
; CHECK-NEXT: successors: %bb.3(0x1999999a), %bb.4(0x1999999a), %bb.5(0x1999999a), %bb.6(0x1999999a), %bb.7(0x1999999a)
308+
; CHECK-NEXT: successors: %bb.1(0x80000000)
299309
; CHECK-NEXT: {{ $}}
300310
; CHECK-NEXT: ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
301311
; CHECK-NEXT: CALL64pcrel32 target-flags(x86-plt) @f2, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax
302312
; CHECK-NEXT: ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
303-
; CHECK-NEXT: [[COPY6:%[0-9]+]]:gr64 = COPY $rax
304-
; CHECK-NEXT: [[COPY7:%[0-9]+]]:gr64 = COPY [[COPY6]]
305-
; CHECK-NEXT: [[DEC64r2:%[0-9]+]]:gr64_nosp = DEC64r [[COPY7]], implicit-def dead $eflags
306-
; CHECK-NEXT: [[LEA64r2:%[0-9]+]]:gr64 = LEA64r $rip, 1, $noreg, %jump-table.0, $noreg
307-
; CHECK-NEXT: [[MOVSX64rm32_2:%[0-9]+]]:gr64 = MOVSX64rm32 [[DEC64r2]], 4, [[DEC64r2]], 0, $noreg :: (load (s32) from jump-table)
308-
; CHECK-NEXT: [[ADD64rr2:%[0-9]+]]:gr64 = ADD64rr [[LEA64r2]], [[MOVSX64rm32_2]], implicit-def dead $eflags
309-
; CHECK-NEXT: [[COPY8:%[0-9]+]]:gr64 = COPY [[COPY7]]
310-
; CHECK-NEXT: JMP64r [[ADD64rr2]]
313+
; CHECK-NEXT: [[COPY4:%[0-9]+]]:gr64 = COPY $rax
314+
; CHECK-NEXT: [[COPY5:%[0-9]+]]:gr64 = COPY [[COPY4]]
315+
; CHECK-NEXT: JMP_1 %bb.1
311316
; CHECK-NEXT: {{ $}}
312317
; CHECK-NEXT: bb.5:
313-
; CHECK-NEXT: successors: %bb.3(0x1999999a), %bb.4(0x1999999a), %bb.5(0x1999999a), %bb.6(0x1999999a), %bb.7(0x1999999a)
318+
; CHECK-NEXT: successors: %bb.1(0x80000000)
314319
; CHECK-NEXT: {{ $}}
315320
; CHECK-NEXT: ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
316321
; CHECK-NEXT: CALL64pcrel32 target-flags(x86-plt) @f3, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax
317322
; CHECK-NEXT: ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
318-
; CHECK-NEXT: [[COPY9:%[0-9]+]]:gr64 = COPY $rax
319-
; CHECK-NEXT: [[COPY10:%[0-9]+]]:gr64 = COPY [[COPY9]]
320-
; CHECK-NEXT: [[DEC64r3:%[0-9]+]]:gr64_nosp = DEC64r [[COPY10]], implicit-def dead $eflags
321-
; CHECK-NEXT: [[LEA64r3:%[0-9]+]]:gr64 = LEA64r $rip, 1, $noreg, %jump-table.0, $noreg
322-
; CHECK-NEXT: [[MOVSX64rm32_3:%[0-9]+]]:gr64 = MOVSX64rm32 [[DEC64r3]], 4, [[DEC64r3]], 0, $noreg :: (load (s32) from jump-table)
323-
; CHECK-NEXT: [[ADD64rr3:%[0-9]+]]:gr64 = ADD64rr [[LEA64r3]], [[MOVSX64rm32_3]], implicit-def dead $eflags
324-
; CHECK-NEXT: [[COPY11:%[0-9]+]]:gr64 = COPY [[COPY10]]
325-
; CHECK-NEXT: JMP64r [[ADD64rr3]]
323+
; CHECK-NEXT: [[COPY6:%[0-9]+]]:gr64 = COPY $rax
324+
; CHECK-NEXT: [[COPY7:%[0-9]+]]:gr64 = COPY [[COPY6]]
325+
; CHECK-NEXT: JMP_1 %bb.1
326326
; CHECK-NEXT: {{ $}}
327327
; CHECK-NEXT: bb.6:
328-
; CHECK-NEXT: successors: %bb.3(0x1999999a), %bb.4(0x1999999a), %bb.5(0x1999999a), %bb.6(0x1999999a), %bb.7(0x1999999a)
328+
; CHECK-NEXT: successors: %bb.1(0x80000000)
329329
; CHECK-NEXT: {{ $}}
330330
; CHECK-NEXT: ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
331331
; CHECK-NEXT: CALL64pcrel32 target-flags(x86-plt) @f4, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax
332332
; CHECK-NEXT: ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
333-
; CHECK-NEXT: [[COPY12:%[0-9]+]]:gr64 = COPY $rax
334-
; CHECK-NEXT: [[COPY13:%[0-9]+]]:gr64 = COPY [[COPY12]]
335-
; CHECK-NEXT: [[DEC64r4:%[0-9]+]]:gr64_nosp = DEC64r [[COPY13]], implicit-def dead $eflags
336-
; CHECK-NEXT: [[LEA64r4:%[0-9]+]]:gr64 = LEA64r $rip, 1, $noreg, %jump-table.0, $noreg
337-
; CHECK-NEXT: [[MOVSX64rm32_4:%[0-9]+]]:gr64 = MOVSX64rm32 [[DEC64r4]], 4, [[DEC64r4]], 0, $noreg :: (load (s32) from jump-table)
338-
; CHECK-NEXT: [[ADD64rr4:%[0-9]+]]:gr64 = ADD64rr [[LEA64r4]], [[MOVSX64rm32_4]], implicit-def dead $eflags
339-
; CHECK-NEXT: [[COPY14:%[0-9]+]]:gr64 = COPY [[COPY13]]
340-
; CHECK-NEXT: JMP64r [[ADD64rr4]]
333+
; CHECK-NEXT: [[COPY8:%[0-9]+]]:gr64 = COPY $rax
334+
; CHECK-NEXT: [[COPY9:%[0-9]+]]:gr64 = COPY [[COPY8]]
335+
; CHECK-NEXT: JMP_1 %bb.1
341336
; CHECK-NEXT: {{ $}}
342337
; CHECK-NEXT: bb.7:
343-
; CHECK-NEXT: successors: %bb.3(0x1999999a), %bb.4(0x1999999a), %bb.5(0x1999999a), %bb.6(0x1999999a), %bb.7(0x1999999a)
338+
; CHECK-NEXT: successors: %bb.1(0x80000000)
344339
; CHECK-NEXT: {{ $}}
345340
; CHECK-NEXT: ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
346341
; CHECK-NEXT: CALL64pcrel32 target-flags(x86-plt) @f5, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax
347342
; CHECK-NEXT: ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
348-
; CHECK-NEXT: [[COPY15:%[0-9]+]]:gr64 = COPY $rax
349-
; CHECK-NEXT: [[COPY16:%[0-9]+]]:gr64 = COPY [[COPY15]]
350-
; CHECK-NEXT: [[DEC64r5:%[0-9]+]]:gr64_nosp = DEC64r [[COPY16]], implicit-def dead $eflags
351-
; CHECK-NEXT: [[LEA64r5:%[0-9]+]]:gr64 = LEA64r $rip, 1, $noreg, %jump-table.0, $noreg
352-
; CHECK-NEXT: [[MOVSX64rm32_5:%[0-9]+]]:gr64 = MOVSX64rm32 [[DEC64r5]], 4, [[DEC64r5]], 0, $noreg :: (load (s32) from jump-table)
353-
; CHECK-NEXT: [[ADD64rr5:%[0-9]+]]:gr64 = ADD64rr [[LEA64r5]], [[MOVSX64rm32_5]], implicit-def dead $eflags
354-
; CHECK-NEXT: [[COPY17:%[0-9]+]]:gr64 = COPY [[COPY16]]
355-
; CHECK-NEXT: JMP64r [[ADD64rr5]]
343+
; CHECK-NEXT: [[COPY10:%[0-9]+]]:gr64 = COPY $rax
344+
; CHECK-NEXT: [[COPY11:%[0-9]+]]:gr64 = COPY [[COPY10]]
345+
; CHECK-NEXT: JMP_1 %bb.1
356346
; CHECK-NEXT: {{ $}}
357347
; CHECK-NEXT: bb.8:
358348
bb.0:

0 commit comments

Comments
 (0)