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:
265276body : |
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