1
+ ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
1
2
; RUN: llc --force-dwarf-frame-section %s -o - | FileCheck %s
2
3
; RUN: llc --filetype=obj %s -o - | llvm-readelf -s --unwind - | FileCheck %s --check-prefix=UNWIND
3
4
target 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"
16
17
; }
17
18
18
19
define 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
19
45
entry:
20
46
%sub = add nsw i32 %x , -1
21
47
%call = tail call i32 @g (i32 %sub )
22
48
%add = add nsw i32 %call , 1
23
49
ret i32 %add
24
50
}
25
51
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
-
46
52
define 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
47
78
entry:
48
79
%sub = add nsw i32 %x , -1
49
80
%call = tail call i32 @g (i32 %sub )
50
81
%add = add nsw i32 %call , 1
51
82
ret i32 %add
52
83
}
53
84
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
-
63
85
define 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
64
132
entry:
65
133
%sub = add nsw i32 %x , -1
66
134
%call = tail call i32 @g (i32 %sub )
67
135
%add = add nsw i32 %call , 1
68
136
ret i32 %add
69
137
}
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
92
138
93
139
declare dso_local i32 @g (i32 ) local_unnamed_addr
94
140
0 commit comments