• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; ARM EHABI integrated test
2
3; This test case checks whether the ARM unwind directives are properly
4; generated or not.
5
6; The purpose of the test:
7; (1) .fnstart and .fnend directives should wrap the function.
8; (2) .setfp directive should be available if frame pointer is not eliminated.
9; (3) .save directive should come with push instruction.
10; (4) .vsave directive should come with vpush instruction.
11; (5) .pad directive should come with stack pointer adjustment.
12; (6) .cantunwind directive should be available if the function is marked with
13;     nounwind function attribute.
14
15; We have to check several cases:
16; (1) arm with -disable-fp-elim
17; (2) arm without -disable-fp-elim
18; (3) armv7 with -disable-fp-elim
19; (4) armv7 without -disable-fp-elim
20
21; RUN: llc -mtriple arm-unknown-linux-gnueabi \
22; RUN:     -disable-fp-elim -filetype=asm -o - %s \
23; RUN:   | FileCheck %s --check-prefix=CHECK-FP
24
25; RUN: llc -mtriple arm-unknown-linux-gnueabi \
26; RUN:     -filetype=asm -o - %s \
27; RUN:   | FileCheck %s --check-prefix=CHECK-FP-ELIM
28
29; RUN: llc -mtriple armv7-unknown-linux-gnueabi \
30; RUN:     -disable-fp-elim -filetype=asm -o - %s \
31; RUN:   | FileCheck %s --check-prefix=CHECK-V7-FP
32
33; RUN: llc -mtriple armv7-unknown-linux-gnueabi \
34; RUN:     -filetype=asm -o - %s \
35; RUN:   | FileCheck %s --check-prefix=CHECK-V7-FP-ELIM
36
37; RUN: llc -mtriple arm-unknown-linux-androideabi \
38; RUN:     -disable-fp-elim -filetype=asm -o - %s \
39; RUN:   | FileCheck %s --check-prefix=CHECK-FP
40
41; RUN: llc -mtriple arm-unknown-linux-androideabi \
42; RUN:     -filetype=asm -o - %s \
43; RUN:   | FileCheck %s --check-prefix=CHECK-FP-ELIM
44
45; RUN: llc -mtriple armv7-unknown-linux-androideabi \
46; RUN:     -disable-fp-elim -filetype=asm -o - %s \
47; RUN:   | FileCheck %s --check-prefix=CHECK-V7-FP
48
49; RUN: llc -mtriple armv7-unknown-linux-androideabi \
50; RUN:     -filetype=asm -o - %s \
51; RUN:   | FileCheck %s --check-prefix=CHECK-V7-FP-ELIM
52
53; RUN: llc -mtriple arm-unknown-netbsd-eabi \
54; RUN:     -disable-fp-elim -filetype=asm -o - %s \
55; RUN:   | FileCheck %s --check-prefix=DWARF-FP
56
57; RUN: llc -mtriple arm-unknown-netbsd-eabi \
58; RUN:     -filetype=asm -o - %s \
59; RUN:   | FileCheck %s --check-prefix=DWARF-FP-ELIM
60
61; RUN: llc -mtriple armv7-unknown-netbsd-eabi \
62; RUN:     -disable-fp-elim -filetype=asm -o - %s \
63; RUN:   | FileCheck %s --check-prefix=DWARF-V7-FP
64
65; RUN: llc -mtriple armv7-unknown-netbsd-eabi \
66; RUN:     -filetype=asm -o - %s \
67; RUN:   | FileCheck %s --check-prefix=DWARF-V7-FP-ELIM
68
69;-------------------------------------------------------------------------------
70; Test 1
71;-------------------------------------------------------------------------------
72; This is the LLVM assembly generated from following C++ code:
73;
74;   extern void print(int, int, int, int, int);
75;   extern void print(double, double, double, double, double);
76;
77;   void test(int a, int b, int c, int d, int e,
78;             double m, double n, double p, double q, double r) {
79;     try {
80;       print(a, b, c, d, e);
81;     } catch (...) {
82;       print(m, n, p, q, r);
83;     }
84;   }
85
86declare void @_Z5printiiiii(i32, i32, i32, i32, i32)
87
88declare void @_Z5printddddd(double, double, double, double, double)
89
90define void @_Z4testiiiiiddddd(i32 %a, i32 %b, i32 %c, i32 %d, i32 %e,
91                               double %m, double %n, double %p,
92                               double %q, double %r) personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
93entry:
94  invoke void @_Z5printiiiii(i32 %a, i32 %b, i32 %c, i32 %d, i32 %e)
95          to label %try.cont unwind label %lpad
96
97lpad:
98  %0 = landingpad { i8*, i32 }
99          catch i8* null
100  %1 = extractvalue { i8*, i32 } %0, 0
101  %2 = tail call i8* @__cxa_begin_catch(i8* %1)
102  invoke void @_Z5printddddd(double %m, double %n, double %p,
103                             double %q, double %r)
104          to label %invoke.cont2 unwind label %lpad1
105
106invoke.cont2:
107  tail call void @__cxa_end_catch()
108  br label %try.cont
109
110try.cont:
111  ret void
112
113lpad1:
114  %3 = landingpad { i8*, i32 }
115          cleanup
116  invoke void @__cxa_end_catch()
117          to label %eh.resume unwind label %terminate.lpad
118
119eh.resume:
120  resume { i8*, i32 } %3
121
122terminate.lpad:
123  %4 = landingpad { i8*, i32 }
124          catch i8* null
125  %5 = extractvalue { i8*, i32 } %4, 0
126  tail call void @__clang_call_terminate(i8* %5)
127  unreachable
128}
129
130declare void @__clang_call_terminate(i8*)
131
132declare i32 @__gxx_personality_v0(...)
133
134declare i8* @__cxa_begin_catch(i8*)
135
136declare void @__cxa_end_catch()
137
138declare void @_ZSt9terminatev()
139
140; CHECK-FP-LABEL: _Z4testiiiiiddddd:
141; CHECK-FP:   .fnstart
142; CHECK-FP:   .save  {r4, r5, r6, r7, r8, r9, r10, r11, lr}
143; CHECK-FP:   push   {r4, r5, r6, r7, r8, r9, r10, r11, lr}
144; CHECK-FP:   .setfp r11, sp, #28
145; CHECK-FP:   add    r11, sp, #28
146; CHECK-FP:   .pad   #44
147; CHECK-FP:   sub    sp, sp, #44
148; CHECK-FP:   .personality __gxx_personality_v0
149; CHECK-FP:   .handlerdata
150; CHECK-FP:   .fnend
151
152; CHECK-FP-ELIM-LABEL: _Z4testiiiiiddddd:
153; CHECK-FP-ELIM:   .fnstart
154; CHECK-FP-ELIM:   .save {r4, r5, r6, r7, r8, r9, r10, r11, lr}
155; CHECK-FP-ELIM:   push  {r4, r5, r6, r7, r8, r9, r10, r11, lr}
156; CHECK-FP-ELIM:   .pad  #36
157; CHECK-FP-ELIM:   sub   sp, sp, #36
158; CHECK-FP-ELIM:   .personality __gxx_personality_v0
159; CHECK-FP-ELIM:   .handlerdata
160; CHECK-FP-ELIM:   .fnend
161
162; CHECK-V7-FP-LABEL: _Z4testiiiiiddddd:
163; CHECK-V7-FP:   .fnstart
164; CHECK-V7-FP:   .save  {r4, r10, r11, lr}
165; CHECK-V7-FP:   push   {r4, r10, r11, lr}
166; CHECK-V7-FP:   .setfp r11, sp, #8
167; CHECK-V7-FP:   add    r11, sp, #8
168; CHECK-V7-FP:   .vsave {d8, d9, d10, d11, d12}
169; CHECK-V7-FP:   vpush  {d8, d9, d10, d11, d12}
170; CHECK-V7-FP:   .pad   #24
171; CHECK-V7-FP:   sub    sp, sp, #24
172; CHECK-V7-FP:   .personality __gxx_personality_v0
173; CHECK-V7-FP:   .handlerdata
174; CHECK-V7-FP:   .fnend
175
176; CHECK-V7-FP-ELIM-LABEL: _Z4testiiiiiddddd:
177; CHECK-V7-FP-ELIM:   .fnstart
178; CHECK-V7-FP-ELIM:   .save  {r4, lr}
179; CHECK-V7-FP-ELIM:   push   {r4, lr}
180; CHECK-V7-FP-ELIM:   .vsave {d8, d9, d10, d11, d12}
181; CHECK-V7-FP-ELIM:   vpush  {d8, d9, d10, d11, d12}
182; CHECK-V7-FP-ELIM:   .pad   #24
183; CHECK-V7-FP-ELIM:   sub    sp, sp, #24
184; CHECK-V7-FP-ELIM:   .personality __gxx_personality_v0
185; CHECK-V7-FP-ELIM:   .handlerdata
186; CHECK-V7-FP-ELIM:   .fnend
187
188; DWARF-FP-LABEL: _Z4testiiiiiddddd:
189; DWARF-FP:    .cfi_startproc
190; DWARF-FP:    .cfi_personality 0, __gxx_personality_v0
191; DWARF-FP:    .cfi_lsda 0, .Lexception0
192; DWARF-FP:    push {r4, r5, r6, r7, r8, r9, r10, r11, lr}
193; DWARF-FP:    .cfi_def_cfa_offset 36
194; DWARF-FP:    .cfi_offset lr, -4
195; DWARF-FP:    .cfi_offset r11, -8
196; DWARF-FP:    .cfi_offset r10, -12
197; DWARF-FP:    .cfi_offset r9, -16
198; DWARF-FP:    .cfi_offset r8, -20
199; DWARF-FP:    .cfi_offset r7, -24
200; DWARF-FP:    .cfi_offset r6, -28
201; DWARF-FP:    .cfi_offset r5, -32
202; DWARF-FP:    .cfi_offset r4, -36
203; DWARF-FP:    add r11, sp, #28
204; DWARF-FP:    .cfi_def_cfa r11, 8
205; DWARF-FP:    sub sp, sp, #44
206; DWARF-FP:    sub sp, r11, #28
207; DWARF-FP:    pop {r4, r5, r6, r7, r8, r9, r10, r11, lr}
208; DWARF-FP:    mov pc, lr
209; DWARF-FP:    .cfi_endproc
210
211; DWARF-FP-ELIM-LABEL: _Z4testiiiiiddddd:
212; DWARF-FP-ELIM:    .cfi_startproc
213; DWARF-FP-ELIM:    .cfi_personality 0, __gxx_personality_v0
214; DWARF-FP-ELIM:    .cfi_lsda 0, .Lexception0
215; DWARF-FP-ELIM:    push {r4, r5, r6, r7, r8, r9, r10, r11, lr}
216; DWARF-FP-ELIM:    .cfi_def_cfa_offset 36
217; DWARF-FP-ELIM:    .cfi_offset lr, -4
218; DWARF-FP-ELIM:    .cfi_offset r11, -8
219; DWARF-FP-ELIM:    .cfi_offset r10, -12
220; DWARF-FP-ELIM:    .cfi_offset r9, -16
221; DWARF-FP-ELIM:    .cfi_offset r8, -20
222; DWARF-FP-ELIM:    .cfi_offset r7, -24
223; DWARF-FP-ELIM:    .cfi_offset r6, -28
224; DWARF-FP-ELIM:    .cfi_offset r5, -32
225; DWARF-FP-ELIM:    .cfi_offset r4, -36
226; DWARF-FP-ELIM:    sub sp, sp, #36
227; DWARF-FP-ELIM:    .cfi_def_cfa_offset 72
228; DWARF-FP-ELIM:    add sp, sp, #36
229; DWARF-FP-ELIM:    pop {r4, r5, r6, r7, r8, r9, r10, r11, lr}
230; DWARF-FP-ELIM:    mov pc, lr
231; DWARF-FP-ELIM:    .cfi_endproc
232
233; DWARF-V7-FP-LABEL: _Z4testiiiiiddddd:
234; DWARF-V7-FP:    .cfi_startproc
235; DWARF-V7-FP:    .cfi_personality 0, __gxx_personality_v0
236; DWARF-V7-FP:    .cfi_lsda 0, .Lexception0
237; DWARF-V7-FP:    push {r4, r10, r11, lr}
238; DWARF-V7-FP:    .cfi_def_cfa_offset 16
239; DWARF-V7-FP:    .cfi_offset lr, -4
240; DWARF-V7-FP:    .cfi_offset r11, -8
241; DWARF-V7-FP:    .cfi_offset r10, -12
242; DWARF-V7-FP:    .cfi_offset r4, -16
243; DWARF-V7-FP:    add r11, sp, #8
244; DWARF-V7-FP:    .cfi_def_cfa r11, 8
245; DWARF-V7-FP:    vpush {d8, d9, d10, d11, d12}
246; DWARF-V7-FP:    .cfi_offset d12, -24
247; DWARF-V7-FP:    .cfi_offset d11, -32
248; DWARF-V7-FP:    .cfi_offset d10, -40
249; DWARF-V7-FP:    .cfi_offset d9, -48
250; DWARF-V7-FP:    sub sp, sp, #24
251; DWARF-V7-FP:    sub sp, r11, #48
252; DWARF-V7-FP:    vpop {d8, d9, d10, d11, d12}
253; DWARF-V7-FP:    pop {r4, r10, r11, pc}
254; DWARF-V7-FP:    .cfi_endproc
255
256; DWARF-V7-FP-ELIM-LABEL: _Z4testiiiiiddddd:
257; DWARF-V7-FP-ELIM:    .cfi_startproc
258; DWARF-V7-FP-ELIM:    .cfi_personality 0, __gxx_personality_v0
259; DWARF-V7-FP-ELIM:    .cfi_lsda 0, .Lexception0
260; DWARF-V7-FP-ELIM:    push {r4, lr}
261; DWARF-V7-FP-ELIM:    .cfi_def_cfa_offset 8
262; DWARF-V7-FP-ELIM:    .cfi_offset lr, -4
263; DWARF-V7-FP-ELIM:    .cfi_offset r4, -8
264; DWARF-V7-FP-ELIM:    vpush {d8, d9, d10, d11, d12}
265; DWARF-V7-FP-ELIM:    .cfi_offset d12, -16
266; DWARF-V7-FP-ELIM:    .cfi_offset d11, -24
267; DWARF-V7-FP-ELIM:    .cfi_offset d10, -32
268; DWARF-V7-FP-ELIM:    .cfi_offset d9, -40
269; DWARF-V7-FP-ELIM:    sub sp, sp, #24
270; DWARF-V7-FP-ELIM:    .cfi_def_cfa_offset 72
271; DWARF-V7-FP-ELIM:    add sp, sp, #24
272; DWARF-V7-FP-ELIM:    vpop {d8, d9, d10, d11, d12}
273; DWARF-V7-FP-ELIM:    pop {r4, pc}
274; DWARF-V7-FP-ELIM:    .cfi_endproc
275
276;-------------------------------------------------------------------------------
277; Test 2
278;-------------------------------------------------------------------------------
279
280declare void @throw_exception_2()
281
282define void @test2() {
283entry:
284  call void @throw_exception_2()
285  ret void
286}
287
288; CHECK-FP-LABEL: test2:
289; CHECK-FP:   .fnstart
290; CHECK-FP:   .save  {r11, lr}
291; CHECK-FP:   push   {r11, lr}
292; CHECK-FP:   .setfp r11, sp
293; CHECK-FP:   mov    r11, sp
294; CHECK-FP:   pop    {r11, lr}
295; CHECK-FP:   mov    pc, lr
296; CHECK-FP:   .fnend
297
298; CHECK-FP-ELIM-LABEL: test2:
299; CHECK-FP-ELIM:   .fnstart
300; CHECK-FP-ELIM:   .save {r11, lr}
301; CHECK-FP-ELIM:   push  {r11, lr}
302; CHECK-FP-ELIM:   pop   {r11, lr}
303; CHECK-FP-ELIM:   mov   pc, lr
304; CHECK-FP-ELIM:   .fnend
305
306; CHECK-V7-FP-LABEL: test2:
307; CHECK-V7-FP:   .fnstart
308; CHECK-V7-FP:   .save  {r11, lr}
309; CHECK-V7-FP:   push   {r11, lr}
310; CHECK-V7-FP:   .setfp r11, sp
311; CHECK-V7-FP:   mov    r11, sp
312; CHECK-V7-FP:   pop    {r11, pc}
313; CHECK-V7-FP:   .fnend
314
315; CHECK-V7-FP-ELIM-LABEL: test2:
316; CHECK-V7-FP-ELIM:   .fnstart
317; CHECK-V7-FP-ELIM:   .save {r11, lr}
318; CHECK-V7-FP-ELIM:   push  {r11, lr}
319; CHECK-V7-FP-ELIM:   pop   {r11, pc}
320; CHECK-V7-FP-ELIM:   .fnend
321
322; DWARF-FP-LABEL: test2:
323; DWARF-FP:    .cfi_startproc
324; DWARF-FP:    push {r11, lr}
325; DWARF-FP:    .cfi_def_cfa_offset 8
326; DWARF-FP:    .cfi_offset lr, -4
327; DWARF-FP:    .cfi_offset r11, -8
328; DWARF-FP:    mov  r11, sp
329; DWARF-FP:    .cfi_def_cfa_register r11
330; DWARF-FP:    pop  {r11, lr}
331; DWARF-FP:    mov  pc, lr
332; DWARF-FP:    .cfi_endproc
333
334; DWARF-FP-ELIM-LABEL: test2:
335; DWARF-FP-ELIM:    .cfi_startproc
336; DWARF-FP-ELIM:    push {r11, lr}
337; DWARF-FP-ELIM:    .cfi_def_cfa_offset 8
338; DWARF-FP-ELIM:    .cfi_offset lr, -4
339; DWARF-FP-ELIM:    .cfi_offset r11, -8
340; DWARF-FP-ELIM:    pop  {r11, lr}
341; DWARF-FP-ELIM:    mov  pc, lr
342; DWARF-FP-ELIM:    .cfi_endproc
343
344; DWARF-V7-FP-LABEL: test2:
345; DWARF-V7-FP:    .cfi_startproc
346; DWARF-V7-FP:    push {r11, lr}
347; DWARF-V7-FP:    .cfi_def_cfa_offset 8
348; DWARF-V7-FP:    .cfi_offset lr, -4
349; DWARF-V7-FP:    .cfi_offset r11, -8
350; DWARF-V7-FP:    mov  r11, sp
351; DWARF-V7-FP:    .cfi_def_cfa_register r11
352; DWARF-V7-FP:    pop  {r11, pc}
353; DWARF-V7-FP:    .cfi_endproc
354
355; DWARF-V7-FP-ELIM-LABEL: test2:
356; DWARF-V7-FP-ELIM:    .cfi_startproc
357; DWARF-V7-FP-ELIM:    push {r11, lr}
358; DWARF-V7-FP-ELIM:    .cfi_def_cfa_offset 8
359; DWARF-V7-FP-ELIM:    .cfi_offset lr, -4
360; DWARF-V7-FP-ELIM:    .cfi_offset r11, -8
361; DWARF-V7-FP-ELIM:    pop  {r11, pc}
362; DWARF-V7-FP-ELIM:    .cfi_endproc
363
364
365;-------------------------------------------------------------------------------
366; Test 3
367;-------------------------------------------------------------------------------
368
369declare void @throw_exception_3(i32)
370
371define i32 @test3(i32 %a, i32 %b, i32 %c, i32 %d,
372                  i32 %e, i32 %f, i32 %g, i32 %h) {
373entry:
374  %add = add nsw i32 %b, %a
375  %add1 = add nsw i32 %add, %c
376  %add2 = add nsw i32 %add1, %d
377  tail call void @throw_exception_3(i32 %add2)
378  %add3 = add nsw i32 %f, %e
379  %add4 = add nsw i32 %add3, %g
380  %add5 = add nsw i32 %add4, %h
381  tail call void @throw_exception_3(i32 %add5)
382  %add6 = add nsw i32 %add5, %add2
383  ret i32 %add6
384}
385
386; CHECK-FP-LABEL: test3:
387; CHECK-FP:   .fnstart
388; CHECK-FP:   .save  {r4, r5, r11, lr}
389; CHECK-FP:   push   {r4, r5, r11, lr}
390; CHECK-FP:   .setfp r11, sp, #8
391; CHECK-FP:   add    r11, sp, #8
392; CHECK-FP:   pop    {r4, r5, r11, lr}
393; CHECK-FP:   mov    pc, lr
394; CHECK-FP:   .fnend
395
396; CHECK-FP-ELIM-LABEL: test3:
397; CHECK-FP-ELIM:   .fnstart
398; CHECK-FP-ELIM:   .save {r4, r5, r11, lr}
399; CHECK-FP-ELIM:   push  {r4, r5, r11, lr}
400; CHECK-FP-ELIM:   pop   {r4, r5, r11, lr}
401; CHECK-FP-ELIM:   mov   pc, lr
402; CHECK-FP-ELIM:   .fnend
403
404; CHECK-V7-FP-LABEL: test3:
405; CHECK-V7-FP:   .fnstart
406; CHECK-V7-FP:   .save  {r4, r5, r11, lr}
407; CHECK-V7-FP:   push   {r4, r5, r11, lr}
408; CHECK-V7-FP:   .setfp r11, sp, #8
409; CHECK-V7-FP:   add    r11, sp, #8
410; CHECK-V7-FP:   pop    {r4, r5, r11, pc}
411; CHECK-V7-FP:   .fnend
412
413; CHECK-V7-FP-ELIM-LABEL: test3:
414; CHECK-V7-FP-ELIM:   .fnstart
415; CHECK-V7-FP-ELIM:   .save {r4, r5, r11, lr}
416; CHECK-V7-FP-ELIM:   push  {r4, r5, r11, lr}
417; CHECK-V7-FP-ELIM:   pop   {r4, r5, r11, pc}
418; CHECK-V7-FP-ELIM:   .fnend
419
420; DWARF-FP-LABEL: test3:
421; DWARF-FP:    .cfi_startproc
422; DWARF-FP:    push {r4, r5, r11, lr}
423; DWARF-FP:    .cfi_def_cfa_offset 16
424; DWARF-FP:    .cfi_offset lr, -4
425; DWARF-FP:    .cfi_offset r11, -8
426; DWARF-FP:    .cfi_offset r5, -12
427; DWARF-FP:    .cfi_offset r4, -16
428; DWARF-FP:    add  r11, sp, #8
429; DWARF-FP:    .cfi_def_cfa r11, 8
430; DWARF-FP:    pop  {r4, r5, r11, lr}
431; DWARF-FP:    mov  pc, lr
432; DWARF-FP:    .cfi_endproc
433
434; DWARF-FP-ELIM-LABEL: test3:
435; DWARF-FP-ELIM:    .cfi_startproc
436; DWARF-FP-ELIM:    push {r4, r5, r11, lr}
437; DWARF-FP-ELIM:    .cfi_def_cfa_offset 16
438; DWARF-FP-ELIM:    .cfi_offset lr, -4
439; DWARF-FP-ELIM:    .cfi_offset r11, -8
440; DWARF-FP-ELIM:    .cfi_offset r5, -12
441; DWARF-FP-ELIM:    .cfi_offset r4, -16
442; DWARF-FP-ELIM:    pop  {r4, r5, r11, lr}
443; DWARF-FP-ELIM:    mov  pc, lr
444; DWARF-FP-ELIM:    .cfi_endproc
445
446; DWARF-V7-FP-LABEL: test3:
447; DWARF-V7-FP:    .cfi_startproc
448; DWARF-V7-FP:    push {r4, r5, r11, lr}
449; DWARF-V7-FP:    .cfi_def_cfa_offset 16
450; DWARF-V7-FP:    .cfi_offset lr, -4
451; DWARF-V7-FP:    .cfi_offset r11, -8
452; DWARF-V7-FP:    .cfi_offset r5, -12
453; DWARF-V7-FP:    .cfi_offset r4, -16
454; DWARF-V7-FP:    add  r11, sp, #8
455; DWARF-V7-FP:    .cfi_def_cfa r11, 8
456; DWARF-V7-FP:    pop  {r4, r5, r11, pc}
457; DWARF-V7-FP:    .cfi_endproc
458
459; DWARF-V7-FP-ELIM-LABEL: test3:
460; DWARF-V7-FP-ELIM:    .cfi_startproc
461; DWARF-V7-FP-ELIM:    push {r4, r5, r11, lr}
462; DWARF-V7-FP-ELIM:    .cfi_def_cfa_offset 16
463; DWARF-V7-FP-ELIM:    .cfi_offset lr, -4
464; DWARF-V7-FP-ELIM:    .cfi_offset r11, -8
465; DWARF-V7-FP-ELIM:    .cfi_offset r5, -12
466; DWARF-V7-FP-ELIM:    .cfi_offset r4, -16
467; DWARF-V7-FP-ELIM:    pop  {r4, r5, r11, pc}
468; DWARF-V7-FP-ELIM:    .cfi_endproc
469
470
471;-------------------------------------------------------------------------------
472; Test 4
473;-------------------------------------------------------------------------------
474
475define void @test4() nounwind {
476entry:
477  ret void
478}
479
480; CHECK-FP-LABEL: test4:
481; CHECK-FP:   .fnstart
482; CHECK-FP:   mov pc, lr
483; CHECK-FP:   .cantunwind
484; CHECK-FP:   .fnend
485
486; CHECK-FP-ELIM-LABEL: test4:
487; CHECK-FP-ELIM:   .fnstart
488; CHECK-FP-ELIM:   mov pc, lr
489; CHECK-FP-ELIM:   .cantunwind
490; CHECK-FP-ELIM:   .fnend
491
492; CHECK-V7-FP-LABEL: test4:
493; CHECK-V7-FP:   .fnstart
494; CHECK-V7-FP:   bx lr
495; CHECK-V7-FP:   .cantunwind
496; CHECK-V7-FP:   .fnend
497
498; CHECK-V7-FP-ELIM-LABEL: test4:
499; CHECK-V7-FP-ELIM:   .fnstart
500; CHECK-V7-FP-ELIM:   bx lr
501; CHECK-V7-FP-ELIM:   .cantunwind
502; CHECK-V7-FP-ELIM:   .fnend
503
504; DWARF-FP-LABEL: test4:
505; DWARF-FP-NOT: .cfi_startproc
506; DWARF-FP:    mov pc, lr
507; DWARF-FP-NOT: .cfi_endproc
508; DWARF-FP:    .size test4,
509
510; DWARF-FP-ELIM-LABEL: test4:
511; DWARF-FP-ELIM-NOT: .cfi_startproc
512; DWARF-FP-ELIM:     mov pc, lr
513; DWARF-FP-ELIM-NOT: .cfi_endproc
514; DWARF-FP-ELIM:     .size test4,
515
516; DWARF-V7-FP-LABEL: test4:
517; DWARF-V7-FP-NOT: .cfi_startproc
518; DWARF-V7-FP:    bx lr
519; DWARF-V7-FP-NOT: .cfi_endproc
520; DWARF-V7-FP:    .size test4,
521
522; DWARF-V7-FP-ELIM-LABEL: test4:
523; DWARF-V7-FP-ELIM-NOT: .cfi_startproc
524; DWARF-V7-FP-ELIM:     bx lr
525; DWARF-V7-FP-ELIM-NOT: .cfi_endproc
526; DWARF-V7-FP-ELIM:     .size test4,
527