1;; Check that this produces the expected assembly output 2; RUN: llc -mtriple=thumbv7-windows -o - %s -verify-machineinstrs | FileCheck %s 3;; Also try to write an object file, which verifies that the SEH opcodes 4;; match the actual prologue/epilogue length. 5; RUN: llc -mtriple=thumbv7-windows -filetype=obj -o %t.obj %s -verify-machineinstrs 6 7; CHECK-LABEL: alloc_local: 8; CHECK-NEXT: .seh_proc alloc_local 9; CHECK-NEXT: @ %bb.0: @ %entry 10; CHECK-NEXT: push.w {r4, r5, r6, r7, r8, r9, r10} 11; CHECK-NEXT: .seh_save_regs_w {r4-r10} 12; CHECK-NEXT: sub sp, #4 13; CHECK-NEXT: .seh_stackalloc 4 14; CHECK-NEXT: vpush {d8, d9, d10, d11, d12, d13, d14, d15} 15; CHECK-NEXT: .seh_save_fregs {d8-d15} 16; CHECK-NEXT: push.w {r11, lr} 17; CHECK-NEXT: .seh_save_regs_w {r11, lr} 18; CHECK-NEXT: mov r11, sp 19; CHECK-NEXT: .seh_save_sp r11 20; CHECK-NEXT: .seh_endprologue 21; CHECK-NEXT: movw r4, #1256 22; CHECK-NEXT: bl __chkstk 23; CHECK-NEXT: sub.w sp, sp, r4 24; CHECK-NEXT: mov r4, sp 25; CHECK-NEXT: bfc r4, #0, #4 26; CHECK-NEXT: mov sp, r4 27 28; CHECK: ldr.w [[TMP:r[0-9]]], [r11, #104] 29; CHECK: mov r0, [[TMP]] 30 31; CHECK: .seh_startepilogue 32; CHECK-NEXT: mov sp, r11 33; CHECK-NEXT: .seh_save_sp r11 34; CHECK-NEXT: pop.w {r11, lr} 35; CHECK-NEXT: .seh_save_regs_w {r11, lr} 36; CHECK-NEXT: vpop {d8, d9, d10, d11, d12, d13, d14, d15} 37; CHECK-NEXT: .seh_save_fregs {d8-d15} 38; CHECK-NEXT: add sp, #4 39; CHECK-NEXT: .seh_stackalloc 4 40; CHECK-NEXT: pop.w {r4, r5, r6, r7, r8, r9, r10} 41; CHECK-NEXT: .seh_save_regs_w {r4-r10} 42; CHECK-NEXT: bx lr 43; CHECK-NEXT: .seh_nop 44; CHECK-NEXT: .seh_endepilogue 45; CHECK-NEXT: .seh_endproc 46 47define arm_aapcs_vfpcc void @alloc_local(i32 noundef %a, i32 noundef %b, i32 noundef %c, i32 noundef %d, i32 noundef %e) uwtable { 48entry: 49 %buf2 = alloca [5000 x i8], align 16 50 %vla = alloca i8, i32 %a, align 1 51 call void @llvm.lifetime.start.p0(i64 5000, ptr nonnull %buf2) #3 52 call arm_aapcs_vfpcc void @other(i32 noundef %e, ptr noundef nonnull %vla, ptr noundef nonnull %buf2) 53 call void asm sideeffect "", "~{r4},~{r5},~{r6},~{r7},~{r8},~{r9},~{r10},~{r11},~{r12}"() 54 call void asm sideeffect "", "~{d8},~{d9},~{d10},~{d11},~{d12},~{d13},~{d14},~{d15}"() 55 call void @llvm.lifetime.end.p0(i64 5000, ptr nonnull %buf2) #3 56 ret void 57} 58 59declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) 60declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) 61 62declare arm_aapcs_vfpcc void @other(i32 noundef, ptr noundef, ptr noundef) 63