Skip to content

Commit 2e9b586

Browse files
committed
Precommit tests for synchronous uwtable CFI fixup
1 parent d705e7e commit 2e9b586

File tree

1 file changed

+183
-0
lines changed

1 file changed

+183
-0
lines changed

llvm/test/CodeGen/AArch64/cfi-fixup-multi-section.mir

Lines changed: 183 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,19 @@
1010
ret i32 0
1111
}
1212

13+
define i32 @f1(i32 %x) #1 {
14+
entry: br label %return
15+
if.end: br label %return
16+
if.then2: br label %return
17+
if.else: br label %return
18+
return:
19+
ret i32 0
20+
}
21+
1322
declare i32 @g(i32)
1423

1524
attributes #0 = { nounwind shadowcallstack uwtable "sign-return-address"="non-leaf" "target-features"="+reserve-x18" }
25+
attributes #1 = { nounwind shadowcallstack uwtable(sync) "sign-return-address"="non-leaf" "target-features"="+reserve-x18" }
1626

1727
...
1828
---
@@ -197,4 +207,177 @@ body: |
197207
B %bb.7
198208
199209
210+
...
211+
---
212+
name: f1
213+
alignment: 4
214+
exposesReturnsTwice: false
215+
legalized: false
216+
regBankSelected: false
217+
selected: false
218+
failedISel: false
219+
tracksRegLiveness: true
220+
hasWinCFI: false
221+
failsVerification: false
222+
registers: []
223+
liveins:
224+
- { reg: '$w0', virtual-reg: '' }
225+
frameInfo:
226+
isFrameAddressTaken: false
227+
isReturnAddressTaken: false
228+
hasStackMap: false
229+
hasPatchPoint: false
230+
stackSize: 16
231+
offsetAdjustment: 0
232+
maxAlignment: 16
233+
adjustsStack: true
234+
hasCalls: true
235+
stackProtector: ''
236+
maxCallFrameSize: 0
237+
cvBytesOfCalleeSavedRegisters: 0
238+
hasOpaqueSPAdjustment: false
239+
hasVAStart: false
240+
hasMustTailInVarArgFunc: false
241+
hasTailCall: false
242+
localFrameSize: 0
243+
savePoint: ''
244+
restorePoint: ''
245+
fixedStack: []
246+
stack:
247+
- { id: 0, name: '', type: spill-slot, offset: -16, size: 8, alignment: 16,
248+
stack-id: default, callee-saved-register: '$lr', callee-saved-restored: true,
249+
debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
250+
callSites: []
251+
debugValueSubstitutions: []
252+
constants: []
253+
body: |
254+
; CHECK-LABEL: name: f1
255+
; CHECK: bb.0.entry:
256+
; CHECK-NEXT: successors: %bb.4(0x30000000), %bb.1(0x50000000)
257+
; CHECK-NEXT: liveins: $w0, $lr, $x18
258+
; CHECK-NEXT: {{ $}}
259+
; CHECK-NEXT: CBZW renamable $w0, %bb.4
260+
; CHECK-NEXT: {{ $}}
261+
; CHECK-NEXT: bb.1.if.end:
262+
; CHECK-NEXT: successors: %bb.3(0x30000000), %bb.2(0x50000000)
263+
; CHECK-NEXT: liveins: $w0, $lr, $x18
264+
; CHECK-NEXT: {{ $}}
265+
; CHECK-NEXT: early-clobber $x18 = frame-setup STRXpost $lr, $x18, 8
266+
; CHECK-NEXT: frame-setup CFI_INSTRUCTION escape 0x16, 0x12, 0x02, 0x82, 0x78
267+
; CHECK-NEXT: frame-setup PACIASP implicit-def $lr, implicit killed $lr, implicit $sp
268+
; CHECK-NEXT: frame-setup CFI_INSTRUCTION negate_ra_sign_state
269+
; CHECK-NEXT: early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.0)
270+
; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 16
271+
; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $w30, -16
272+
; CHECK-NEXT: TBNZW renamable $w0, 31, %bb.3
273+
; CHECK-NEXT: {{ $}}
274+
; CHECK-NEXT: bb.2.if.else:
275+
; CHECK-NEXT: successors: %bb.5(0x80000000)
276+
; CHECK-NEXT: liveins: $w0
277+
; CHECK-NEXT: {{ $}}
278+
; CHECK-NEXT: renamable $w0 = nuw nsw ADDWri killed renamable $w0, 1, 0
279+
; CHECK-NEXT: BL @g, csr_aarch64_aapcs_scs, implicit-def dead $lr, implicit $sp, implicit killed $w0, implicit-def $sp, implicit-def $w0
280+
; CHECK-NEXT: renamable $w8 = MOVZWi 1, 0
281+
; CHECK-NEXT: $w0 = SUBWrs killed renamable $w8, killed renamable $w0, 0
282+
; CHECK-NEXT: B %bb.5
283+
; CHECK-NEXT: {{ $}}
284+
; CHECK-NEXT: bb.3.if.then2 (bbsections 1):
285+
; CHECK-NEXT: successors: %bb.5(0x80000000)
286+
; CHECK-NEXT: liveins: $w0
287+
; CHECK-NEXT: {{ $}}
288+
; CHECK-NEXT: renamable $w0 = nsw SUBWri killed renamable $w0, 1, 0
289+
; CHECK-NEXT: BL @g, csr_aarch64_aapcs_scs, implicit-def dead $lr, implicit $sp, implicit killed $w0, implicit-def $sp, implicit-def $w0
290+
; CHECK-NEXT: renamable $w0 = nsw ADDWri killed renamable $w0, 1, 0
291+
; CHECK-NEXT: B %bb.5
292+
; CHECK-NEXT: {{ $}}
293+
; CHECK-NEXT: bb.4.return:
294+
; CHECK-NEXT: liveins: $w0
295+
; CHECK-NEXT: {{ $}}
296+
; CHECK-NEXT: RET undef $lr, implicit killed $w0
297+
; CHECK-NEXT: {{ $}}
298+
; CHECK-NEXT: bb.5.return:
299+
; CHECK-NEXT: successors: %bb.7(0x80000000)
300+
; CHECK-NEXT: liveins: $w0
301+
; CHECK-NEXT: {{ $}}
302+
; CHECK-NEXT: B %bb.7
303+
; CHECK-NEXT: {{ $}}
304+
; CHECK-NEXT: bb.6.return:
305+
; CHECK-NEXT: liveins: $w0
306+
; CHECK-NEXT: {{ $}}
307+
; CHECK-NEXT: early-clobber $sp, $lr = frame-destroy LDRXpost $sp, 16 :: (load (s64) from %stack.0)
308+
; CHECK-NEXT: frame-destroy CFI_INSTRUCTION def_cfa_offset 0
309+
; CHECK-NEXT: frame-destroy AUTIASP implicit-def $lr, implicit killed $lr, implicit $sp
310+
; CHECK-NEXT: frame-destroy CFI_INSTRUCTION negate_ra_sign_state
311+
; CHECK-NEXT: early-clobber $x18, $lr = frame-destroy LDRXpre $x18, -8
312+
; CHECK-NEXT: frame-destroy CFI_INSTRUCTION restore $w18
313+
; CHECK-NEXT: frame-destroy CFI_INSTRUCTION restore $w30
314+
; CHECK-NEXT: RET undef $lr, implicit killed $w0
315+
; CHECK-NEXT: {{ $}}
316+
; CHECK-NEXT: bb.7.return:
317+
; CHECK-NEXT: successors: %bb.6(0x80000000)
318+
; CHECK-NEXT: liveins: $w0
319+
; CHECK-NEXT: {{ $}}
320+
; CHECK-NEXT: B %bb.6
321+
bb.0.entry:
322+
successors: %bb.4(0x30000000), %bb.1(0x50000000)
323+
liveins: $w0, $lr, $x18
324+
325+
CBZW renamable $w0, %bb.4
326+
327+
bb.1.if.end:
328+
successors: %bb.3(0x30000000), %bb.2(0x50000000)
329+
liveins: $w0, $lr, $x18
330+
331+
early-clobber $x18 = frame-setup STRXpost $lr, $x18, 8
332+
frame-setup CFI_INSTRUCTION escape 0x16, 0x12, 0x02, 0x82, 0x78
333+
frame-setup PACIASP implicit-def $lr, implicit killed $lr, implicit $sp
334+
frame-setup CFI_INSTRUCTION negate_ra_sign_state
335+
early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.0)
336+
frame-setup CFI_INSTRUCTION def_cfa_offset 16
337+
frame-setup CFI_INSTRUCTION offset $w30, -16
338+
TBNZW renamable $w0, 31, %bb.3
339+
340+
bb.2.if.else:
341+
successors: %bb.5(0x80000000)
342+
liveins: $w0
343+
344+
renamable $w0 = nuw nsw ADDWri killed renamable $w0, 1, 0
345+
BL @g, csr_aarch64_aapcs_scs, implicit-def dead $lr, implicit $sp, implicit killed $w0, implicit-def $sp, implicit-def $w0
346+
renamable $w8 = MOVZWi 1, 0
347+
$w0 = SUBWrs killed renamable $w8, killed renamable $w0, 0
348+
B %bb.5
349+
350+
bb.3.if.then2 (bbsections 1):
351+
successors: %bb.5(0x80000000)
352+
liveins: $w0
353+
354+
renamable $w0 = nsw SUBWri killed renamable $w0, 1, 0
355+
BL @g, csr_aarch64_aapcs_scs, implicit-def dead $lr, implicit $sp, implicit killed $w0, implicit-def $sp, implicit-def $w0
356+
renamable $w0 = nsw ADDWri killed renamable $w0, 1, 0
357+
B %bb.5
358+
359+
bb.4.return:
360+
liveins: $w0
361+
RET undef $lr, implicit killed $w0
362+
363+
bb.5.return:
364+
liveins: $w0
365+
B %bb.6
366+
367+
bb.7.return:
368+
liveins: $w0
369+
early-clobber $sp, $lr = frame-destroy LDRXpost $sp, 16 :: (load (s64) from %stack.0)
370+
frame-destroy CFI_INSTRUCTION def_cfa_offset 0
371+
frame-destroy AUTIASP implicit-def $lr, implicit killed $lr, implicit $sp
372+
frame-destroy CFI_INSTRUCTION negate_ra_sign_state
373+
early-clobber $x18, $lr = frame-destroy LDRXpre $x18, -8
374+
frame-destroy CFI_INSTRUCTION restore $w18
375+
frame-destroy CFI_INSTRUCTION restore $w30
376+
RET undef $lr, implicit killed $w0
377+
378+
bb.6.return:
379+
liveins: $w0
380+
B %bb.7
381+
382+
200383
...

0 commit comments

Comments
 (0)