643 lines · plain
1; ARM EHABI integrated test2 3; This test case checks whether the ARM unwind directives are properly4; 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 with13; nounwind function attribute.14 15; We have to check several cases:16; (1) arm with -frame-pointer=all17; (2) arm without -frame-pointer=all18; (3) armv7 with -frame-pointer=all19; (4) armv7 without -frame-pointer=all20 21; RUN: llc -mtriple arm-unknown-linux-gnueabi \22; RUN: -frame-pointer=all -filetype=asm -o - %s \23; RUN: | FileCheck %s --check-prefix=CHECK-FP24 25; RUN: llc -mtriple arm-unknown-linux-gnueabi \26; RUN: -filetype=asm -o - %s \27; RUN: | FileCheck %s --check-prefix=CHECK-FP-ELIM28 29; RUN: llc -mtriple armv7-unknown-linux-gnueabi \30; RUN: -frame-pointer=all -filetype=asm -o - %s \31; RUN: | FileCheck %s --check-prefix=CHECK-V7-FP32 33; RUN: llc -mtriple armv7-unknown-linux-gnueabi \34; RUN: -filetype=asm -o - %s \35; RUN: | FileCheck %s --check-prefix=CHECK-V7-FP-ELIM36 37; RUN: llc -mtriple arm-unknown-linux-musleabi \38; RUN: -frame-pointer=all -filetype=asm -o - %s \39; RUN: | FileCheck %s --check-prefix=CHECK-FP40 41; RUN: llc -mtriple arm-unknown-linux-musleabi \42; RUN: -filetype=asm -o - %s \43; RUN: | FileCheck %s --check-prefix=CHECK-FP-ELIM44 45; RUN: llc -mtriple armv7-unknown-linux-musleabi \46; RUN: -frame-pointer=all -filetype=asm -o - %s \47; RUN: | FileCheck %s --check-prefix=CHECK-V7-FP48 49; RUN: llc -mtriple armv7-unknown-linux-musleabi \50; RUN: -filetype=asm -o - %s \51; RUN: | FileCheck %s --check-prefix=CHECK-V7-FP-ELIM52 53; RUN: llc -mtriple arm-unknown-linux-androideabi \54; RUN: -frame-pointer=all -filetype=asm -o - %s \55; RUN: | FileCheck %s --check-prefix=CHECK-FP56 57; RUN: llc -mtriple arm-unknown-linux-androideabi \58; RUN: -filetype=asm -o - %s \59; RUN: | FileCheck %s --check-prefix=CHECK-FP-ELIM60 61; RUN: llc -mtriple armv7-unknown-linux-androideabi \62; RUN: -frame-pointer=all -filetype=asm -o - %s \63; RUN: | FileCheck %s --check-prefix=CHECK-V7-FP64 65; RUN: llc -mtriple armv7-unknown-linux-androideabi \66; RUN: -filetype=asm -o - %s \67; RUN: | FileCheck %s --check-prefix=CHECK-V7-FP-ELIM68 69; RUN: llc -mtriple arm-unknown-netbsd-eabi \70; RUN: -frame-pointer=all -filetype=asm -o - %s \71; RUN: | FileCheck %s --check-prefix=DWARF-FP72 73; RUN: llc -mtriple arm-unknown-netbsd-eabi \74; RUN: -filetype=asm -o - %s \75; RUN: | FileCheck %s --check-prefix=DWARF-FP-ELIM76 77; RUN: llc -mtriple armv7-unknown-netbsd-eabi \78; RUN: -frame-pointer=all -filetype=asm -o - %s \79; RUN: | FileCheck %s --check-prefix=DWARF-V7-FP80 81; RUN: llc -mtriple armv7-unknown-netbsd-eabi \82; RUN: -filetype=asm -o - %s \83; RUN: | FileCheck %s --check-prefix=DWARF-V7-FP-ELIM84 85; RUN: llc -mtriple thumbv7-windows-gnu \86; RUN: -filetype=asm -exception-model=dwarf -o - %s \87; RUN: | FileCheck %s --check-prefix=DWARF-WIN-FP-ELIM88 89; RUN: llc -mtriple thumbv7-windows-gnu \90; RUN: -filetype=asm -o - %s \91; RUN: | FileCheck %s --check-prefix=SEH-WIN-FP-ELIM92 93;-------------------------------------------------------------------------------94; Test 195;-------------------------------------------------------------------------------96; This is the LLVM assembly generated from following C++ code:97;98; extern void print(int, int, int, int, int);99; extern void print(double, double, double, double, double);100;101; void test(int a, int b, int c, int d, int e,102; double m, double n, double p, double q, double r) {103; try {104; print(a, b, c, d, e);105; } catch (...) {106; print(m, n, p, q, r);107; }108; }109 110declare void @_Z5printiiiii(i32, i32, i32, i32, i32)111 112declare void @_Z5printddddd(double, double, double, double, double)113 114define void @_Z4testiiiiiddddd(i32 %a, i32 %b, i32 %c, i32 %d, i32 %e,115 double %m, double %n, double %p,116 double %q, double %r) personality ptr @__gxx_personality_v0 {117entry:118 invoke void @_Z5printiiiii(i32 %a, i32 %b, i32 %c, i32 %d, i32 %e)119 to label %try.cont unwind label %lpad120 121lpad:122 %0 = landingpad { ptr, i32 }123 catch ptr null124 %1 = extractvalue { ptr, i32 } %0, 0125 %2 = tail call ptr @__cxa_begin_catch(ptr %1)126 invoke void @_Z5printddddd(double %m, double %n, double %p,127 double %q, double %r)128 to label %invoke.cont2 unwind label %lpad1129 130invoke.cont2:131 tail call void @__cxa_end_catch()132 br label %try.cont133 134try.cont:135 ret void136 137lpad1:138 %3 = landingpad { ptr, i32 }139 cleanup140 invoke void @__cxa_end_catch()141 to label %eh.resume unwind label %terminate.lpad142 143eh.resume:144 resume { ptr, i32 } %3145 146terminate.lpad:147 %4 = landingpad { ptr, i32 }148 catch ptr null149 %5 = extractvalue { ptr, i32 } %4, 0150 tail call void @__clang_call_terminate(ptr %5)151 unreachable152}153 154declare void @__clang_call_terminate(ptr)155 156declare i32 @__gxx_personality_v0(...)157 158declare ptr @__cxa_begin_catch(ptr)159 160declare void @__cxa_end_catch()161 162declare void @_ZSt9terminatev()163 164; CHECK-FP-LABEL: _Z4testiiiiiddddd:165; CHECK-FP: .fnstart166; CHECK-FP: .save {r4, r5, r6, r7, r8, r9, r10, r11, lr}167; CHECK-FP: push {r4, r5, r6, r7, r8, r9, r10, r11, lr}168; CHECK-FP: .setfp r11, sp, #28169; CHECK-FP: add r11, sp, #28170; CHECK-FP: .pad #44171; CHECK-FP: sub sp, sp, #44172; CHECK-FP: .personality __gxx_personality_v0173; CHECK-FP: .handlerdata174; CHECK-FP: .fnend175 176; CHECK-FP-ELIM-LABEL: _Z4testiiiiiddddd:177; CHECK-FP-ELIM: .fnstart178; CHECK-FP-ELIM: .save {r4, r5, r6, r7, r8, r9, r10, r11, lr}179; CHECK-FP-ELIM: push {r4, r5, r6, r7, r8, r9, r10, r11, lr}180; CHECK-FP-ELIM: .pad #36181; CHECK-FP-ELIM: sub sp, sp, #36182; CHECK-FP-ELIM: .personality __gxx_personality_v0183; CHECK-FP-ELIM: .handlerdata184; CHECK-FP-ELIM: .fnend185 186; CHECK-V7-FP-LABEL: _Z4testiiiiiddddd:187; CHECK-V7-FP: .fnstart188; CHECK-V7-FP: .save {r11, lr}189; CHECK-V7-FP: push {r11, lr}190; CHECK-V7-FP: .setfp r11, sp191; CHECK-V7-FP: mov r11, sp192; CHECK-V7-FP: .vsave {d8, d9, d10, d11, d12}193; CHECK-V7-FP: vpush {d8, d9, d10, d11, d12}194; CHECK-V7-FP: .pad #24195; CHECK-V7-FP: sub sp, sp, #24196; CHECK-V7-FP: .personality __gxx_personality_v0197; CHECK-V7-FP: .handlerdata198; CHECK-V7-FP: .fnend199 200; CHECK-V7-FP-ELIM-LABEL: _Z4testiiiiiddddd:201; CHECK-V7-FP-ELIM: .fnstart202; CHECK-V7-FP-ELIM: .save {r11, lr}203; CHECK-V7-FP-ELIM: push {r11, lr}204; CHECK-V7-FP-ELIM: .vsave {d8, d9, d10, d11, d12}205; CHECK-V7-FP-ELIM: vpush {d8, d9, d10, d11, d12}206; CHECK-V7-FP-ELIM: .pad #24207; CHECK-V7-FP-ELIM: sub sp, sp, #24208; CHECK-V7-FP-ELIM: .personality __gxx_personality_v0209; CHECK-V7-FP-ELIM: .handlerdata210; CHECK-V7-FP-ELIM: .fnend211 212; DWARF-FP-LABEL: _Z4testiiiiiddddd:213; DWARF-FP: .cfi_startproc214; DWARF-FP: .cfi_personality 0, __gxx_personality_v0215; DWARF-FP: .cfi_lsda 0, .Lexception0216; DWARF-FP: push {r4, r5, r6, r7, r8, r9, r10, r11, lr}217; DWARF-FP: .cfi_def_cfa_offset 36218; DWARF-FP: .cfi_offset lr, -4219; DWARF-FP: .cfi_offset r11, -8220; DWARF-FP: .cfi_offset r10, -12221; DWARF-FP: .cfi_offset r9, -16222; DWARF-FP: .cfi_offset r8, -20223; DWARF-FP: .cfi_offset r7, -24224; DWARF-FP: .cfi_offset r6, -28225; DWARF-FP: .cfi_offset r5, -32226; DWARF-FP: .cfi_offset r4, -36227; DWARF-FP: add r11, sp, #28228; DWARF-FP: .cfi_def_cfa r11, 8229; DWARF-FP: sub sp, sp, #44230; DWARF-FP: sub sp, r11, #28231; DWARF-FP: pop {r4, r5, r6, r7, r8, r9, r10, r11, lr}232; DWARF-FP: mov pc, lr233; DWARF-FP: .cfi_endproc234 235; DWARF-FP-ELIM-LABEL: _Z4testiiiiiddddd:236; DWARF-FP-ELIM: .cfi_startproc237; DWARF-FP-ELIM: .cfi_personality 0, __gxx_personality_v0238; DWARF-FP-ELIM: .cfi_lsda 0, .Lexception0239; DWARF-FP-ELIM: push {r4, r5, r6, r7, r8, r9, r10, r11, lr}240; DWARF-FP-ELIM: .cfi_def_cfa_offset 36241; DWARF-FP-ELIM: .cfi_offset lr, -4242; DWARF-FP-ELIM: .cfi_offset r11, -8243; DWARF-FP-ELIM: .cfi_offset r10, -12244; DWARF-FP-ELIM: .cfi_offset r9, -16245; DWARF-FP-ELIM: .cfi_offset r8, -20246; DWARF-FP-ELIM: .cfi_offset r7, -24247; DWARF-FP-ELIM: .cfi_offset r6, -28248; DWARF-FP-ELIM: .cfi_offset r5, -32249; DWARF-FP-ELIM: .cfi_offset r4, -36250; DWARF-FP-ELIM: sub sp, sp, #36251; DWARF-FP-ELIM: .cfi_def_cfa_offset 72252; DWARF-FP-ELIM: add sp, sp, #36253; DWARF-FP-ELIM: pop {r4, r5, r6, r7, r8, r9, r10, r11, lr}254; DWARF-FP-ELIM: mov pc, lr255; DWARF-FP-ELIM: .cfi_endproc256 257; DWARF-V7-FP-LABEL: _Z4testiiiiiddddd:258; DWARF-V7-FP: .cfi_startproc259; DWARF-V7-FP: .cfi_personality 0, __gxx_personality_v0260; DWARF-V7-FP: .cfi_lsda 0, .Lexception0261; DWARF-V7-FP: push {r4, r10, r11, lr}262; DWARF-V7-FP: .cfi_def_cfa_offset 16263; DWARF-V7-FP: .cfi_offset lr, -4264; DWARF-V7-FP: .cfi_offset r11, -8265; DWARF-V7-FP: .cfi_offset r10, -12266; DWARF-V7-FP: .cfi_offset r4, -16267; DWARF-V7-FP: add r11, sp, #8268; DWARF-V7-FP: .cfi_def_cfa r11, 8269; DWARF-V7-FP: vpush {d8, d9, d10, d11, d12}270; DWARF-V7-FP: .cfi_offset d12, -24271; DWARF-V7-FP: .cfi_offset d11, -32272; DWARF-V7-FP: .cfi_offset d10, -40273; DWARF-V7-FP: .cfi_offset d9, -48274; DWARF-V7-FP: .cfi_offset d8, -56275; DWARF-V7-FP: sub sp, sp, #24276; DWARF-V7-FP: sub sp, r11, #48277; DWARF-V7-FP: vpop {d8, d9, d10, d11, d12}278; DWARF-V7-FP: pop {r4, r10, r11, pc}279; DWARF-V7-FP: .cfi_endproc280 281; DWARF-V7-FP-ELIM-LABEL: _Z4testiiiiiddddd:282; DWARF-V7-FP-ELIM: .cfi_startproc283; DWARF-V7-FP-ELIM: .cfi_personality 0, __gxx_personality_v0284; DWARF-V7-FP-ELIM: .cfi_lsda 0, .Lexception0285; DWARF-V7-FP-ELIM: push {r4, lr}286; DWARF-V7-FP-ELIM: .cfi_def_cfa_offset 8287; DWARF-V7-FP-ELIM: .cfi_offset lr, -4288; DWARF-V7-FP-ELIM: .cfi_offset r4, -8289; DWARF-V7-FP-ELIM: vpush {d8, d9, d10, d11, d12}290; DWARF-V7-FP-ELIM: .cfi_offset d12, -16291; DWARF-V7-FP-ELIM: .cfi_offset d11, -24292; DWARF-V7-FP-ELIM: .cfi_offset d10, -32293; DWARF-V7-FP-ELIM: .cfi_offset d9, -40294; DWARF-V7-FP-ELIM: sub sp, sp, #24295; DWARF-V7-FP-ELIM: .cfi_def_cfa_offset 72296; DWARF-V7-FP-ELIM: add sp, sp, #24297; DWARF-V7-FP-ELIM: vpop {d8, d9, d10, d11, d12}298; DWARF-V7-FP-ELIM: pop {r4, pc}299; DWARF-V7-FP-ELIM: .cfi_endproc300 301; DWARF-WIN-FP-ELIM-LABEL: _Z4testiiiiiddddd:302; DWARF-WIN-FP-ELIM: .cfi_startproc303; DWARF-WIN-FP-ELIM: .cfi_personality 0, __gxx_personality_v0304; DWARF-WIN-FP-ELIM: .cfi_lsda 0, .Lexception0305; DWARF-WIN-FP-ELIM: push {r4, lr}306; DWARF-WIN-FP-ELIM: .cfi_def_cfa_offset 8307; DWARF-WIN-FP-ELIM: .cfi_offset lr, -4308; DWARF-WIN-FP-ELIM: .cfi_offset r4, -8309; DWARF-WIN-FP-ELIM: vpush {d8, d9, d10, d11, d12}310; DWARF-WIN-FP-ELIM: .cfi_offset d12, -16311; DWARF-WIN-FP-ELIM: .cfi_offset d11, -24312; DWARF-WIN-FP-ELIM: .cfi_offset d10, -32313; DWARF-WIN-FP-ELIM: .cfi_offset d9, -40314; DWARF-WIN-FP-ELIM: sub sp, #8315; DWARF-WIN-FP-ELIM: .cfi_def_cfa_offset 56316; DWARF-WIN-FP-ELIM: add sp, #8317; DWARF-WIN-FP-ELIM: vpop {d8, d9, d10, d11, d12}318; DWARF-WIN-FP-ELIM: pop {r4, pc}319; DWARF-WIN-FP-ELIM: .cfi_endproc320 321; SEH-WIN-FP-ELIM-LABEL: _Z4testiiiiiddddd:322; SEH-WIN-FP-ELIM: .seh_proc _Z4testiiiiiddddd323; SEH-WIN-FP-ELIM: .seh_handler __gxx_personality_v0, %unwind, %except324; SEH-WIN-FP-ELIM: push {r4, lr}325; SEH-WIN-FP-ELIM: .seh_save_regs {r4, lr}326; SEH-WIN-FP-ELIM: vpush {d8, d9, d10, d11, d12}327; SEH-WIN-FP-ELIM: .seh_save_fregs {d8-d12}328; SEH-WIN-FP-ELIM: sub sp, #8329; SEH-WIN-FP-ELIM: .seh_stackalloc 8330; SEH-WIN-FP-ELIM: .seh_endprologue331; SEH-WIN-FP-ELIM: .seh_startepilogue332; SEH-WIN-FP-ELIM: add sp, #8333; SEH-WIN-FP-ELIM: .seh_stackalloc 8334; SEH-WIN-FP-ELIM: vpop {d8, d9, d10, d11, d12}335; SEH-WIN-FP-ELIM: .seh_save_fregs {d8-d12}336; SEH-WIN-FP-ELIM: pop {r4, pc}337; SEH-WIN-FP-ELIM: .seh_save_regs {r4, lr}338; SEH-WIN-FP-ELIM: .seh_endepilogue339; SEH-WIN-FP-ELIM: .seh_endproc340 341;-------------------------------------------------------------------------------342; Test 2343;-------------------------------------------------------------------------------344 345declare void @throw_exception_2()346 347define void @test2() {348entry:349 call void @throw_exception_2()350 ret void351}352 353; CHECK-FP-LABEL: test2:354; CHECK-FP: .fnstart355; CHECK-FP: .save {r11, lr}356; CHECK-FP: push {r11, lr}357; CHECK-FP: .setfp r11, sp358; CHECK-FP: mov r11, sp359; CHECK-FP: pop {r11, lr}360; CHECK-FP: mov pc, lr361; CHECK-FP: .fnend362 363; CHECK-FP-ELIM-LABEL: test2:364; CHECK-FP-ELIM: .fnstart365; CHECK-FP-ELIM: .save {r11, lr}366; CHECK-FP-ELIM: push {r11, lr}367; CHECK-FP-ELIM: pop {r11, lr}368; CHECK-FP-ELIM: mov pc, lr369; CHECK-FP-ELIM: .fnend370 371; CHECK-V7-FP-LABEL: test2:372; CHECK-V7-FP: .fnstart373; CHECK-V7-FP: .save {r11, lr}374; CHECK-V7-FP: push {r11, lr}375; CHECK-V7-FP: .setfp r11, sp376; CHECK-V7-FP: mov r11, sp377; CHECK-V7-FP: pop {r11, pc}378; CHECK-V7-FP: .fnend379 380; CHECK-V7-FP-ELIM-LABEL: test2:381; CHECK-V7-FP-ELIM: .fnstart382; CHECK-V7-FP-ELIM: .save {r11, lr}383; CHECK-V7-FP-ELIM: push {r11, lr}384; CHECK-V7-FP-ELIM: pop {r11, pc}385; CHECK-V7-FP-ELIM: .fnend386 387; DWARF-FP-LABEL: test2:388; DWARF-FP: .cfi_startproc389; DWARF-FP: push {r11, lr}390; DWARF-FP: .cfi_def_cfa_offset 8391; DWARF-FP: .cfi_offset lr, -4392; DWARF-FP: .cfi_offset r11, -8393; DWARF-FP: mov r11, sp394; DWARF-FP: .cfi_def_cfa_register r11395; DWARF-FP: pop {r11, lr}396; DWARF-FP: mov pc, lr397; DWARF-FP: .cfi_endproc398 399; DWARF-FP-ELIM-LABEL: test2:400; DWARF-FP-ELIM: .cfi_startproc401; DWARF-FP-ELIM: push {r11, lr}402; DWARF-FP-ELIM: .cfi_def_cfa_offset 8403; DWARF-FP-ELIM: .cfi_offset lr, -4404; DWARF-FP-ELIM: .cfi_offset r11, -8405; DWARF-FP-ELIM: pop {r11, lr}406; DWARF-FP-ELIM: mov pc, lr407; DWARF-FP-ELIM: .cfi_endproc408 409; DWARF-V7-FP-LABEL: test2:410; DWARF-V7-FP: .cfi_startproc411; DWARF-V7-FP: push {r11, lr}412; DWARF-V7-FP: .cfi_def_cfa_offset 8413; DWARF-V7-FP: .cfi_offset lr, -4414; DWARF-V7-FP: .cfi_offset r11, -8415; DWARF-V7-FP: mov r11, sp416; DWARF-V7-FP: .cfi_def_cfa_register r11417; DWARF-V7-FP: pop {r11, pc}418; DWARF-V7-FP: .cfi_endproc419 420; DWARF-V7-FP-ELIM-LABEL: test2:421; DWARF-V7-FP-ELIM: .cfi_startproc422; DWARF-V7-FP-ELIM: push {r11, lr}423; DWARF-V7-FP-ELIM: .cfi_def_cfa_offset 8424; DWARF-V7-FP-ELIM: .cfi_offset lr, -4425; DWARF-V7-FP-ELIM: .cfi_offset r11, -8426; DWARF-V7-FP-ELIM: pop {r11, pc}427; DWARF-V7-FP-ELIM: .cfi_endproc428 429; DWARF-WIN-FP-ELIM-LABEL: test2:430; DWARF-WIN-FP-ELIM: .cfi_startproc431; DWARF-WIN-FP-ELIM: push.w {r11, lr}432; DWARF-WIN-FP-ELIM: .cfi_def_cfa_offset 8433; DWARF-WIN-FP-ELIM: .cfi_offset lr, -4434; DWARF-WIN-FP-ELIM: .cfi_offset r11, -8435; DWARF-WIN-FP-ELIM: pop.w {r11, pc}436; DWARF-WIN-FP-ELIM: .cfi_endproc437 438; SEH-WIN-FP-ELIM-LABEL: test2:439; SEH-WIN-FP-ELIM: .seh_proc test2440; SEH-WIN-FP-ELIM: push.w {r11, lr}441; SEH-WIN-FP-ELIM: .seh_save_regs_w {r11, lr}442; SEH-WIN-FP-ELIM: .seh_endprologue443; SEH-WIN-FP-ELIM: .seh_startepilogue444; SEH-WIN-FP-ELIM: pop.w {r11, pc}445; SEH-WIN-FP-ELIM: .seh_endepilogue446; SEH-WIN-FP-ELIM: .seh_endproc447 448 449;-------------------------------------------------------------------------------450; Test 3451;-------------------------------------------------------------------------------452 453declare void @throw_exception_3(i32)454 455define i32 @test3(i32 %a, i32 %b, i32 %c, i32 %d,456 i32 %e, i32 %f, i32 %g, i32 %h) {457entry:458 %add = add nsw i32 %b, %a459 %add1 = add nsw i32 %add, %c460 %add2 = add nsw i32 %add1, %d461 tail call void @throw_exception_3(i32 %add2)462 %add3 = add nsw i32 %f, %e463 %add4 = add nsw i32 %add3, %g464 %add5 = add nsw i32 %add4, %h465 tail call void @throw_exception_3(i32 %add5)466 %add6 = add nsw i32 %add5, %add2467 ret i32 %add6468}469 470; CHECK-FP-LABEL: test3:471; CHECK-FP: .fnstart472; CHECK-FP: .save {r4, r5, r11, lr}473; CHECK-FP: push {r4, r5, r11, lr}474; CHECK-FP: .setfp r11, sp, #8475; CHECK-FP: add r11, sp, #8476; CHECK-FP: pop {r4, r5, r11, lr}477; CHECK-FP: mov pc, lr478; CHECK-FP: .fnend479 480; CHECK-FP-ELIM-LABEL: test3:481; CHECK-FP-ELIM: .fnstart482; CHECK-FP-ELIM: .save {r4, r5, r11, lr}483; CHECK-FP-ELIM: push {r4, r5, r11, lr}484; CHECK-FP-ELIM: pop {r4, r5, r11, lr}485; CHECK-FP-ELIM: mov pc, lr486; CHECK-FP-ELIM: .fnend487 488; CHECK-V7-FP-LABEL: test3:489; CHECK-V7-FP: .fnstart490; CHECK-V7-FP: .save {r4, r5, r11, lr}491; CHECK-V7-FP: push {r4, r5, r11, lr}492; CHECK-V7-FP: .setfp r11, sp, #8493; CHECK-V7-FP: add r11, sp, #8494; CHECK-V7-FP: pop {r4, r5, r11, pc}495; CHECK-V7-FP: .fnend496 497; CHECK-V7-FP-ELIM-LABEL: test3:498; CHECK-V7-FP-ELIM: .fnstart499; CHECK-V7-FP-ELIM: .save {r4, r5, r11, lr}500; CHECK-V7-FP-ELIM: push {r4, r5, r11, lr}501; CHECK-V7-FP-ELIM: pop {r4, r5, r11, pc}502; CHECK-V7-FP-ELIM: .fnend503 504; DWARF-FP-LABEL: test3:505; DWARF-FP: .cfi_startproc506; DWARF-FP: push {r4, r5, r11, lr}507; DWARF-FP: .cfi_def_cfa_offset 16508; DWARF-FP: .cfi_offset lr, -4509; DWARF-FP: .cfi_offset r11, -8510; DWARF-FP: .cfi_offset r5, -12511; DWARF-FP: .cfi_offset r4, -16512; DWARF-FP: add r11, sp, #8513; DWARF-FP: .cfi_def_cfa r11, 8514; DWARF-FP: pop {r4, r5, r11, lr}515; DWARF-FP: mov pc, lr516; DWARF-FP: .cfi_endproc517 518; DWARF-FP-ELIM-LABEL: test3:519; DWARF-FP-ELIM: .cfi_startproc520; DWARF-FP-ELIM: push {r4, r5, r11, lr}521; DWARF-FP-ELIM: .cfi_def_cfa_offset 16522; DWARF-FP-ELIM: .cfi_offset lr, -4523; DWARF-FP-ELIM: .cfi_offset r11, -8524; DWARF-FP-ELIM: .cfi_offset r5, -12525; DWARF-FP-ELIM: .cfi_offset r4, -16526; DWARF-FP-ELIM: pop {r4, r5, r11, lr}527; DWARF-FP-ELIM: mov pc, lr528; DWARF-FP-ELIM: .cfi_endproc529 530; DWARF-V7-FP-LABEL: test3:531; DWARF-V7-FP: .cfi_startproc532; DWARF-V7-FP: push {r4, r5, r11, lr}533; DWARF-V7-FP: .cfi_def_cfa_offset 16534; DWARF-V7-FP: .cfi_offset lr, -4535; DWARF-V7-FP: .cfi_offset r11, -8536; DWARF-V7-FP: .cfi_offset r5, -12537; DWARF-V7-FP: .cfi_offset r4, -16538; DWARF-V7-FP: add r11, sp, #8539; DWARF-V7-FP: .cfi_def_cfa r11, 8540; DWARF-V7-FP: pop {r4, r5, r11, pc}541; DWARF-V7-FP: .cfi_endproc542 543; DWARF-V7-FP-ELIM-LABEL: test3:544; DWARF-V7-FP-ELIM: .cfi_startproc545; DWARF-V7-FP-ELIM: push {r4, r5, r11, lr}546; DWARF-V7-FP-ELIM: .cfi_def_cfa_offset 16547; DWARF-V7-FP-ELIM: .cfi_offset lr, -4548; DWARF-V7-FP-ELIM: .cfi_offset r11, -8549; DWARF-V7-FP-ELIM: .cfi_offset r5, -12550; DWARF-V7-FP-ELIM: .cfi_offset r4, -16551; DWARF-V7-FP-ELIM: pop {r4, r5, r11, pc}552; DWARF-V7-FP-ELIM: .cfi_endproc553 554; DWARF-WIN-FP-ELIM-LABEL: test3:555; DWARF-WIN-FP-ELIM: .cfi_startproc556; DWARF-WIN-FP-ELIM: push.w {r4, r5, r11, lr}557; DWARF-WIN-FP-ELIM: .cfi_def_cfa_offset 16558; DWARF-WIN-FP-ELIM: .cfi_offset lr, -4559; DWARF-WIN-FP-ELIM: .cfi_offset r11, -8560; DWARF-WIN-FP-ELIM: .cfi_offset r5, -12561; DWARF-WIN-FP-ELIM: .cfi_offset r4, -16562; DWARF-WIN-FP-ELIM: pop.w {r4, r5, r11, pc}563; DWARF-WIN-FP-ELIM: .cfi_endproc564 565; SEH-WIN-FP-ELIM-LABEL: test3:566; SEH-WIN-FP-ELIM: .seh_proc test3567; SEH-WIN-FP-ELIM: push.w {r4, r5, r11, lr}568; SEH-WIN-FP-ELIM: .seh_save_regs_w {r4-r5, r11, lr}569; SEH-WIN-FP-ELIM: .seh_endprologue570; SEH-WIN-FP-ELIM: .seh_startepilogue571; SEH-WIN-FP-ELIM: pop.w {r4, r5, r11, pc}572; SEH-WIN-FP-ELIM: .seh_save_regs_w {r4-r5, r11, lr}573; SEH-WIN-FP-ELIM: .seh_endepilogue574; SEH-WIN-FP-ELIM: .seh_endproc575 576 577;-------------------------------------------------------------------------------578; Test 4579;-------------------------------------------------------------------------------580 581define void @test4() nounwind "frame-pointer"="none" {582entry:583 ret void584}585 586; CHECK-FP-LABEL: test4:587; CHECK-FP: .fnstart588; CHECK-FP: mov pc, lr589; CHECK-FP: .cantunwind590; CHECK-FP: .fnend591 592; CHECK-FP-ELIM-LABEL: test4:593; CHECK-FP-ELIM: .fnstart594; CHECK-FP-ELIM: mov pc, lr595; CHECK-FP-ELIM: .cantunwind596; CHECK-FP-ELIM: .fnend597 598; CHECK-V7-FP-LABEL: test4:599; CHECK-V7-FP: .fnstart600; CHECK-V7-FP: bx lr601; CHECK-V7-FP: .cantunwind602; CHECK-V7-FP: .fnend603 604; CHECK-V7-FP-ELIM-LABEL: test4:605; CHECK-V7-FP-ELIM: .fnstart606; CHECK-V7-FP-ELIM: bx lr607; CHECK-V7-FP-ELIM: .cantunwind608; CHECK-V7-FP-ELIM: .fnend609 610; DWARF-FP-LABEL: test4:611; DWARF-FP-NOT: .cfi_startproc612; DWARF-FP: mov pc, lr613; DWARF-FP-NOT: .cfi_endproc614; DWARF-FP: .size test4,615 616; DWARF-FP-ELIM-LABEL: test4:617; DWARF-FP-ELIM-NOT: .cfi_startproc618; DWARF-FP-ELIM: mov pc, lr619; DWARF-FP-ELIM-NOT: .cfi_endproc620; DWARF-FP-ELIM: .size test4,621 622; DWARF-V7-FP-LABEL: test4:623; DWARF-V7-FP-NOT: .cfi_startproc624; DWARF-V7-FP: bx lr625; DWARF-V7-FP-NOT: .cfi_endproc626; DWARF-V7-FP: .size test4,627 628; DWARF-V7-FP-ELIM-LABEL: test4:629; DWARF-V7-FP-ELIM-NOT: .cfi_startproc630; DWARF-V7-FP-ELIM: bx lr631; DWARF-V7-FP-ELIM-NOT: .cfi_endproc632; DWARF-V7-FP-ELIM: .size test4,633 634; DWARF-WIN-FP-ELIM-LABEL: test4:635; DWARF-WIN-FP-ELIM-NOT: .cfi_startproc636; DWARF-WIN-FP-ELIM: bx lr637; DWARF-WIN-FP-ELIM-NOT: .cfi_endproc638 639; SEH-WIN-FP-ELIM-LABEL: test4:640; SEH-WIN-FP-ELIM-NOT: .seh_proc test4641; SEH-WIN-FP-ELIM: bx lr642; SEH-WIN-FP-ELIM-NOT: .seh_endproc643