mirror of
https://github.com/c3lang/c3c.git
synced 2026-02-27 12:01:16 +00:00
38 lines
950 B
C
38 lines
950 B
C
// #target: aarch64-linux
|
|
|
|
module pass_large;
|
|
|
|
|
|
struct Large
|
|
{
|
|
void*[8] pointers;
|
|
}
|
|
|
|
extern func void pass_large(Large large);
|
|
|
|
func 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
|
|
%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
|