Files
c3c/test/test_suite/abi/aarch64_args.c3t

34 lines
926 B
C

// #target: macos-aarch64
module test;
struct Large {
void*[8] pointers;
}
extern fn void pass_large(Large);
fn void example() {
Large l = {};
pass_large(l);
pass_large(l);
}
/* #expect: test.ll
define void @test.example() #0 {
entry:
%l = alloca %Large, align 8
%indirectarg = alloca %Large, align 8
%indirectarg1 = alloca %Large, align 8
%0 = bitcast %Large* %l to i8*
call void @llvm.memset.p0i8.i64(i8* align 8 %0, i8 0, i64 64, i1 false)
%1 = bitcast %Large* %indirectarg to i8*
%2 = bitcast %Large* %l to i8*
call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 8 %1, i8* align 8 %2, i32 64, i1 false)
call void @pass_large(%Large* align 8 %indirectarg)
%3 = bitcast %Large* %indirectarg1 to i8*
%4 = bitcast %Large* %l to i8*
call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 8 %3, i8* align 8 %4, i32 64, i1 false)
call void @pass_large(%Large* align 8 %indirectarg1)
ret void
}