• 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) {
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          personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*)
100          catch i8* null
101  %1 = extractvalue { i8*, i32 } %0, 0
102  %2 = tail call i8* @__cxa_begin_catch(i8* %1)
103  invoke void @_Z5printddddd(double %m, double %n, double %p,
104                             double %q, double %r)
105          to label %invoke.cont2 unwind label %lpad1
106
107invoke.cont2:
108  tail call void @__cxa_end_catch()
109  br label %try.cont
110
111try.cont:
112  ret void
113
114lpad1:
115  %3 = landingpad { i8*, i32 }
116          personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*)
117          cleanup
118  invoke void @__cxa_end_catch()
119          to label %eh.resume unwind label %terminate.lpad
120
121eh.resume:
122  resume { i8*, i32 } %3
123
124terminate.lpad:
125  %4 = landingpad { i8*, i32 }
126          personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*)
127          catch i8* null
128  %5 = extractvalue { i8*, i32 } %4, 0
129  tail call void @__clang_call_terminate(i8* %5)
130  unreachable
131}
132
133declare void @__clang_call_terminate(i8*)
134
135declare i32 @__gxx_personality_v0(...)
136
137declare i8* @__cxa_begin_catch(i8*)
138
139declare void @__cxa_end_catch()
140
141declare void @_ZSt9terminatev()
142
143; CHECK-FP-LABEL: _Z4testiiiiiddddd:
144; CHECK-FP:   .fnstart
145; CHECK-FP:   .save  {r4, r5, r6, r7, r8, r9, r10, r11, lr}
146; CHECK-FP:   push   {r4, r5, r6, r7, r8, r9, r10, r11, lr}
147; CHECK-FP:   .setfp r11, sp, #28
148; CHECK-FP:   add    r11, sp, #28
149; CHECK-FP:   .pad   #28
150; CHECK-FP:   sub    sp, sp, #28
151; CHECK-FP:   .personality __gxx_personality_v0
152; CHECK-FP:   .handlerdata
153; CHECK-FP:   .fnend
154
155; CHECK-FP-ELIM-LABEL: _Z4testiiiiiddddd:
156; CHECK-FP-ELIM:   .fnstart
157; CHECK-FP-ELIM:   .save {r4, r5, r6, r7, r8, r9, r10, r11, lr}
158; CHECK-FP-ELIM:   push  {r4, r5, r6, r7, r8, r9, r10, r11, lr}
159; CHECK-FP-ELIM:   .pad  #28
160; CHECK-FP-ELIM:   sub   sp, sp, #28
161; CHECK-FP-ELIM:   .personality __gxx_personality_v0
162; CHECK-FP-ELIM:   .handlerdata
163; CHECK-FP-ELIM:   .fnend
164
165; CHECK-V7-FP-LABEL: _Z4testiiiiiddddd:
166; CHECK-V7-FP:   .fnstart
167; CHECK-V7-FP:   .save  {r4, r10, r11, lr}
168; CHECK-V7-FP:   push   {r4, r10, r11, lr}
169; CHECK-V7-FP:   .setfp r11, sp, #8
170; CHECK-V7-FP:   add    r11, sp, #8
171; CHECK-V7-FP:   .vsave {d8, d9, d10, d11, d12}
172; CHECK-V7-FP:   vpush  {d8, d9, d10, d11, d12}
173; CHECK-V7-FP:   .pad   #24
174; CHECK-V7-FP:   sub    sp, sp, #24
175; CHECK-V7-FP:   .personality __gxx_personality_v0
176; CHECK-V7-FP:   .handlerdata
177; CHECK-V7-FP:   .fnend
178
179; CHECK-V7-FP-ELIM-LABEL: _Z4testiiiiiddddd:
180; CHECK-V7-FP-ELIM:   .fnstart
181; CHECK-V7-FP-ELIM:   .save  {r4, lr}
182; CHECK-V7-FP-ELIM:   push   {r4, lr}
183; CHECK-V7-FP-ELIM:   .vsave {d8, d9, d10, d11, d12}
184; CHECK-V7-FP-ELIM:   vpush  {d8, d9, d10, d11, d12}
185; CHECK-V7-FP-ELIM:   .pad   #24
186; CHECK-V7-FP-ELIM:   sub    sp, sp, #24
187; CHECK-V7-FP-ELIM:   .personality __gxx_personality_v0
188; CHECK-V7-FP-ELIM:   .handlerdata
189; CHECK-V7-FP-ELIM:   .fnend
190
191; DWARF-FP-LABEL: _Z4testiiiiiddddd:
192; DWARF-FP:    .cfi_startproc
193; DWARF-FP:    .cfi_personality 0, __gxx_personality_v0
194; DWARF-FP:    .cfi_lsda 0, .Lexception0
195; DWARF-FP:    push {r4, r5, r6, r7, r8, r9, r10, r11, lr}
196; DWARF-FP:    .cfi_def_cfa_offset 36
197; DWARF-FP:    .cfi_offset lr, -4
198; DWARF-FP:    .cfi_offset r11, -8
199; DWARF-FP:    .cfi_offset r10, -12
200; DWARF-FP:    .cfi_offset r9, -16
201; DWARF-FP:    .cfi_offset r8, -20
202; DWARF-FP:    .cfi_offset r7, -24
203; DWARF-FP:    .cfi_offset r6, -28
204; DWARF-FP:    .cfi_offset r5, -32
205; DWARF-FP:    .cfi_offset r4, -36
206; DWARF-FP:    add r11, sp, #28
207; DWARF-FP:    .cfi_def_cfa r11, 8
208; DWARF-FP:    sub sp, sp, #28
209; DWARF-FP:    sub sp, r11, #28
210; DWARF-FP:    pop {r4, r5, r6, r7, r8, r9, r10, r11, lr}
211; DWARF-FP:    mov pc, lr
212; DWARF-FP:    .cfi_endproc
213
214; DWARF-FP-ELIM-LABEL: _Z4testiiiiiddddd:
215; DWARF-FP-ELIM:    .cfi_startproc
216; DWARF-FP-ELIM:    .cfi_personality 0, __gxx_personality_v0
217; DWARF-FP-ELIM:    .cfi_lsda 0, .Lexception0
218; DWARF-FP-ELIM:    push {r4, r5, r6, r7, r8, r9, r10, r11, lr}
219; DWARF-FP-ELIM:    .cfi_def_cfa_offset 36
220; DWARF-FP-ELIM:    .cfi_offset lr, -4
221; DWARF-FP-ELIM:    .cfi_offset r11, -8
222; DWARF-FP-ELIM:    .cfi_offset r10, -12
223; DWARF-FP-ELIM:    .cfi_offset r9, -16
224; DWARF-FP-ELIM:    .cfi_offset r8, -20
225; DWARF-FP-ELIM:    .cfi_offset r7, -24
226; DWARF-FP-ELIM:    .cfi_offset r6, -28
227; DWARF-FP-ELIM:    .cfi_offset r5, -32
228; DWARF-FP-ELIM:    .cfi_offset r4, -36
229; DWARF-FP-ELIM:    sub sp, sp, #28
230; DWARF-FP-ELIM:    .cfi_def_cfa_offset 64
231; DWARF-FP-ELIM:    add sp, sp, #28
232; DWARF-FP-ELIM:    pop {r4, r5, r6, r7, r8, r9, r10, r11, lr}
233; DWARF-FP-ELIM:    mov pc, lr
234; DWARF-FP-ELIM:    .cfi_endproc
235
236; DWARF-V7-FP-LABEL: _Z4testiiiiiddddd:
237; DWARF-V7-FP:    .cfi_startproc
238; DWARF-V7-FP:    .cfi_personality 0, __gxx_personality_v0
239; DWARF-V7-FP:    .cfi_lsda 0, .Lexception0
240; DWARF-V7-FP:    push {r4, r10, r11, lr}
241; DWARF-V7-FP:    .cfi_def_cfa_offset 16
242; DWARF-V7-FP:    .cfi_offset lr, -4
243; DWARF-V7-FP:    .cfi_offset r11, -8
244; DWARF-V7-FP:    .cfi_offset r10, -12
245; DWARF-V7-FP:    .cfi_offset r4, -16
246; DWARF-V7-FP:    add r11, sp, #8
247; DWARF-V7-FP:    .cfi_def_cfa r11, 8
248; DWARF-V7-FP:    vpush {d8, d9, d10, d11, d12}
249; DWARF-V7-FP:    .cfi_offset d12, -24
250; DWARF-V7-FP:    .cfi_offset d11, -32
251; DWARF-V7-FP:    .cfi_offset d10, -40
252; DWARF-V7-FP:    .cfi_offset d9, -48
253; DWARF-V7-FP:    sub sp, sp, #24
254; DWARF-V7-FP:    sub sp, r11, #48
255; DWARF-V7-FP:    vpop {d8, d9, d10, d11, d12}
256; DWARF-V7-FP:    pop {r4, r10, r11, pc}
257; DWARF-V7-FP:    .cfi_endproc
258
259; DWARF-V7-FP-ELIM-LABEL: _Z4testiiiiiddddd:
260; DWARF-V7-FP-ELIM:    .cfi_startproc
261; DWARF-V7-FP-ELIM:    .cfi_personality 0, __gxx_personality_v0
262; DWARF-V7-FP-ELIM:    .cfi_lsda 0, .Lexception0
263; DWARF-V7-FP-ELIM:    push {r4, lr}
264; DWARF-V7-FP-ELIM:    .cfi_def_cfa_offset 8
265; DWARF-V7-FP-ELIM:    .cfi_offset lr, -4
266; DWARF-V7-FP-ELIM:    .cfi_offset r4, -8
267; DWARF-V7-FP-ELIM:    vpush {d8, d9, d10, d11, d12}
268; DWARF-V7-FP-ELIM:    .cfi_offset d12, -16
269; DWARF-V7-FP-ELIM:    .cfi_offset d11, -24
270; DWARF-V7-FP-ELIM:    .cfi_offset d10, -32
271; DWARF-V7-FP-ELIM:    .cfi_offset d9, -40
272; DWARF-V7-FP-ELIM:    sub sp, sp, #24
273; DWARF-V7-FP-ELIM:    .cfi_def_cfa_offset 72
274; DWARF-V7-FP-ELIM:    add sp, sp, #24
275; DWARF-V7-FP-ELIM:    vpop {d8, d9, d10, d11, d12}
276; DWARF-V7-FP-ELIM:    pop {r4, pc}
277; DWARF-V7-FP-ELIM:    .cfi_endproc
278
279;-------------------------------------------------------------------------------
280; Test 2
281;-------------------------------------------------------------------------------
282
283declare void @throw_exception_2()
284
285define void @test2() {
286entry:
287  call void @throw_exception_2()
288  ret void
289}
290
291; CHECK-FP-LABEL: test2:
292; CHECK-FP:   .fnstart
293; CHECK-FP:   .save  {r11, lr}
294; CHECK-FP:   push   {r11, lr}
295; CHECK-FP:   .setfp r11, sp
296; CHECK-FP:   mov    r11, sp
297; CHECK-FP:   pop    {r11, lr}
298; CHECK-FP:   mov    pc, lr
299; CHECK-FP:   .fnend
300
301; CHECK-FP-ELIM-LABEL: test2:
302; CHECK-FP-ELIM:   .fnstart
303; CHECK-FP-ELIM:   .save {r11, lr}
304; CHECK-FP-ELIM:   push  {r11, lr}
305; CHECK-FP-ELIM:   pop   {r11, lr}
306; CHECK-FP-ELIM:   mov   pc, lr
307; CHECK-FP-ELIM:   .fnend
308
309; CHECK-V7-FP-LABEL: test2:
310; CHECK-V7-FP:   .fnstart
311; CHECK-V7-FP:   .save  {r11, lr}
312; CHECK-V7-FP:   push   {r11, lr}
313; CHECK-V7-FP:   .setfp r11, sp
314; CHECK-V7-FP:   mov    r11, sp
315; CHECK-V7-FP:   pop    {r11, pc}
316; CHECK-V7-FP:   .fnend
317
318; CHECK-V7-FP-ELIM-LABEL: test2:
319; CHECK-V7-FP-ELIM:   .fnstart
320; CHECK-V7-FP-ELIM:   .save {r11, lr}
321; CHECK-V7-FP-ELIM:   push  {r11, lr}
322; CHECK-V7-FP-ELIM:   pop   {r11, pc}
323; CHECK-V7-FP-ELIM:   .fnend
324
325; DWARF-FP-LABEL: test2:
326; DWARF-FP:    .cfi_startproc
327; DWARF-FP:    push {r11, lr}
328; DWARF-FP:    .cfi_def_cfa_offset 8
329; DWARF-FP:    .cfi_offset lr, -4
330; DWARF-FP:    .cfi_offset r11, -8
331; DWARF-FP:    mov  r11, sp
332; DWARF-FP:    .cfi_def_cfa_register r11
333; DWARF-FP:    pop  {r11, lr}
334; DWARF-FP:    mov  pc, lr
335; DWARF-FP:    .cfi_endproc
336
337; DWARF-FP-ELIM-LABEL: test2:
338; DWARF-FP-ELIM:    .cfi_startproc
339; DWARF-FP-ELIM:    push {r11, lr}
340; DWARF-FP-ELIM:    .cfi_def_cfa_offset 8
341; DWARF-FP-ELIM:    .cfi_offset lr, -4
342; DWARF-FP-ELIM:    .cfi_offset r11, -8
343; DWARF-FP-ELIM:    pop  {r11, lr}
344; DWARF-FP-ELIM:    mov  pc, lr
345; DWARF-FP-ELIM:    .cfi_endproc
346
347; DWARF-V7-FP-LABEL: test2:
348; DWARF-V7-FP:    .cfi_startproc
349; DWARF-V7-FP:    push {r11, lr}
350; DWARF-V7-FP:    .cfi_def_cfa_offset 8
351; DWARF-V7-FP:    .cfi_offset lr, -4
352; DWARF-V7-FP:    .cfi_offset r11, -8
353; DWARF-V7-FP:    mov  r11, sp
354; DWARF-V7-FP:    .cfi_def_cfa_register r11
355; DWARF-V7-FP:    pop  {r11, pc}
356; DWARF-V7-FP:    .cfi_endproc
357
358; DWARF-V7-FP-ELIM-LABEL: test2:
359; DWARF-V7-FP-ELIM:    .cfi_startproc
360; DWARF-V7-FP-ELIM:    push {r11, lr}
361; DWARF-V7-FP-ELIM:    .cfi_def_cfa_offset 8
362; DWARF-V7-FP-ELIM:    .cfi_offset lr, -4
363; DWARF-V7-FP-ELIM:    .cfi_offset r11, -8
364; DWARF-V7-FP-ELIM:    pop  {r11, pc}
365; DWARF-V7-FP-ELIM:    .cfi_endproc
366
367
368;-------------------------------------------------------------------------------
369; Test 3
370;-------------------------------------------------------------------------------
371
372declare void @throw_exception_3(i32)
373
374define i32 @test3(i32 %a, i32 %b, i32 %c, i32 %d,
375                  i32 %e, i32 %f, i32 %g, i32 %h) {
376entry:
377  %add = add nsw i32 %b, %a
378  %add1 = add nsw i32 %add, %c
379  %add2 = add nsw i32 %add1, %d
380  tail call void @throw_exception_3(i32 %add2)
381  %add3 = add nsw i32 %f, %e
382  %add4 = add nsw i32 %add3, %g
383  %add5 = add nsw i32 %add4, %h
384  tail call void @throw_exception_3(i32 %add5)
385  %add6 = add nsw i32 %add5, %add2
386  ret i32 %add6
387}
388
389; CHECK-FP-LABEL: test3:
390; CHECK-FP:   .fnstart
391; CHECK-FP:   .save  {r4, r5, r11, lr}
392; CHECK-FP:   push   {r4, r5, r11, lr}
393; CHECK-FP:   .setfp r11, sp, #8
394; CHECK-FP:   add    r11, sp, #8
395; CHECK-FP:   pop    {r4, r5, r11, lr}
396; CHECK-FP:   mov    pc, lr
397; CHECK-FP:   .fnend
398
399; CHECK-FP-ELIM-LABEL: test3:
400; CHECK-FP-ELIM:   .fnstart
401; CHECK-FP-ELIM:   .save {r4, r5, r11, lr}
402; CHECK-FP-ELIM:   push  {r4, r5, r11, lr}
403; CHECK-FP-ELIM:   pop   {r4, r5, r11, lr}
404; CHECK-FP-ELIM:   mov   pc, lr
405; CHECK-FP-ELIM:   .fnend
406
407; CHECK-V7-FP-LABEL: test3:
408; CHECK-V7-FP:   .fnstart
409; CHECK-V7-FP:   .save  {r4, r5, r11, lr}
410; CHECK-V7-FP:   push   {r4, r5, r11, lr}
411; CHECK-V7-FP:   .setfp r11, sp, #8
412; CHECK-V7-FP:   add    r11, sp, #8
413; CHECK-V7-FP:   pop    {r4, r5, r11, pc}
414; CHECK-V7-FP:   .fnend
415
416; CHECK-V7-FP-ELIM-LABEL: test3:
417; CHECK-V7-FP-ELIM:   .fnstart
418; CHECK-V7-FP-ELIM:   .save {r4, r5, r11, lr}
419; CHECK-V7-FP-ELIM:   push  {r4, r5, r11, lr}
420; CHECK-V7-FP-ELIM:   pop   {r4, r5, r11, pc}
421; CHECK-V7-FP-ELIM:   .fnend
422
423; DWARF-FP-LABEL: test3:
424; DWARF-FP:    .cfi_startproc
425; DWARF-FP:    push {r4, r5, r11, lr}
426; DWARF-FP:    .cfi_def_cfa_offset 16
427; DWARF-FP:    .cfi_offset lr, -4
428; DWARF-FP:    .cfi_offset r11, -8
429; DWARF-FP:    .cfi_offset r5, -12
430; DWARF-FP:    .cfi_offset r4, -16
431; DWARF-FP:    add  r11, sp, #8
432; DWARF-FP:    .cfi_def_cfa r11, 8
433; DWARF-FP:    pop  {r4, r5, r11, lr}
434; DWARF-FP:    mov  pc, lr
435; DWARF-FP:    .cfi_endproc
436
437; DWARF-FP-ELIM-LABEL: test3:
438; DWARF-FP-ELIM:    .cfi_startproc
439; DWARF-FP-ELIM:    push {r4, r5, r11, lr}
440; DWARF-FP-ELIM:    .cfi_def_cfa_offset 16
441; DWARF-FP-ELIM:    .cfi_offset lr, -4
442; DWARF-FP-ELIM:    .cfi_offset r11, -8
443; DWARF-FP-ELIM:    .cfi_offset r5, -12
444; DWARF-FP-ELIM:    .cfi_offset r4, -16
445; DWARF-FP-ELIM:    pop  {r4, r5, r11, lr}
446; DWARF-FP-ELIM:    mov  pc, lr
447; DWARF-FP-ELIM:    .cfi_endproc
448
449; DWARF-V7-FP-LABEL: test3:
450; DWARF-V7-FP:    .cfi_startproc
451; DWARF-V7-FP:    push {r4, r5, r11, lr}
452; DWARF-V7-FP:    .cfi_def_cfa_offset 16
453; DWARF-V7-FP:    .cfi_offset lr, -4
454; DWARF-V7-FP:    .cfi_offset r11, -8
455; DWARF-V7-FP:    .cfi_offset r5, -12
456; DWARF-V7-FP:    .cfi_offset r4, -16
457; DWARF-V7-FP:    add  r11, sp, #8
458; DWARF-V7-FP:    .cfi_def_cfa r11, 8
459; DWARF-V7-FP:    pop  {r4, r5, r11, pc}
460; DWARF-V7-FP:    .cfi_endproc
461
462; DWARF-V7-FP-ELIM-LABEL: test3:
463; DWARF-V7-FP-ELIM:    .cfi_startproc
464; DWARF-V7-FP-ELIM:    push {r4, r5, r11, lr}
465; DWARF-V7-FP-ELIM:    .cfi_def_cfa_offset 16
466; DWARF-V7-FP-ELIM:    .cfi_offset lr, -4
467; DWARF-V7-FP-ELIM:    .cfi_offset r11, -8
468; DWARF-V7-FP-ELIM:    .cfi_offset r5, -12
469; DWARF-V7-FP-ELIM:    .cfi_offset r4, -16
470; DWARF-V7-FP-ELIM:    pop  {r4, r5, r11, pc}
471; DWARF-V7-FP-ELIM:    .cfi_endproc
472
473
474;-------------------------------------------------------------------------------
475; Test 4
476;-------------------------------------------------------------------------------
477
478define void @test4() nounwind {
479entry:
480  ret void
481}
482
483; CHECK-FP-LABEL: test4:
484; CHECK-FP:   .fnstart
485; CHECK-FP:   mov pc, lr
486; CHECK-FP:   .cantunwind
487; CHECK-FP:   .fnend
488
489; CHECK-FP-ELIM-LABEL: test4:
490; CHECK-FP-ELIM:   .fnstart
491; CHECK-FP-ELIM:   mov pc, lr
492; CHECK-FP-ELIM:   .cantunwind
493; CHECK-FP-ELIM:   .fnend
494
495; CHECK-V7-FP-LABEL: test4:
496; CHECK-V7-FP:   .fnstart
497; CHECK-V7-FP:   bx lr
498; CHECK-V7-FP:   .cantunwind
499; CHECK-V7-FP:   .fnend
500
501; CHECK-V7-FP-ELIM-LABEL: test4:
502; CHECK-V7-FP-ELIM:   .fnstart
503; CHECK-V7-FP-ELIM:   bx lr
504; CHECK-V7-FP-ELIM:   .cantunwind
505; CHECK-V7-FP-ELIM:   .fnend
506
507; DWARF-FP-LABEL: test4:
508; DWARF-FP-NOT: .cfi_startproc
509; DWARF-FP:    mov pc, lr
510; DWARF-FP-NOT: .cfi_endproc
511; DWARF-FP:    .size test4,
512
513; DWARF-FP-ELIM-LABEL: test4:
514; DWARF-FP-ELIM-NOT: .cfi_startproc
515; DWARF-FP-ELIM:     mov pc, lr
516; DWARF-FP-ELIM-NOT: .cfi_endproc
517; DWARF-FP-ELIM:     .size test4,
518
519; DWARF-V7-FP-LABEL: test4:
520; DWARF-V7-FP-NOT: .cfi_startproc
521; DWARF-V7-FP:    bx lr
522; DWARF-V7-FP-NOT: .cfi_endproc
523; DWARF-V7-FP:    .size test4,
524
525; DWARF-V7-FP-ELIM-LABEL: test4:
526; DWARF-V7-FP-ELIM-NOT: .cfi_startproc
527; DWARF-V7-FP-ELIM:     bx lr
528; DWARF-V7-FP-ELIM-NOT: .cfi_endproc
529; DWARF-V7-FP-ELIM:     .size test4,
530