;; Check that epilogues aren't tail merged. ;; Check that this produces the expected assembly output ; RUN: llc -mtriple=thumbv7-windows -o - %s -verify-machineinstrs | FileCheck %s ;; Also try to write an object file, which verifies that the SEH opcodes ;; match the actual prologue/epilogue length. ; RUN: llc -mtriple=thumbv7-windows -filetype=obj -o %t.obj %s -verify-machineinstrs ; CHECK-LABEL: d: ; CHECK: .seh_proc d ; CHECK: push.w {r11, lr} ; CHECK-NEXT: .seh_save_regs_w {r11, lr} ; CHECK-NEXT: .seh_endprologue ; CHECK: .seh_startepilogue ; CHECK-NEXT: pop.w {r11, lr} ; CHECK-NEXT: .seh_save_regs_w {r11, lr} ; CHECK-NEXT: b.w b ; CHECK-NEXT: .seh_nop_w ; CHECK-NEXT: .seh_endepilogue ; CHECK: .seh_startepilogue ; CHECK-NEXT: pop.w {r11, lr} ; CHECK-NEXT: .seh_save_regs_w {r11, lr} ; CHECK-NEXT: b.w c ; CHECK-NEXT: .seh_nop_w ; CHECK-NEXT: .seh_endepilogue ; CHECK-NEXT: .seh_endproc @a = global i32 0, align 4 define arm_aapcs_vfpcc void @d() optsize uwtable "frame-pointer"="none" { entry: %0 = load i32, ptr @a, align 4 switch i32 %0, label %if.then1 [ i32 10, label %if.then i32 0, label %if.end2 ] if.then: tail call arm_aapcs_vfpcc void @b() br label %return if.then1: tail call arm_aapcs_vfpcc void @b() br label %if.end2 if.end2: tail call arm_aapcs_vfpcc void @c() br label %return return: ret void } declare arm_aapcs_vfpcc void @b(...) declare arm_aapcs_vfpcc void @c(...)