brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.5 KiB · 1719700 Raw
177 lines · plain
1;; Check that this produces the expected assembly output2; RUN: llc -mtriple=thumbv7-windows -o - %s -verify-machineinstrs | FileCheck %s3;; Also try to write an object file, which verifies that the SEH opcodes4;; match the actual prologue/epilogue length.5; RUN: llc -mtriple=thumbv7-windows -filetype=obj -o %t.obj %s -verify-machineinstrs6 7; CHECK-LABEL: alloc_local:8; CHECK-NEXT: .seh_proc alloc_local9; CHECK-NEXT: @ %bb.0:                                @ %entry10; 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, #413; CHECK-NEXT:         .seh_stackalloc 414; 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, sp19; CHECK-NEXT:         .seh_save_sp    r1120; CHECK-NEXT:         .seh_endprologue21; CHECK-NEXT:         movw    r4, #125622; CHECK-NEXT:         bl      __chkstk23; CHECK-NEXT:         sub.w   sp, sp, r424; CHECK-NEXT:         mov     r4, sp25; CHECK-NEXT:         bfc     r4, #0, #426; CHECK-NEXT:         mov     sp, r427 28; CHECK:              ldr.w   [[TMP:r[0-9]]], [r11, #104]29; CHECK:              mov     r0, [[TMP]]30 31; CHECK:              .seh_startepilogue32; CHECK-NEXT:         mov     sp, r1133; CHECK-NEXT:         .seh_save_sp    r1134; 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, #439; CHECK-NEXT:         .seh_stackalloc 440; CHECK-NEXT:         pop.w   {r4, r5, r6, r7, r8, r9, r10}41; CHECK-NEXT:         .seh_save_regs_w        {r4-r10}42; CHECK-NEXT:         bx      lr43; CHECK-NEXT:         .seh_nop44; CHECK-NEXT:         .seh_endepilogue45; CHECK-NEXT:         .seh_endproc46 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 1650  %vla = alloca i8, i32 %a, align 151  call void @llvm.lifetime.start.p0(i64 5000, ptr nonnull %buf2) #352  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) #356  ret void57}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 64; CHECK-LABEL: everything_varargs:65; CHECK-NEXT: .seh_proc everything_varargs66; CHECK-NEXT: @ %bb.0:                                @ %entry67; CHECK-NEXT:         sub     sp, #1268; CHECK-NEXT:         .seh_stackalloc 1269; CHECK-NEXT:         push.w  {r4, r5, r6, r7, r8, r9}70; CHECK-NEXT:         .seh_save_regs_w        {r4-r9}71; CHECK-NEXT:         sub     sp, #472; CHECK-NEXT:         .seh_stackalloc 473; CHECK-NEXT:         vpush   {d8, d9, d10, d11, d12, d13, d14, d15}74; CHECK-NEXT:         .seh_save_fregs         {d8-d15}75; CHECK-NEXT:         push.w  {r11, lr}76; CHECK-NEXT:         .seh_save_regs_w        {r11, lr}77; CHECK-NEXT:         mov     r11, sp78; CHECK-NEXT:         .seh_save_sp    r1179; CHECK-NEXT:         .seh_endprologue80; CHECK-NEXT:         movw    r4, #125881; CHECK-NEXT:         bl      __chkstk82; CHECK-NEXT:         sub.w   sp, sp, r483; CHECK-NEXT:         mov     r4, sp84; CHECK-NEXT:         bfc     r4, #0, #485; CHECK-NEXT:         mov     sp, r486 87; CHECK:              .seh_startepilogue88; CHECK-NEXT:         mov     sp, r1189; CHECK-NEXT:         .seh_save_sp    r1190; CHECK-NEXT:         pop.w   {r11, lr}91; CHECK-NEXT:         .seh_save_regs_w        {r11, lr}92; CHECK-NEXT:         vpop    {d8, d9, d10, d11, d12, d13, d14, d15}93; CHECK-NEXT:         .seh_save_fregs         {d8-d15}94; CHECK-NEXT:         add     sp, #495; CHECK-NEXT:         .seh_stackalloc 496; CHECK-NEXT:         pop.w   {r4, r5, r6, r7, r8, r9}97; CHECK-NEXT:         .seh_save_regs_w        {r4-r9}98; CHECK-NEXT:         add     sp, #1299; CHECK-NEXT:         .seh_stackalloc 12100; CHECK-NEXT:         bx      lr101; CHECK-NEXT:         .seh_nop102; CHECK-NEXT:         .seh_endepilogue103; CHECK-NEXT:         .seh_endproc104 105define arm_aapcs_vfpcc void @everything_varargs(i32 noundef %a, ...) {106entry:107  %buf2 = alloca [5000 x i8], align 16108  %ap = alloca ptr, align 4109  %vla = alloca i8, i32 %a, align 1110  call void @llvm.lifetime.start.p0(i64 5000, ptr nonnull %buf2)111  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %ap)112  call void @llvm.va_start(ptr nonnull %ap)113  %0 = load ptr, ptr %ap, align 4114  call arm_aapcs_vfpcc void @other2(i32 noundef %a, ptr noundef nonnull %vla, ptr noundef nonnull %buf2, ptr noundef %0)115  call void @llvm.va_end(ptr nonnull %ap)116  call void asm sideeffect "", "~{r4},~{r5},~{r6},~{r7},~{r8},~{r9},~{r11},~{r12}"()117  call void asm sideeffect "", "~{d8},~{d9},~{d10},~{d11},~{d12},~{d13},~{d14},~{d15}"()118  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %ap)119  call void @llvm.lifetime.end.p0(i64 5000, ptr nonnull %buf2)120  ret void121}122 123; CHECK-LABEL: novector_varargs:124; CHECK-NEXT: .seh_proc novector_varargs125; CHECK-NEXT: @ %bb.0:                                @ %entry126; CHECK-NEXT:         sub     sp, #12127; CHECK-NEXT:         .seh_stackalloc 12128; CHECK-NEXT:         push.w  {r4, r5, r6, r7, r8, r9}129; CHECK-NEXT:         .seh_save_regs_w        {r4-r9}130; CHECK-NEXT:         push.w  {r11, lr}131; CHECK-NEXT:         .seh_save_regs_w        {r11, lr}132; CHECK-NEXT:         mov     r11, sp133; CHECK-NEXT:         .seh_save_sp    r11134; CHECK-NEXT:         .seh_endprologue135; CHECK-NEXT:         movw    r4, #1259136; CHECK-NEXT:         bl      __chkstk137; CHECK-NEXT:         sub.w   sp, sp, r4138; CHECK-NEXT:         mov     r4, sp139; CHECK-NEXT:         bfc     r4, #0, #4140; CHECK-NEXT:         mov     sp, r4141 142; CHECK:              .seh_startepilogue143; CHECK-NEXT:         mov     sp, r11144; CHECK-NEXT:         .seh_save_sp    r11145; CHECK-NEXT:         pop.w   {r11, lr}146; CHECK-NEXT:         .seh_save_regs_w        {r11, lr}147; CHECK-NEXT:         pop.w   {r4, r5, r6, r7, r8, r9}148; CHECK-NEXT:         .seh_save_regs_w        {r4-r9}149; CHECK-NEXT:         add     sp, #12150; CHECK-NEXT:         .seh_stackalloc 12151; CHECK-NEXT:         bx      lr152; CHECK-NEXT:         .seh_nop153; CHECK-NEXT:         .seh_endepilogue154; CHECK-NEXT:         .seh_endproc155 156define arm_aapcs_vfpcc void @novector_varargs(i32 noundef %a, ...) {157entry:158  %buf2 = alloca [5000 x i8], align 16159  %ap = alloca ptr, align 4160  %vla = alloca i8, i32 %a, align 1161  call void @llvm.lifetime.start.p0(i64 5000, ptr nonnull %buf2)162  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %ap)163  call void @llvm.va_start(ptr nonnull %ap)164  %0 = load ptr, ptr %ap, align 4165  call arm_aapcs_vfpcc void @other2(i32 noundef %a, ptr noundef nonnull %vla, ptr noundef nonnull %buf2, ptr noundef %0)166  call void @llvm.va_end(ptr nonnull %ap)167  call void asm sideeffect "", "~{r4},~{r5},~{r6},~{r7},~{r8},~{r9},~{r11},~{r12}"()168  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %ap)169  call void @llvm.lifetime.end.p0(i64 5000, ptr nonnull %buf2)170  ret void171}172 173declare void @llvm.va_start(ptr)174declare void @llvm.va_end(ptr)175 176declare arm_aapcs_vfpcc void @other2(i32 noundef, ptr noundef, ptr noundef, ptr noundef)177