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