// #target: linux-aarch64

module pass_large;


struct Large
{
    void*[8] pointers;
}

extern fn void pass_large(Large large);

fn void example()
{
    Large l = {};
    pass_large(l);
    pass_large(l);
}

/* #expect: pass_large.ll

define void @pass_large.example()
entry:
  %l = alloca %Large, align 8
  %indirectarg = alloca %Large, align 8
  %indirectarg1 = alloca %Large, align 8
  call void @llvm.memset.p0.i64(ptr align 8 %l, i8 0, i64 64, i1 false)
  call void @llvm.memcpy.p0.p0.i32(ptr align 8 %indirectarg, ptr align 8 %l, i32 64, i1 false)
  call void @pass_large(ptr align 8 %indirectarg)
  call void @llvm.memcpy.p0.p0.i32(ptr align 8 %indirectarg1, ptr align 8 %l, i32 64, i1 false)
  call void @pass_large(ptr align 8 %indirectarg1)
  ret void
