Skip to content

Commit 65eaec8

Browse files
[CFIFixup] Precommit test ahead of multi-block prologues support (#72033)
Precommit test for #68984
1 parent 27c5a9b commit 65eaec8

File tree

1 file changed

+307
-0
lines changed

1 file changed

+307
-0
lines changed
Lines changed: 307 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,307 @@
1+
# RUN: llc -run-pass=cfi-fixup %s -o - | FileCheck %s
2+
--- |
3+
source_filename = "cfi-fixup.ll"
4+
target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
5+
target triple = "aarch64-linux"
6+
7+
define i32 @f(i32 %x) #0 {
8+
entry:
9+
%p = alloca i8, i32 30000, align 1
10+
switch i32 %x, label %if.end7 [
11+
i32 0, label %return
12+
i32 1, label %if.then2
13+
i32 2, label %if.then5
14+
]
15+
16+
if.then2: ; preds = %entry
17+
%call = tail call i32 @g1(i32 1)
18+
%add = add nsw i32 %call, 1
19+
br label %return
20+
21+
if.then5: ; preds = %entry
22+
%call6 = tail call i32 @g0(i32 2)
23+
%sub = sub nsw i32 1, %call6
24+
br label %return
25+
26+
if.end7: ; preds = %entry
27+
br label %return
28+
29+
return: ; preds = %if.end7, %if.then5, %if.then2, %entry
30+
%retval.0 = phi i32 [ %add, %if.then2 ], [ %sub, %if.then5 ], [ 0, %if.end7 ], [ 1, %entry ]
31+
ret i32 %retval.0
32+
}
33+
34+
declare i32 @g1(i32)
35+
36+
declare i32 @g0(i32)
37+
38+
attributes #0 = { uwtable "probe-stack"="inline-asm" }
39+
40+
...
41+
---
42+
name: f
43+
alignment: 4
44+
exposesReturnsTwice: false
45+
legalized: false
46+
regBankSelected: false
47+
selected: false
48+
failedISel: false
49+
tracksRegLiveness: true
50+
hasWinCFI: false
51+
callsEHReturn: false
52+
callsUnwindInit: false
53+
hasEHCatchret: false
54+
hasEHScopes: false
55+
hasEHFunclets: false
56+
isOutlined: false
57+
debugInstrRef: false
58+
failsVerification: false
59+
tracksDebugUserValues: true
60+
registers: []
61+
liveins:
62+
- { reg: '$w0', virtual-reg: '' }
63+
frameInfo:
64+
isFrameAddressTaken: false
65+
isReturnAddressTaken: false
66+
hasStackMap: false
67+
hasPatchPoint: false
68+
stackSize: 30016
69+
offsetAdjustment: 0
70+
maxAlignment: 8
71+
adjustsStack: true
72+
hasCalls: true
73+
stackProtector: ''
74+
functionContext: ''
75+
maxCallFrameSize: 0
76+
cvBytesOfCalleeSavedRegisters: 0
77+
hasOpaqueSPAdjustment: false
78+
hasVAStart: false
79+
hasMustTailInVarArgFunc: false
80+
hasTailCall: false
81+
localFrameSize: 30000
82+
savePoint: ''
83+
restorePoint: ''
84+
fixedStack: []
85+
stack:
86+
- { id: 0, name: p, type: default, offset: -30016, size: 30000, alignment: 1,
87+
stack-id: default, callee-saved-register: '', callee-saved-restored: true,
88+
local-offset: -30000, debug-info-variable: '', debug-info-expression: '',
89+
debug-info-location: '' }
90+
- { id: 1, name: '', type: spill-slot, offset: -8, size: 8, alignment: 8,
91+
stack-id: default, callee-saved-register: '$lr', callee-saved-restored: true,
92+
debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
93+
- { id: 2, name: '', type: spill-slot, offset: -16, size: 8, alignment: 8,
94+
stack-id: default, callee-saved-register: '$fp', callee-saved-restored: true,
95+
debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
96+
entry_values: []
97+
callSites: []
98+
debugValueSubstitutions: []
99+
constants: []
100+
machineFunctionInfo:
101+
hasRedZone: false
102+
body: |
103+
; CHECK-LABEL: name: f
104+
; CHECK: bb.0.entry:
105+
; CHECK-NEXT: successors: %bb.1(0x80000000)
106+
; CHECK-NEXT: liveins: $w0, $lr, $fp
107+
; CHECK-NEXT: {{ $}}
108+
; CHECK-NEXT: early-clobber $sp = frame-setup STPXpre killed $fp, killed $lr, $sp, -2 :: (store (s64) into %stack.2), (store (s64) into %stack.1)
109+
; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 16
110+
; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $w30, -8
111+
; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $w29, -16
112+
; CHECK-NEXT: $x9 = frame-setup SUBXri $sp, 7, 12
113+
; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa $w9, 28688
114+
; CHECK-NEXT: CFI_INSTRUCTION remember_state
115+
116+
; CHECK: bb.1.entry:
117+
; CHECK-NEXT: successors: %bb.2(0x40000000), %bb.1(0x40000000)
118+
; CHECK-NEXT: liveins: $x9
119+
; CHECK-NEXT: {{ $}}
120+
; CHECK-NEXT: $sp = frame-setup SUBXri $sp, 1, 12
121+
; CHECK-NEXT: $xzr = frame-setup SUBSXrx64 $sp, $x9, 24, implicit-def $nzcv
122+
; CHECK-NEXT: frame-setup STRXui $xzr, $sp, 0
123+
; CHECK-NEXT: frame-setup Bcc 1, %bb.1, implicit killed $nzcv
124+
; CHECK-NEXT: {{ $}}
125+
; CHECK-NEXT: bb.2.entry:
126+
; CHECK-NEXT: successors: %bb.6(0x20000000), %bb.3(0x60000000)
127+
; CHECK-NEXT: liveins: $w0
128+
; CHECK-NEXT: {{ $}}
129+
; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa_register $wsp
130+
; CHECK-NEXT: $sp = frame-setup SUBXri $sp, 1328, 0
131+
; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 30016
132+
; CHECK-NEXT: frame-setup STRXui $xzr, $sp, 0
133+
; CHECK-NEXT: CBZW renamable $w0, %bb.6
134+
; CHECK-NEXT: {{ $}}
135+
; CHECK-NEXT: bb.3.entry:
136+
; CHECK-NEXT: successors: %bb.7(0x2aaaaaab), %bb.4(0x55555555)
137+
; CHECK-NEXT: liveins: $w0
138+
; CHECK-NEXT: {{ $}}
139+
; CHECK-NEXT: dead $wzr = SUBSWri renamable $w0, 2, 0, implicit-def $nzcv
140+
; CHECK-NEXT: Bcc 0, %bb.7, implicit killed $nzcv
141+
; CHECK-NEXT: {{ $}}
142+
; CHECK-NEXT: bb.4.entry:
143+
; CHECK-NEXT: successors: %bb.5(0x40000000), %bb.8(0x40000000)
144+
; CHECK-NEXT: liveins: $w0
145+
; CHECK-NEXT: {{ $}}
146+
; CHECK-NEXT: dead $wzr = SUBSWri renamable $w0, 1, 0, implicit-def $nzcv
147+
; CHECK-NEXT: Bcc 1, %bb.8, implicit killed $nzcv
148+
; CHECK-NEXT: {{ $}}
149+
; CHECK-NEXT: bb.5.if.then2:
150+
; CHECK-NEXT: liveins: $w0
151+
; CHECK-NEXT: {{ $}}
152+
; CHECK-NEXT: BL @g1, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit killed $w0, implicit-def $sp, implicit-def $w0
153+
; CHECK-NEXT: renamable $w0 = nsw ADDWri killed renamable $w0, 1, 0
154+
; CHECK-NEXT: $sp = frame-destroy ADDXri $sp, 7, 12
155+
; CHECK-NEXT: frame-destroy CFI_INSTRUCTION def_cfa_offset 1344
156+
; CHECK-NEXT: $sp = frame-destroy ADDXri $sp, 1328, 0
157+
; CHECK-NEXT: frame-destroy CFI_INSTRUCTION def_cfa_offset 16
158+
; CHECK-NEXT: early-clobber $sp, $fp, $lr = frame-destroy LDPXpost $sp, 2 :: (load (s64) from %stack.2), (load (s64) from %stack.1)
159+
; CHECK-NEXT: frame-destroy CFI_INSTRUCTION def_cfa_offset 0
160+
; CHECK-NEXT: frame-destroy CFI_INSTRUCTION restore $w30
161+
; CHECK-NEXT: frame-destroy CFI_INSTRUCTION restore $w29
162+
; CHECK-NEXT: RET undef $lr, implicit killed $w0
163+
; CHECK-NEXT: {{ $}}
164+
; CHECK-NEXT: bb.6:
165+
; CHECK-NEXT: CFI_INSTRUCTION restore_state
166+
; CHECK-NEXT: CFI_INSTRUCTION remember_state
167+
; CHECK-NEXT: renamable $w0 = MOVZWi 1, 0
168+
; CHECK-NEXT: $sp = frame-destroy ADDXri $sp, 7, 12
169+
; CHECK-NEXT: frame-destroy CFI_INSTRUCTION def_cfa_offset 1344
170+
; CHECK-NEXT: $sp = frame-destroy ADDXri $sp, 1328, 0
171+
; CHECK-NEXT: frame-destroy CFI_INSTRUCTION def_cfa_offset 16
172+
; CHECK-NEXT: early-clobber $sp, $fp, $lr = frame-destroy LDPXpost $sp, 2 :: (load (s64) from %stack.2), (load (s64) from %stack.1)
173+
; CHECK-NEXT: frame-destroy CFI_INSTRUCTION def_cfa_offset 0
174+
; CHECK-NEXT: frame-destroy CFI_INSTRUCTION restore $w30
175+
; CHECK-NEXT: frame-destroy CFI_INSTRUCTION restore $w29
176+
; CHECK-NEXT: RET undef $lr, implicit killed $w0
177+
; CHECK-NEXT: {{ $}}
178+
; CHECK-NEXT: bb.7.if.then5:
179+
; CHECK-NEXT: liveins: $w0
180+
; CHECK-NEXT: {{ $}}
181+
; CHECK-NEXT: CFI_INSTRUCTION restore_state
182+
; CHECK-NEXT: CFI_INSTRUCTION remember_state
183+
; CHECK-NEXT: BL @g0, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit killed $w0, implicit-def $sp, implicit-def $w0
184+
; CHECK-NEXT: renamable $w8 = MOVZWi 1, 0
185+
; CHECK-NEXT: $w0 = SUBWrs killed renamable $w8, killed renamable $w0, 0
186+
; CHECK-NEXT: $sp = frame-destroy ADDXri $sp, 7, 12
187+
; CHECK-NEXT: frame-destroy CFI_INSTRUCTION def_cfa_offset 1344
188+
; CHECK-NEXT: $sp = frame-destroy ADDXri $sp, 1328, 0
189+
; CHECK-NEXT: frame-destroy CFI_INSTRUCTION def_cfa_offset 16
190+
; CHECK-NEXT: early-clobber $sp, $fp, $lr = frame-destroy LDPXpost $sp, 2 :: (load (s64) from %stack.2), (load (s64) from %stack.1)
191+
; CHECK-NEXT: frame-destroy CFI_INSTRUCTION def_cfa_offset 0
192+
; CHECK-NEXT: frame-destroy CFI_INSTRUCTION restore $w30
193+
; CHECK-NEXT: frame-destroy CFI_INSTRUCTION restore $w29
194+
; CHECK-NEXT: RET undef $lr, implicit killed $w0
195+
; CHECK-NEXT: {{ $}}
196+
; CHECK-NEXT: bb.8.if.end7:
197+
; CHECK-NEXT: CFI_INSTRUCTION restore_state
198+
; CHECK-NEXT: $w0 = ORRWrs $wzr, $wzr, 0
199+
; CHECK-NEXT: $sp = frame-destroy ADDXri $sp, 7, 12
200+
; CHECK-NEXT: frame-destroy CFI_INSTRUCTION def_cfa_offset 1344
201+
; CHECK-NEXT: $sp = frame-destroy ADDXri $sp, 1328, 0
202+
; CHECK-NEXT: frame-destroy CFI_INSTRUCTION def_cfa_offset 16
203+
; CHECK-NEXT: early-clobber $sp, $fp, $lr = frame-destroy LDPXpost $sp, 2 :: (load (s64) from %stack.2), (load (s64) from %stack.1)
204+
; CHECK-NEXT: frame-destroy CFI_INSTRUCTION def_cfa_offset 0
205+
; CHECK-NEXT: frame-destroy CFI_INSTRUCTION restore $w30
206+
; CHECK-NEXT: frame-destroy CFI_INSTRUCTION restore $w29
207+
; CHECK-NEXT: RET undef $lr, implicit killed $w0
208+
bb.0.entry:
209+
successors: %bb.1(0x80000000)
210+
liveins: $w0, $lr, $fp
211+
212+
early-clobber $sp = frame-setup STPXpre killed $fp, killed $lr, $sp, -2 :: (store (s64) into %stack.2), (store (s64) into %stack.1)
213+
frame-setup CFI_INSTRUCTION def_cfa_offset 16
214+
frame-setup CFI_INSTRUCTION offset $w30, -8
215+
frame-setup CFI_INSTRUCTION offset $w29, -16
216+
$x9 = frame-setup SUBXri $sp, 7, 12
217+
frame-setup CFI_INSTRUCTION def_cfa $w9, 28688
218+
219+
bb.1.entry:
220+
successors: %bb.2(0x40000000), %bb.1(0x40000000)
221+
liveins: $x9
222+
223+
$sp = frame-setup SUBXri $sp, 1, 12
224+
$xzr = frame-setup SUBSXrx64 $sp, $x9, 24, implicit-def $nzcv
225+
frame-setup STRXui $xzr, $sp, 0
226+
frame-setup Bcc 1, %bb.1, implicit killed $nzcv
227+
228+
bb.2.entry:
229+
successors: %bb.6(0x20000000), %bb.3(0x60000000)
230+
liveins: $w0
231+
232+
frame-setup CFI_INSTRUCTION def_cfa_register $wsp
233+
$sp = frame-setup SUBXri $sp, 1328, 0
234+
frame-setup CFI_INSTRUCTION def_cfa_offset 30016
235+
frame-setup STRXui $xzr, $sp, 0
236+
CBZW renamable $w0, %bb.6
237+
238+
bb.3.entry:
239+
successors: %bb.7(0x2aaaaaab), %bb.4(0x55555555)
240+
liveins: $w0
241+
242+
dead $wzr = SUBSWri renamable $w0, 2, 0, implicit-def $nzcv
243+
Bcc 0, %bb.7, implicit killed $nzcv
244+
245+
bb.4.entry:
246+
successors: %bb.5(0x40000000), %bb.8(0x40000000)
247+
liveins: $w0
248+
249+
dead $wzr = SUBSWri renamable $w0, 1, 0, implicit-def $nzcv
250+
Bcc 1, %bb.8, implicit killed $nzcv
251+
252+
bb.5.if.then2:
253+
liveins: $w0
254+
255+
BL @g1, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit killed $w0, implicit-def $sp, implicit-def $w0
256+
renamable $w0 = nsw ADDWri killed renamable $w0, 1, 0
257+
$sp = frame-destroy ADDXri $sp, 7, 12
258+
frame-destroy CFI_INSTRUCTION def_cfa_offset 1344
259+
$sp = frame-destroy ADDXri $sp, 1328, 0
260+
frame-destroy CFI_INSTRUCTION def_cfa_offset 16
261+
early-clobber $sp, $fp, $lr = frame-destroy LDPXpost $sp, 2 :: (load (s64) from %stack.2), (load (s64) from %stack.1)
262+
frame-destroy CFI_INSTRUCTION def_cfa_offset 0
263+
frame-destroy CFI_INSTRUCTION restore $w30
264+
frame-destroy CFI_INSTRUCTION restore $w29
265+
RET undef $lr, implicit killed $w0
266+
267+
bb.6:
268+
renamable $w0 = MOVZWi 1, 0
269+
$sp = frame-destroy ADDXri $sp, 7, 12
270+
frame-destroy CFI_INSTRUCTION def_cfa_offset 1344
271+
$sp = frame-destroy ADDXri $sp, 1328, 0
272+
frame-destroy CFI_INSTRUCTION def_cfa_offset 16
273+
early-clobber $sp, $fp, $lr = frame-destroy LDPXpost $sp, 2 :: (load (s64) from %stack.2), (load (s64) from %stack.1)
274+
frame-destroy CFI_INSTRUCTION def_cfa_offset 0
275+
frame-destroy CFI_INSTRUCTION restore $w30
276+
frame-destroy CFI_INSTRUCTION restore $w29
277+
RET undef $lr, implicit killed $w0
278+
279+
bb.7.if.then5:
280+
liveins: $w0
281+
282+
BL @g0, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit killed $w0, implicit-def $sp, implicit-def $w0
283+
renamable $w8 = MOVZWi 1, 0
284+
$w0 = SUBWrs killed renamable $w8, killed renamable $w0, 0
285+
$sp = frame-destroy ADDXri $sp, 7, 12
286+
frame-destroy CFI_INSTRUCTION def_cfa_offset 1344
287+
$sp = frame-destroy ADDXri $sp, 1328, 0
288+
frame-destroy CFI_INSTRUCTION def_cfa_offset 16
289+
early-clobber $sp, $fp, $lr = frame-destroy LDPXpost $sp, 2 :: (load (s64) from %stack.2), (load (s64) from %stack.1)
290+
frame-destroy CFI_INSTRUCTION def_cfa_offset 0
291+
frame-destroy CFI_INSTRUCTION restore $w30
292+
frame-destroy CFI_INSTRUCTION restore $w29
293+
RET undef $lr, implicit killed $w0
294+
295+
bb.8.if.end7:
296+
$w0 = ORRWrs $wzr, $wzr, 0
297+
$sp = frame-destroy ADDXri $sp, 7, 12
298+
frame-destroy CFI_INSTRUCTION def_cfa_offset 1344
299+
$sp = frame-destroy ADDXri $sp, 1328, 0
300+
frame-destroy CFI_INSTRUCTION def_cfa_offset 16
301+
early-clobber $sp, $fp, $lr = frame-destroy LDPXpost $sp, 2 :: (load (s64) from %stack.2), (load (s64) from %stack.1)
302+
frame-destroy CFI_INSTRUCTION def_cfa_offset 0
303+
frame-destroy CFI_INSTRUCTION restore $w30
304+
frame-destroy CFI_INSTRUCTION restore $w29
305+
RET undef $lr, implicit killed $w0
306+
307+
...

0 commit comments

Comments
 (0)