8
8
declare i64 @f3()
9
9
declare i64 @f4()
10
10
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
+ }
13
24
define void @jump_table() { ret void }
14
25
define void @jump_table_pic() { ret void }
15
26
...
@@ -29,7 +40,7 @@ body: |
29
40
; CHECK-NEXT: [[COPY2:%[0-9]+]]:gr64_nosp = COPY [[COPY1]]
30
41
; CHECK-NEXT: JMP64m $noreg, 8, [[COPY1]], @computed_goto.dispatch, $noreg
31
42
; CHECK-NEXT: {{ $}}
32
- ; CHECK-NEXT: bb.1:
43
+ ; CHECK-NEXT: bb.1.bb1 (ir-block-address-taken %ir-block.bb1) :
33
44
; CHECK-NEXT: successors: %bb.1(0x20000000), %bb.2(0x20000000), %bb.3(0x20000000), %bb.4(0x20000000)
34
45
; CHECK-NEXT: {{ $}}
35
46
; 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: |
40
51
; CHECK-NEXT: [[COPY5:%[0-9]+]]:gr64_nosp = COPY [[COPY4]]
41
52
; CHECK-NEXT: JMP64m $noreg, 8, [[COPY4]], @computed_goto.dispatch, $noreg
42
53
; CHECK-NEXT: {{ $}}
43
- ; CHECK-NEXT: bb.2:
54
+ ; CHECK-NEXT: bb.2.bb2 (ir-block-address-taken %ir-block.bb2) :
44
55
; CHECK-NEXT: successors: %bb.1(0x20000000), %bb.2(0x20000000), %bb.3(0x20000000), %bb.4(0x20000000)
45
56
; CHECK-NEXT: {{ $}}
46
57
; 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: |
51
62
; CHECK-NEXT: [[COPY8:%[0-9]+]]:gr64_nosp = COPY [[COPY7]]
52
63
; CHECK-NEXT: JMP64m $noreg, 8, [[COPY7]], @computed_goto.dispatch, $noreg
53
64
; CHECK-NEXT: {{ $}}
54
- ; CHECK-NEXT: bb.3:
65
+ ; CHECK-NEXT: bb.3.bb3 (ir-block-address-taken %ir-block.bb3) :
55
66
; CHECK-NEXT: successors: %bb.1(0x20000000), %bb.2(0x20000000), %bb.3(0x20000000), %bb.4(0x20000000)
56
67
; CHECK-NEXT: {{ $}}
57
68
; 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: |
62
73
; CHECK-NEXT: [[COPY11:%[0-9]+]]:gr64_nosp = COPY [[COPY10]]
63
74
; CHECK-NEXT: JMP64m $noreg, 8, [[COPY10]], @computed_goto.dispatch, $noreg
64
75
; CHECK-NEXT: {{ $}}
65
- ; CHECK-NEXT: bb.4:
76
+ ; CHECK-NEXT: bb.4.bb4 (ir-block-address-taken %ir-block.bb4) :
66
77
; CHECK-NEXT: successors: %bb.1(0x20000000), %bb.2(0x20000000), %bb.3(0x20000000), %bb.4(0x20000000)
67
78
; CHECK-NEXT: {{ $}}
68
79
; 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: |
80
91
%0:gr64 = COPY %6
81
92
JMP_1 %bb.5
82
93
83
- bb.1:
94
+ bb.1.bb1 (ir-block-address-taken %ir-block.bb1) :
84
95
ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
85
96
CALL64pcrel32 target-flags(x86-plt) @f1, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax
86
97
ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
87
98
%10:gr64 = COPY $rax
88
99
%1:gr64 = COPY %10
89
100
JMP_1 %bb.5
90
101
91
- bb.2:
102
+ bb.2.bb2 (ir-block-address-taken %ir-block.bb2) :
92
103
ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
93
104
CALL64pcrel32 target-flags(x86-plt) @f2, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax
94
105
ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
95
106
%9:gr64 = COPY $rax
96
107
%2:gr64 = COPY %9
97
108
JMP_1 %bb.5
98
109
99
- bb.3:
110
+ bb.3.bb3 (ir-block-address-taken %ir-block.bb3) :
100
111
ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
101
112
CALL64pcrel32 target-flags(x86-plt) @f3, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax
102
113
ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
103
114
%8:gr64 = COPY $rax
104
115
%3:gr64 = COPY %8
105
116
JMP_1 %bb.5
106
117
107
- bb.4:
118
+ bb.4.bb4 (ir-block-address-taken %ir-block.bb4) :
108
119
ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
109
120
CALL64pcrel32 target-flags(x86-plt) @f4, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax
110
121
ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
@@ -265,94 +276,73 @@ jumpTable:
265
276
body : |
266
277
; CHECK-LABEL: name: jump_table_pic
267
278
; 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 )
269
280
; CHECK-NEXT: {{ $}}
270
281
; CHECK-NEXT: ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
271
282
; CHECK-NEXT: CALL64pcrel32 target-flags(x86-plt) @f0, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax
272
283
; CHECK-NEXT: ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
273
284
; CHECK-NEXT: [[COPY:%[0-9]+]]:gr64 = COPY $rax
274
285
; 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
276
292
; CHECK-NEXT: [[LEA64r:%[0-9]+]]:gr64 = LEA64r $rip, 1, $noreg, %jump-table.0, $noreg
277
293
; CHECK-NEXT: [[MOVSX64rm32_:%[0-9]+]]:gr64 = MOVSX64rm32 [[DEC64r]], 4, [[DEC64r]], 0, $noreg :: (load (s32) from jump-table)
278
294
; CHECK-NEXT: [[ADD64rr:%[0-9]+]]:gr64 = ADD64rr [[LEA64r]], [[MOVSX64rm32_]], implicit-def dead $eflags
279
- ; CHECK-NEXT: [[COPY2:%[0-9]+]]:gr64 = COPY [[COPY1]]
280
295
; CHECK-NEXT: JMP64r [[ADD64rr]]
281
296
; CHECK-NEXT: {{ $}}
282
297
; 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 )
284
299
; CHECK-NEXT: {{ $}}
285
300
; CHECK-NEXT: ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
286
301
; CHECK-NEXT: CALL64pcrel32 target-flags(x86-plt) @f1, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax
287
302
; 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
296
306
; CHECK-NEXT: {{ $}}
297
307
; 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 )
299
309
; CHECK-NEXT: {{ $}}
300
310
; CHECK-NEXT: ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
301
311
; CHECK-NEXT: CALL64pcrel32 target-flags(x86-plt) @f2, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax
302
312
; 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
311
316
; CHECK-NEXT: {{ $}}
312
317
; 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 )
314
319
; CHECK-NEXT: {{ $}}
315
320
; CHECK-NEXT: ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
316
321
; CHECK-NEXT: CALL64pcrel32 target-flags(x86-plt) @f3, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax
317
322
; 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
326
326
; CHECK-NEXT: {{ $}}
327
327
; 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 )
329
329
; CHECK-NEXT: {{ $}}
330
330
; CHECK-NEXT: ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
331
331
; CHECK-NEXT: CALL64pcrel32 target-flags(x86-plt) @f4, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax
332
332
; 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
341
336
; CHECK-NEXT: {{ $}}
342
337
; 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 )
344
339
; CHECK-NEXT: {{ $}}
345
340
; CHECK-NEXT: ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp
346
341
; CHECK-NEXT: CALL64pcrel32 target-flags(x86-plt) @f5, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax
347
342
; 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
356
346
; CHECK-NEXT: {{ $}}
357
347
; CHECK-NEXT: bb.8:
358
348
bb.0:
0 commit comments