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