9
9
define void @trivial () {
10
10
; RV32-LABEL: trivial:
11
11
; RV32: # %bb.0:
12
+ ; RV32-NEXT: .cfi_def_cfa_offset 0
12
13
; RV32-NEXT: ret
13
14
;
14
15
; RV64-LABEL: trivial:
15
16
; RV64: # %bb.0:
17
+ ; RV64-NEXT: .cfi_def_cfa_offset 0
16
18
; RV64-NEXT: ret
17
19
;
18
20
; RV32-WITHFP-LABEL: trivial:
@@ -26,8 +28,12 @@ define void @trivial() {
26
28
; RV32-WITHFP-NEXT: addi s0, sp, 16
27
29
; RV32-WITHFP-NEXT: .cfi_def_cfa s0, 0
28
30
; RV32-WITHFP-NEXT: lw s0, 8(sp)
31
+ ; RV32-WITHFP-NEXT: .cfi_def_cfa sp, 16
29
32
; RV32-WITHFP-NEXT: lw ra, 12(sp)
33
+ ; RV32-WITHFP-NEXT: .cfi_restore ra
34
+ ; RV32-WITHFP-NEXT: .cfi_restore s0
30
35
; RV32-WITHFP-NEXT: addi sp, sp, 16
36
+ ; RV32-WITHFP-NEXT: .cfi_def_cfa_offset 0
31
37
; RV32-WITHFP-NEXT: ret
32
38
;
33
39
; RV64-WITHFP-LABEL: trivial:
@@ -41,8 +47,12 @@ define void @trivial() {
41
47
; RV64-WITHFP-NEXT: addi s0, sp, 16
42
48
; RV64-WITHFP-NEXT: .cfi_def_cfa s0, 0
43
49
; RV64-WITHFP-NEXT: ld s0, 0(sp)
50
+ ; RV64-WITHFP-NEXT: .cfi_def_cfa sp, 16
44
51
; RV64-WITHFP-NEXT: ld ra, 8(sp)
52
+ ; RV64-WITHFP-NEXT: .cfi_restore ra
53
+ ; RV64-WITHFP-NEXT: .cfi_restore s0
45
54
; RV64-WITHFP-NEXT: addi sp, sp, 16
55
+ ; RV64-WITHFP-NEXT: .cfi_def_cfa_offset 0
46
56
; RV64-WITHFP-NEXT: ret
47
57
ret void
48
58
}
@@ -65,8 +75,12 @@ define void @stack_alloc(i32 signext %size) {
65
75
; RV32-NEXT: call callee_with_args
66
76
; RV32-NEXT: addi sp, s0, -16
67
77
; RV32-NEXT: lw s0, 8(sp)
78
+ ; RV32-NEXT: .cfi_def_cfa sp, 16
68
79
; RV32-NEXT: lw ra, 12(sp)
80
+ ; RV32-NEXT: .cfi_restore ra
81
+ ; RV32-NEXT: .cfi_restore s0
69
82
; RV32-NEXT: addi sp, sp, 16
83
+ ; RV32-NEXT: .cfi_def_cfa_offset 0
70
84
; RV32-NEXT: ret
71
85
;
72
86
; RV64-LABEL: stack_alloc:
@@ -91,8 +105,12 @@ define void @stack_alloc(i32 signext %size) {
91
105
; RV64-NEXT: call callee_with_args
92
106
; RV64-NEXT: addi sp, s0, -16
93
107
; RV64-NEXT: ld s0, 0(sp)
108
+ ; RV64-NEXT: .cfi_def_cfa sp, 16
94
109
; RV64-NEXT: ld ra, 8(sp)
110
+ ; RV64-NEXT: .cfi_restore ra
111
+ ; RV64-NEXT: .cfi_restore s0
95
112
; RV64-NEXT: addi sp, sp, 16
113
+ ; RV64-NEXT: .cfi_def_cfa_offset 0
96
114
; RV64-NEXT: ret
97
115
;
98
116
; RV32-WITHFP-LABEL: stack_alloc:
@@ -112,8 +130,12 @@ define void @stack_alloc(i32 signext %size) {
112
130
; RV32-WITHFP-NEXT: call callee_with_args
113
131
; RV32-WITHFP-NEXT: addi sp, s0, -16
114
132
; RV32-WITHFP-NEXT: lw s0, 8(sp)
133
+ ; RV32-WITHFP-NEXT: .cfi_def_cfa sp, 16
115
134
; RV32-WITHFP-NEXT: lw ra, 12(sp)
135
+ ; RV32-WITHFP-NEXT: .cfi_restore ra
136
+ ; RV32-WITHFP-NEXT: .cfi_restore s0
116
137
; RV32-WITHFP-NEXT: addi sp, sp, 16
138
+ ; RV32-WITHFP-NEXT: .cfi_def_cfa_offset 0
117
139
; RV32-WITHFP-NEXT: ret
118
140
;
119
141
; RV64-WITHFP-LABEL: stack_alloc:
@@ -138,15 +160,21 @@ define void @stack_alloc(i32 signext %size) {
138
160
; RV64-WITHFP-NEXT: call callee_with_args
139
161
; RV64-WITHFP-NEXT: addi sp, s0, -16
140
162
; RV64-WITHFP-NEXT: ld s0, 0(sp)
163
+ ; RV64-WITHFP-NEXT: .cfi_def_cfa sp, 16
141
164
; RV64-WITHFP-NEXT: ld ra, 8(sp)
165
+ ; RV64-WITHFP-NEXT: .cfi_restore ra
166
+ ; RV64-WITHFP-NEXT: .cfi_restore s0
142
167
; RV64-WITHFP-NEXT: addi sp, sp, 16
168
+ ; RV64-WITHFP-NEXT: .cfi_def_cfa_offset 0
143
169
; RV64-WITHFP-NEXT: ret
144
170
entry:
145
171
%0 = alloca i8 , i32 %size , align 16
146
172
call void @callee_with_args (i8* nonnull %0 ) #2
147
173
ret void
148
174
}
149
175
176
+ ; FIXME: fix use of .cfi_restore with wrong CFAs
177
+
150
178
define void @branch_and_tail_call (i1 %a ) {
151
179
; RV32-LABEL: branch_and_tail_call:
152
180
; RV32: # %bb.0:
@@ -158,12 +186,16 @@ define void @branch_and_tail_call(i1 %a) {
158
186
; RV32-NEXT: beqz a0, .LBB2_2
159
187
; RV32-NEXT: # %bb.1: # %blue_pill
160
188
; RV32-NEXT: lw ra, 12(sp)
189
+ ; RV32-NEXT: .cfi_restore ra
161
190
; RV32-NEXT: addi sp, sp, 16
191
+ ; RV32-NEXT: .cfi_def_cfa_offset 0
162
192
; RV32-NEXT: tail callee1
163
193
; RV32-NEXT: .LBB2_2: # %red_pill
164
194
; RV32-NEXT: call callee2
165
195
; RV32-NEXT: lw ra, 12(sp)
196
+ ; RV32-NEXT: .cfi_restore ra
166
197
; RV32-NEXT: addi sp, sp, 16
198
+ ; RV32-NEXT: .cfi_def_cfa_offset 0
167
199
; RV32-NEXT: ret
168
200
;
169
201
; RV64-LABEL: branch_and_tail_call:
@@ -176,12 +208,16 @@ define void @branch_and_tail_call(i1 %a) {
176
208
; RV64-NEXT: beqz a0, .LBB2_2
177
209
; RV64-NEXT: # %bb.1: # %blue_pill
178
210
; RV64-NEXT: ld ra, 8(sp)
211
+ ; RV64-NEXT: .cfi_restore ra
179
212
; RV64-NEXT: addi sp, sp, 16
213
+ ; RV64-NEXT: .cfi_def_cfa_offset 0
180
214
; RV64-NEXT: tail callee1
181
215
; RV64-NEXT: .LBB2_2: # %red_pill
182
216
; RV64-NEXT: call callee2
183
217
; RV64-NEXT: ld ra, 8(sp)
218
+ ; RV64-NEXT: .cfi_restore ra
184
219
; RV64-NEXT: addi sp, sp, 16
220
+ ; RV64-NEXT: .cfi_def_cfa_offset 0
185
221
; RV64-NEXT: ret
186
222
;
187
223
; RV32-WITHFP-LABEL: branch_and_tail_call:
@@ -198,14 +234,22 @@ define void @branch_and_tail_call(i1 %a) {
198
234
; RV32-WITHFP-NEXT: beqz a0, .LBB2_2
199
235
; RV32-WITHFP-NEXT: # %bb.1: # %blue_pill
200
236
; RV32-WITHFP-NEXT: lw s0, 8(sp)
237
+ ; RV32-WITHFP-NEXT: .cfi_def_cfa sp, 16
201
238
; RV32-WITHFP-NEXT: lw ra, 12(sp)
239
+ ; RV32-WITHFP-NEXT: .cfi_restore ra
240
+ ; RV32-WITHFP-NEXT: .cfi_restore s0
202
241
; RV32-WITHFP-NEXT: addi sp, sp, 16
242
+ ; RV32-WITHFP-NEXT: .cfi_def_cfa_offset 0
203
243
; RV32-WITHFP-NEXT: tail callee1
204
244
; RV32-WITHFP-NEXT: .LBB2_2: # %red_pill
205
245
; RV32-WITHFP-NEXT: call callee2
206
246
; RV32-WITHFP-NEXT: lw s0, 8(sp)
247
+ ; RV32-WITHFP-NEXT: .cfi_def_cfa sp, 16
207
248
; RV32-WITHFP-NEXT: lw ra, 12(sp)
249
+ ; RV32-WITHFP-NEXT: .cfi_restore ra
250
+ ; RV32-WITHFP-NEXT: .cfi_restore s0
208
251
; RV32-WITHFP-NEXT: addi sp, sp, 16
252
+ ; RV32-WITHFP-NEXT: .cfi_def_cfa_offset 0
209
253
; RV32-WITHFP-NEXT: ret
210
254
;
211
255
; RV64-WITHFP-LABEL: branch_and_tail_call:
@@ -222,14 +266,22 @@ define void @branch_and_tail_call(i1 %a) {
222
266
; RV64-WITHFP-NEXT: beqz a0, .LBB2_2
223
267
; RV64-WITHFP-NEXT: # %bb.1: # %blue_pill
224
268
; RV64-WITHFP-NEXT: ld s0, 0(sp)
269
+ ; RV64-WITHFP-NEXT: .cfi_def_cfa sp, 16
225
270
; RV64-WITHFP-NEXT: ld ra, 8(sp)
271
+ ; RV64-WITHFP-NEXT: .cfi_restore ra
272
+ ; RV64-WITHFP-NEXT: .cfi_restore s0
226
273
; RV64-WITHFP-NEXT: addi sp, sp, 16
274
+ ; RV64-WITHFP-NEXT: .cfi_def_cfa_offset 0
227
275
; RV64-WITHFP-NEXT: tail callee1
228
276
; RV64-WITHFP-NEXT: .LBB2_2: # %red_pill
229
277
; RV64-WITHFP-NEXT: call callee2
230
278
; RV64-WITHFP-NEXT: ld s0, 0(sp)
279
+ ; RV64-WITHFP-NEXT: .cfi_def_cfa sp, 16
231
280
; RV64-WITHFP-NEXT: ld ra, 8(sp)
281
+ ; RV64-WITHFP-NEXT: .cfi_restore ra
282
+ ; RV64-WITHFP-NEXT: .cfi_restore s0
232
283
; RV64-WITHFP-NEXT: addi sp, sp, 16
284
+ ; RV64-WITHFP-NEXT: .cfi_def_cfa_offset 0
233
285
; RV64-WITHFP-NEXT: ret
234
286
br i1 %a , label %blue_pill , label %red_pill
235
287
blue_pill:
0 commit comments