1*d8e67c1cSMartin Storsjö;; Check that epilogues aren't tail merged. 2*d8e67c1cSMartin Storsjö 3*d8e67c1cSMartin Storsjö;; Check that this produces the expected assembly output 4*d8e67c1cSMartin Storsjö; RUN: llc -mtriple=thumbv7-windows -o - %s -verify-machineinstrs | FileCheck %s 5*d8e67c1cSMartin Storsjö;; Also try to write an object file, which verifies that the SEH opcodes 6*d8e67c1cSMartin Storsjö;; match the actual prologue/epilogue length. 7*d8e67c1cSMartin Storsjö; RUN: llc -mtriple=thumbv7-windows -filetype=obj -o %t.obj %s -verify-machineinstrs 8*d8e67c1cSMartin Storsjö 9*d8e67c1cSMartin Storsjö; CHECK-LABEL: d: 10*d8e67c1cSMartin Storsjö; CHECK: .seh_proc d 11*d8e67c1cSMartin Storsjö 12*d8e67c1cSMartin Storsjö; CHECK: push.w {r11, lr} 13*d8e67c1cSMartin Storsjö; CHECK-NEXT: .seh_save_regs_w {r11, lr} 14*d8e67c1cSMartin Storsjö; CHECK-NEXT: .seh_endprologue 15*d8e67c1cSMartin Storsjö 16*d8e67c1cSMartin Storsjö; CHECK: .seh_startepilogue 17*d8e67c1cSMartin Storsjö; CHECK-NEXT: pop.w {r11, lr} 18*d8e67c1cSMartin Storsjö; CHECK-NEXT: .seh_save_regs_w {r11, lr} 19*d8e67c1cSMartin Storsjö; CHECK-NEXT: b.w b 20*d8e67c1cSMartin Storsjö; CHECK-NEXT: .seh_nop_w 21*d8e67c1cSMartin Storsjö; CHECK-NEXT: .seh_endepilogue 22*d8e67c1cSMartin Storsjö 23*d8e67c1cSMartin Storsjö; CHECK: .seh_startepilogue 24*d8e67c1cSMartin Storsjö; CHECK-NEXT: pop.w {r11, lr} 25*d8e67c1cSMartin Storsjö; CHECK-NEXT: .seh_save_regs_w {r11, lr} 26*d8e67c1cSMartin Storsjö; CHECK-NEXT: b.w c 27*d8e67c1cSMartin Storsjö; CHECK-NEXT: .seh_nop_w 28*d8e67c1cSMartin Storsjö; CHECK-NEXT: .seh_endepilogue 29*d8e67c1cSMartin Storsjö; CHECK-NEXT: .seh_endproc 30*d8e67c1cSMartin Storsjö 31*d8e67c1cSMartin Storsjö@a = global i32 0, align 4 32*d8e67c1cSMartin Storsjö 33*d8e67c1cSMartin Storsjödefine arm_aapcs_vfpcc void @d() optsize uwtable "frame-pointer"="none" { 34*d8e67c1cSMartin Storsjöentry: 35*d8e67c1cSMartin Storsjö %0 = load i32, ptr @a, align 4 36*d8e67c1cSMartin Storsjö switch i32 %0, label %if.then1 [ 37*d8e67c1cSMartin Storsjö i32 10, label %if.then 38*d8e67c1cSMartin Storsjö i32 0, label %if.end2 39*d8e67c1cSMartin Storsjö ] 40*d8e67c1cSMartin Storsjö 41*d8e67c1cSMartin Storsjöif.then: 42*d8e67c1cSMartin Storsjö tail call arm_aapcs_vfpcc void @b() 43*d8e67c1cSMartin Storsjö br label %return 44*d8e67c1cSMartin Storsjö 45*d8e67c1cSMartin Storsjöif.then1: 46*d8e67c1cSMartin Storsjö tail call arm_aapcs_vfpcc void @b() 47*d8e67c1cSMartin Storsjö br label %if.end2 48*d8e67c1cSMartin Storsjö 49*d8e67c1cSMartin Storsjöif.end2: 50*d8e67c1cSMartin Storsjö tail call arm_aapcs_vfpcc void @c() 51*d8e67c1cSMartin Storsjö br label %return 52*d8e67c1cSMartin Storsjö 53*d8e67c1cSMartin Storsjöreturn: 54*d8e67c1cSMartin Storsjö ret void 55*d8e67c1cSMartin Storsjö} 56*d8e67c1cSMartin Storsjö 57*d8e67c1cSMartin Storsjödeclare arm_aapcs_vfpcc void @b(...) 58*d8e67c1cSMartin Storsjö 59*d8e67c1cSMartin Storsjödeclare arm_aapcs_vfpcc void @c(...) 60