More optimized memclear. Added helper function on array gep.

This commit is contained in:
Christoffer Lerno
2021-10-21 23:37:14 +02:00
parent b87e14cba8
commit 9942be54dc
18 changed files with 214 additions and 170 deletions

View File

@@ -25,21 +25,22 @@ func void test()
// #expect: union_codegen_empty.ll
%a = alloca %UnionA, align 4
%a2 = alloca %UnionA, align 4
%b = alloca %UnionB, align 8
%b2 = alloca %UnionB, align 8
%b3 = alloca %UnionB, align 8
%b4 = alloca %UnionB, align 8
%0 = bitcast %UnionA* %a to i8*
call void @llvm.memset.p0i8.i64(i8* align 4 %0, i8 0, i64 4, i1 false)
%1 = bitcast %UnionA* %a2 to i8*
call void @llvm.memset.p0i8.i64(i8* align 4 %1, i8 0, i64 4, i1 false)
%2 = bitcast %UnionB* %b to i8*
call void @llvm.memset.p0i8.i64(i8* align 8 %2, i8 0, i64 8, i1 false)
%3 = bitcast %UnionB* %b2 to i8*
call void @llvm.memset.p0i8.i64(i8* align 8 %3, i8 0, i64 8, i1 false)
%4 = bitcast %UnionB* %b3 to i8*
call void @llvm.memset.p0i8.i64(i8* align 8 %4, i8 0, i64 8, i1 false)
%5 = bitcast %UnionB* %b4 to i8*
call void @llvm.memset.p0i8.i64(i8* align 8 %5, i8 0, i64 8, i1 false)
%a = alloca %UnionA, align 4
%a2 = alloca %UnionA, align 4
%b = alloca %UnionB, align 8
%b2 = alloca %UnionB, align 8
%b3 = alloca %UnionB, align 8
%b4 = alloca %UnionB, align 8
%0 = bitcast %UnionA* %a to i32*
store i32 0, i32* %0, align 4
%1 = bitcast %UnionA* %a2 to i32*
store i32 0, i32* %1, align 4
%2 = bitcast %UnionB* %b to i8*
call void @llvm.memset.p0i8.i64(i8* align 8 %2, i8 0, i64 8, i1 false)
%3 = bitcast %UnionB* %b2 to i8*
call void @llvm.memset.p0i8.i64(i8* align 8 %3, i8 0, i64 8, i1 false)
%4 = bitcast %UnionB* %b3 to i8*
call void @llvm.memset.p0i8.i64(i8* align 8 %4, i8 0, i64 8, i1 false)
%5 = bitcast %UnionB* %b4 to i8*
call void @llvm.memset.p0i8.i64(i8* align 8 %5, i8 0, i64 8, i1 false)
ret void

View File

@@ -20,12 +20,12 @@ func void test()
// #expect: test.ll
entry:
%b = alloca %UnionB, align 8
%0 = bitcast %UnionB* %b to i32*
%1 = call i32 @bar()
store i32 %1, i32* %0, align 8
%2 = bitcast %UnionB* %b to %b*
%3 = bitcast %b* %2 to i8*
call void @llvm.memset.p0i8.i64(i8* align 8 %3, i8 0, i64 4, i1 false)
ret void
%b = alloca %UnionB, align 8
%0 = bitcast %UnionB* %b to i32*
%1 = call i32 @bar()
store i32 %1, i32* %0, align 8
%2 = bitcast %UnionB* %b to %b*
%3 = bitcast %b* %2 to i32*
store i32 0, i32* %3, align 8
ret void