1+ ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
12; RUN: llc --force-dwarf-frame-section %s -o - | FileCheck %s
23; RUN: llc --filetype=obj %s -o - | llvm-readelf -s --unwind - | FileCheck %s --check-prefix=UNWIND
34target datalayout = "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64"
@@ -16,79 +17,124 @@ target triple = "thumbv8m.main-none-none-eabi"
1617; }
1718
1819define hidden i32 @f0 (i32 %x ) local_unnamed_addr "sign-return-address" ="non-leaf" {
20+ ; CHECK-LABEL: f0:
21+ ; CHECK: .cfi_sections .debug_frame
22+ ; CHECK-NEXT: .cfi_startproc
23+ ; CHECK-NEXT: @ %bb.0: @ %entry
24+ ; CHECK-NEXT: pac r12, lr, sp
25+ ; CHECK-NEXT: .save {r7, lr}
26+ ; CHECK-NEXT: push {r7, lr}
27+ ; CHECK-NEXT: .cfi_def_cfa_offset 8
28+ ; CHECK-NEXT: .cfi_offset lr, -4
29+ ; CHECK-NEXT: .cfi_offset r7, -8
30+ ; CHECK-NEXT: .save {ra_auth_code}
31+ ; CHECK-NEXT: str r12, [sp, #-4]!
32+ ; CHECK-NEXT: .cfi_def_cfa_offset 12
33+ ; CHECK-NEXT: .cfi_offset ra_auth_code, -12
34+ ; CHECK-NEXT: .pad #4
35+ ; CHECK-NEXT: sub sp, #4
36+ ; CHECK-NEXT: .cfi_def_cfa_offset 16
37+ ; CHECK-NEXT: subs r0, #1
38+ ; CHECK-NEXT: bl g
39+ ; CHECK-NEXT: adds r0, #1
40+ ; CHECK-NEXT: add sp, #4
41+ ; CHECK-NEXT: ldr r12, [sp], #4
42+ ; CHECK-NEXT: pop.w {r7, lr}
43+ ; CHECK-NEXT: aut r12, lr, sp
44+ ; CHECK-NEXT: bx lr
1945entry:
2046 %sub = add nsw i32 %x , -1
2147 %call = tail call i32 @g (i32 %sub )
2248 %add = add nsw i32 %call , 1
2349 ret i32 %add
2450}
2551
26- ; CHECK-LABEL: f0:
27- ; CHECK: pac r12, lr, sp
28- ; CHECK-NEXT: .save {r7, lr}
29- ; CHECK-NEXT: push {r7, lr}
30- ; CHECK-NEXT: .cfi_def_cfa_offset 8
31- ; CHECK-NEXT: .cfi_offset lr, -4
32- ; CHECK-NEXT: .cfi_offset r7, -8
33- ; CHECK-NEXT: .save {ra_auth_code}
34- ; CHECK-NEXT: str r12, [sp, #-4]!
35- ; CHECK-NEXT: .cfi_def_cfa_offset 12
36- ; CHECK-NEXT: .cfi_offset ra_auth_code, -12
37- ; CHECK-NEXT: .pad #4
38- ; CHECK-NEXT: sub sp, #4
39- ; ...
40- ; CHECK: add sp, #4
41- ; CHECK-NEXT: ldr r12, [sp], #4
42- ; CHECK-NEXT: pop.w {r7, lr}
43- ; CHECK-NEXT: aut r12, lr, sp
44- ; CHECK-NEXT: bx lr
45-
4652define hidden i32 @f1 (i32 %x ) local_unnamed_addr #0 {
53+ ; CHECK-LABEL: f1:
54+ ; CHECK: .cfi_startproc
55+ ; CHECK-NEXT: @ %bb.0: @ %entry
56+ ; CHECK-NEXT: pac r12, lr, sp
57+ ; CHECK-NEXT: vstr fpcxtns, [sp, #-4]!
58+ ; CHECK-NEXT: .cfi_def_cfa_offset 4
59+ ; CHECK-NEXT: .save {r7, lr}
60+ ; CHECK-NEXT: push {r7, lr}
61+ ; CHECK-NEXT: .cfi_def_cfa_offset 12
62+ ; CHECK-NEXT: .cfi_offset lr, -8
63+ ; CHECK-NEXT: .cfi_offset r7, -12
64+ ; CHECK-NEXT: .save {ra_auth_code}
65+ ; CHECK-NEXT: str r12, [sp, #-4]!
66+ ; CHECK-NEXT: .cfi_def_cfa_offset 16
67+ ; CHECK-NEXT: .cfi_offset ra_auth_code, -16
68+ ; CHECK-NEXT: subs r0, #1
69+ ; CHECK-NEXT: bl g
70+ ; CHECK-NEXT: adds r0, #1
71+ ; CHECK-NEXT: ldr r12, [sp], #4
72+ ; CHECK-NEXT: pop.w {r7, lr}
73+ ; CHECK-NEXT: vscclrm {s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14, s15, vpr}
74+ ; CHECK-NEXT: vldr fpcxtns, [sp], #4
75+ ; CHECK-NEXT: aut r12, lr, sp
76+ ; CHECK-NEXT: clrm {r1, r2, r3, r12, apsr}
77+ ; CHECK-NEXT: bxns lr
4778entry:
4879 %sub = add nsw i32 %x , -1
4980 %call = tail call i32 @g (i32 %sub )
5081 %add = add nsw i32 %call , 1
5182 ret i32 %add
5283}
5384
54- ; CHECK-LABEL: f1:
55- ; CHECK: pac r12, lr, sp
56- ; CHECK-NEXT: vstr fpcxtns, [sp, #-4]!
57- ; CHECK-NEXT: .cfi_def_cfa_offset 4
58- ; CHECK-NEXT: .save {r7, lr}
59- ; CHECK-NEXT: push {r7, lr}
60- ; CHECK: vldr fpcxtns, [sp], #4
61- ; CHECK: aut r12, lr, sp
62-
6385define hidden i32 @f2 (i32 %x ) local_unnamed_addr #1 {
86+ ; CHECK-LABEL: f2:
87+ ; CHECK: .cfi_startproc
88+ ; CHECK-NEXT: @ %bb.0: @ %entry
89+ ; CHECK-NEXT: pac r12, lr, sp
90+ ; CHECK-NEXT: .save {r7, lr}
91+ ; CHECK-NEXT: push {r7, lr}
92+ ; CHECK-NEXT: .cfi_def_cfa_offset 8
93+ ; CHECK-NEXT: .cfi_offset lr, -4
94+ ; CHECK-NEXT: .cfi_offset r7, -8
95+ ; CHECK-NEXT: .save {ra_auth_code}
96+ ; CHECK-NEXT: str r12, [sp, #-4]!
97+ ; CHECK-NEXT: .cfi_def_cfa_offset 12
98+ ; CHECK-NEXT: .cfi_offset ra_auth_code, -12
99+ ; CHECK-NEXT: .pad #4
100+ ; CHECK-NEXT: sub sp, #4
101+ ; CHECK-NEXT: .cfi_def_cfa_offset 16
102+ ; CHECK-NEXT: subs r0, #1
103+ ; CHECK-NEXT: bl g
104+ ; CHECK-NEXT: adds r0, #1
105+ ; CHECK-NEXT: add sp, #4
106+ ; CHECK-NEXT: ldr r12, [sp], #4
107+ ; CHECK-NEXT: pop.w {r7, lr}
108+ ; CHECK-NEXT: aut r12, lr, sp
109+ ; CHECK-NEXT: mrs r12, control
110+ ; CHECK-NEXT: tst.w r12, #8
111+ ; CHECK-NEXT: beq .LBB2_2
112+ ; CHECK-NEXT: @ %bb.1: @ %entry
113+ ; CHECK-NEXT: vmrs r12, fpscr
114+ ; CHECK-NEXT: vmov d0, lr, lr
115+ ; CHECK-NEXT: vmov d1, lr, lr
116+ ; CHECK-NEXT: vmov d2, lr, lr
117+ ; CHECK-NEXT: vmov d3, lr, lr
118+ ; CHECK-NEXT: vmov d4, lr, lr
119+ ; CHECK-NEXT: vmov d5, lr, lr
120+ ; CHECK-NEXT: vmov d6, lr, lr
121+ ; CHECK-NEXT: vmov d7, lr, lr
122+ ; CHECK-NEXT: bic r12, r12, #159
123+ ; CHECK-NEXT: bic r12, r12, #4026531840
124+ ; CHECK-NEXT: vmsr fpscr, r12
125+ ; CHECK-NEXT: .LBB2_2: @ %entry
126+ ; CHECK-NEXT: mov r1, lr
127+ ; CHECK-NEXT: mov r2, lr
128+ ; CHECK-NEXT: mov r3, lr
129+ ; CHECK-NEXT: mov r12, lr
130+ ; CHECK-NEXT: msr apsr_nzcvq, lr
131+ ; CHECK-NEXT: bxns lr
64132entry:
65133 %sub = add nsw i32 %x , -1
66134 %call = tail call i32 @g (i32 %sub )
67135 %add = add nsw i32 %call , 1
68136 ret i32 %add
69137}
70- ; CHECK-LABEL: f2:
71- ; CHECK: pac r12, lr, sp
72- ; CHECK-NEXT: .save {r7, lr}
73- ; CHECK-NEXT: push {r7, lr}
74- ; CHECK-NEXT: .cfi_def_cfa_offset 8
75- ; CHECK-NEXT: .cfi_offset lr, -4
76- ; CHECK-NEXT: .cfi_offset r7, -8
77- ; CHECK-NEXT: .save {ra_auth_code}
78- ; CHECK-NEXT: str r12, [sp, #-4]!
79- ; CHECK-NEXT: .cfi_def_cfa_offset 12
80- ; CHECK-NEXT: .cfi_offset ra_auth_code, -12
81- ; CHECK-NEXT: .pad #4
82- ; CHECK-NEXT: sub sp, #4
83- ; CHECK-NEXT: .cfi_def_cfa_offset 16
84- ; ...
85- ; CHECK: add sp, #4
86- ; CHECK-NEXT: ldr r12, [sp], #4
87- ; CHECK-NEXT: pop.w {r7, lr}
88- ; CHECK-NEXT: aut r12, lr, sp
89- ; CHECK-NEXT: mrs r12, control
90- ; ...
91- ; CHECK: bxns lr
92138
93139declare dso_local i32 @g (i32 ) local_unnamed_addr
94140
0 commit comments