Fix to macro codegen.

This commit is contained in:
Christoffer Lerno
2023-07-18 22:28:43 +02:00
committed by Christoffer Lerno
parent 4dcfb7a675
commit 5a2fe4c9d9
25 changed files with 1161 additions and 1390 deletions

View File

@@ -32,12 +32,14 @@ declare i32 @sum_us(ptr, i64) #0
%4 = insertvalue %"int[]" undef, ptr %x, 0
%5 = insertvalue %"int[]" %4, i64 3, 1
store %"int[]" %5, ptr %z, align 8
%6 = call i32 @sum_us(ptr %x, i64 3)
%7 = getelementptr inbounds %"int[]", ptr %z, i32 0, i32 0
%lo = load ptr, ptr %7, align 8
%8 = getelementptr inbounds %"int[]", ptr %z, i32 0, i32 1
%hi = load i64, ptr %8, align 8
%9 = call i32 @sum_us(ptr %lo, i64 %hi)
%10 = call i32 @sum_us(ptr null, i64 0)
%6 = insertvalue %"int[]" undef, ptr %x, 0
%7 = insertvalue %"int[]" %6, i64 3, 1
%8 = call i32 @sum_us(ptr %x, i64 3)
%9 = getelementptr inbounds %"int[]", ptr %z, i32 0, i32 0
%lo = load ptr, ptr %9, align 8
%10 = getelementptr inbounds %"int[]", ptr %z, i32 0, i32 1
%hi = load i64, ptr %10, align 8
%11 = call i32 @sum_us(ptr %lo, i64 %hi)
%12 = call i32 @sum_us(ptr null, i64 0)
ret void
}

View File

@@ -35,23 +35,23 @@ entry:
%2 = getelementptr inbounds [3 x i32], ptr %varargslots, i64 0, i64 2
store i32 3, ptr %2, align 4
%3 = insertvalue %"int[]" undef, ptr %varargslots, 0
%4 = insertvalue %"int[]" %3, i64 3, 1
store %"int[]" %4, ptr %taddr, align 8
%5 = load [2 x i64], ptr %taddr, align 8
%6 = call i32 @sum_us([2 x i64] %5)
%"#temp#" = insertvalue %"int[]" %3, i64 3, 1
store %"int[]" %"#temp#", ptr %taddr, align 8
%4 = load [2 x i64], ptr %taddr, align 8
%5 = call i32 @sum_us([2 x i64] %4)
call void @llvm.memcpy.p0.p0.i32(ptr align 4 %x, ptr align 4 @.__const, i32 12, i1 false)
%7 = insertvalue %"int[]" undef, ptr %x, 0
%8 = insertvalue %"int[]" %7, i64 3, 1
store %"int[]" %8, ptr %z, align 8
%9 = insertvalue %"int[]" undef, ptr %x, 0
%10 = insertvalue %"int[]" %9, i64 3, 1
store %"int[]" %10, ptr %taddr1, align 8
%11 = load [2 x i64], ptr %taddr1, align 8
%12 = call i32 @sum_us([2 x i64] %11)
%13 = load [2 x i64], ptr %z, align 8
%14 = call i32 @sum_us([2 x i64] %13)
%6 = insertvalue %"int[]" undef, ptr %x, 0
%7 = insertvalue %"int[]" %6, i64 3, 1
store %"int[]" %7, ptr %z, align 8
%8 = insertvalue %"int[]" undef, ptr %x, 0
%9 = insertvalue %"int[]" %8, i64 3, 1
store %"int[]" %9, ptr %taddr1, align 8
%10 = load [2 x i64], ptr %taddr1, align 8
%11 = call i32 @sum_us([2 x i64] %10)
%12 = load [2 x i64], ptr %z, align 8
%13 = call i32 @sum_us([2 x i64] %12)
store %"int[]" zeroinitializer, ptr %taddr2, align 8
%15 = load [2 x i64], ptr %taddr2, align 8
%16 = call i32 @sum_us([2 x i64] %15)
%14 = load [2 x i64], ptr %taddr2, align 8
%15 = call i32 @sum_us([2 x i64] %14)
ret void
}

View File

@@ -33,19 +33,19 @@ entry:
%2 = getelementptr inbounds [3 x i32], ptr %varargslots, i64 0, i64 2
store i32 3, ptr %2, align 4
%3 = insertvalue %"int[]" undef, ptr %varargslots, 0
%4 = insertvalue %"int[]" %3, i64 3, 1
store %"int[]" %4, ptr %indirectarg, align 8
%5 = call i32 @sum_us(ptr align 8 %indirectarg)
%"#temp#" = insertvalue %"int[]" %3, i64 3, 1
store %"int[]" %"#temp#", ptr %indirectarg, align 8
%4 = call i32 @sum_us(ptr align 8 %indirectarg)
call void @llvm.memcpy.p0.p0.i32(ptr align 4 %x, ptr align 4 @.__const, i32 12, i1 false)
%6 = insertvalue %"int[]" undef, ptr %x, 0
%7 = insertvalue %"int[]" %6, i64 3, 1
store %"int[]" %7, ptr %z, align 8
%8 = insertvalue %"int[]" undef, ptr %x, 0
%9 = insertvalue %"int[]" %8, i64 3, 1
store %"int[]" %9, ptr %indirectarg1, align 8
%10 = call i32 @sum_us(ptr align 8 %indirectarg1)
%5 = insertvalue %"int[]" undef, ptr %x, 0
%6 = insertvalue %"int[]" %5, i64 3, 1
store %"int[]" %6, ptr %z, align 8
%7 = insertvalue %"int[]" undef, ptr %x, 0
%8 = insertvalue %"int[]" %7, i64 3, 1
store %"int[]" %8, ptr %indirectarg1, align 8
%9 = call i32 @sum_us(ptr align 8 %indirectarg1)
call void @llvm.memcpy.p0.p0.i32(ptr align 8 %indirectarg2, ptr align 8 %z, i32 16, i1 false)
%11 = call i32 @sum_us(ptr align 8 %indirectarg2)
%10 = call i32 @sum_us(ptr align 8 %indirectarg2)
store %"int[]" zeroinitializer, ptr %indirectarg3, align 8
%12 = call i32 @sum_us(ptr align 8 %indirectarg3)
%11 = call i32 @sum_us(ptr align 8 %indirectarg3)
ret void

View File

@@ -355,12 +355,14 @@ if.exit: ; preds = %entry
%11 = add i64 %sub, 1
%size = sub i64 %11, 1
%ptroffset2 = getelementptr inbounds i32, ptr %9, i64 1
%12 = call i32 @test.sum_us(ptr %ptroffset2, i64 %size)
%add = add i32 %7, %12
%12 = insertvalue %"int[]" undef, ptr %ptroffset2, 0
%13 = insertvalue %"int[]" %12, i64 %size, 1
%14 = call i32 @test.sum_us(ptr %ptroffset2, i64 %size)
%add = add i32 %7, %14
%add3 = add i32 %4, %add
store i32 %add3, ptr %sum, align 4
%13 = load i32, ptr %sum, align 4
ret i32 %13
%15 = load i32, ptr %sum, align 4
ret i32 %15
}
; Function Attrs: nounwind
@@ -470,7 +472,7 @@ loop.exit: ; preds = %loop.cond
loop.cond2: ; preds = %loop.body5, %loop.exit
%12 = load i32, ptr %i1, align 4
%13 = call i64 @"std.collections.list$int$.List.len"(ptr %array)
%13 = call i64 @"std.collections.list$int$.List.len"(ptr %array) #3
%trunc3 = trunc i64 %13 to i32
%lt4 = icmp slt i32 %12, %trunc3
br i1 %lt4, label %loop.body5, label %loop.exit8
@@ -479,7 +481,7 @@ loop.body5: ; preds = %loop.cond2
%14 = load i32, ptr %i1, align 4
%15 = load i32, ptr %i1, align 4
%sext6 = sext i32 %15 to i64
%16 = call i32 @"std.collections.list$int$.List.get"(ptr %array, i64 %sext6)
%16 = call i32 @"std.collections.list$int$.List.get"(ptr %array, i64 %sext6) #3
%17 = call i32 (ptr, ...) @printf(ptr @.str.5, i32 %14, i32 %16)
%18 = load i32, ptr %i1, align 4
%add7 = add i32 %18, 1
@@ -508,40 +510,44 @@ loop.exit8: ; preds = %loop.cond2
store i32 3, ptr %fro, align 4
call void @llvm.memcpy.p0.p0.i32(ptr align 16 %x, ptr align 16 @.__const.12, i32 16, i1 false)
%31 = load i32, ptr %fro, align 4
%32 = call i32 @test.sum_us(ptr %x, i64 4)
%33 = call i32 (ptr, ...) @printf(ptr @.str.13, i32 %32)
%add9 = add i32 %31, %33
%32 = insertvalue %"int[]" undef, ptr %x, 0
%33 = insertvalue %"int[]" %32, i64 4, 1
%34 = call i32 @test.sum_us(ptr %x, i64 4)
%35 = call i32 (ptr, ...) @printf(ptr @.str.13, i32 %34)
%add9 = add i32 %31, %35
store i32 %add9, ptr %fro, align 4
%34 = load i32, ptr %fro, align 4
%35 = call i32 (ptr, ...) @printf(ptr @.str.14, i32 %34)
%36 = insertvalue %"int[]" undef, ptr %x, 0
%37 = insertvalue %"int[]" %36, i64 4, 1
store %"int[]" %37, ptr %z, align 8
%36 = load i32, ptr %fro, align 4
%37 = call i32 (ptr, ...) @printf(ptr @.str.14, i32 %36)
%38 = insertvalue %"int[]" undef, ptr %x, 0
%39 = insertvalue %"int[]" %38, i64 4, 1
store %"int[]" %39, ptr %z, align 8
call void @llvm.memcpy.p0.p0.i32(ptr align 4 %de, ptr align 4 @.__const.15, i32 12, i1 false)
%38 = call i32 @test.sum_us(ptr %x, i64 4)
%39 = call i32 (ptr, ...) @printf(ptr @.str.16, i32 %38)
%40 = getelementptr inbounds %"int[]", ptr %z, i32 0, i32 0
%lo = load ptr, ptr %40, align 8
%41 = getelementptr inbounds %"int[]", ptr %z, i32 0, i32 1
%hi = load i64, ptr %41, align 8
%42 = call i32 @test.sum_us(ptr %lo, i64 %hi)
%43 = call i32 (ptr, ...) @printf(ptr @.str.17, i32 %42)
%44 = getelementptr inbounds [4 x i32], ptr %varargslots, i64 0, i64 0
store i32 1, ptr %44, align 4
%45 = getelementptr inbounds [4 x i32], ptr %varargslots, i64 0, i64 1
store i32 2, ptr %45, align 4
%46 = getelementptr inbounds [4 x i32], ptr %varargslots, i64 0, i64 2
store i32 4, ptr %46, align 4
%47 = getelementptr inbounds [4 x i32], ptr %varargslots, i64 0, i64 3
store i32 5, ptr %47, align 4
%48 = call i32 @test.sum_us(ptr %varargslots, i64 4)
%49 = call i32 (ptr, ...) @printf(ptr @.str.18, i32 %48)
%50 = getelementptr inbounds [1 x i32], ptr %varargslots10, i64 0, i64 0
store i32 1, ptr %50, align 4
%51 = call i32 @test.sum_us(ptr %varargslots10, i64 1)
%52 = call i32 (ptr, ...) @printf(ptr @.str.19, i32 %51)
%53 = call i32 @test.sum_us(ptr null, i64 0)
%54 = call i32 (ptr, ...) @printf(ptr @.str.20, i32 %53)
%40 = insertvalue %"int[]" undef, ptr %x, 0
%41 = insertvalue %"int[]" %40, i64 4, 1
%42 = call i32 @test.sum_us(ptr %x, i64 4)
%43 = call i32 (ptr, ...) @printf(ptr @.str.16, i32 %42)
%44 = getelementptr inbounds %"int[]", ptr %z, i32 0, i32 0
%lo = load ptr, ptr %44, align 8
%45 = getelementptr inbounds %"int[]", ptr %z, i32 0, i32 1
%hi = load i64, ptr %45, align 8
%46 = call i32 @test.sum_us(ptr %lo, i64 %hi)
%47 = call i32 (ptr, ...) @printf(ptr @.str.17, i32 %46)
%48 = getelementptr inbounds [4 x i32], ptr %varargslots, i64 0, i64 0
store i32 1, ptr %48, align 4
%49 = getelementptr inbounds [4 x i32], ptr %varargslots, i64 0, i64 1
store i32 2, ptr %49, align 4
%50 = getelementptr inbounds [4 x i32], ptr %varargslots, i64 0, i64 2
store i32 4, ptr %50, align 4
%51 = getelementptr inbounds [4 x i32], ptr %varargslots, i64 0, i64 3
store i32 5, ptr %51, align 4
%52 = call i32 @test.sum_us(ptr %varargslots, i64 4)
%53 = call i32 (ptr, ...) @printf(ptr @.str.18, i32 %52)
%54 = getelementptr inbounds [1 x i32], ptr %varargslots10, i64 0, i64 0
store i32 1, ptr %54, align 4
%55 = call i32 @test.sum_us(ptr %varargslots10, i64 1)
%56 = call i32 (ptr, ...) @printf(ptr @.str.19, i32 %55)
%57 = call i32 @test.sum_us(ptr null, i64 0)
%58 = call i32 (ptr, ...) @printf(ptr @.str.20, i32 %57)
store ptr null, ptr %a1, align 8
store ptr null, ptr %b2, align 8
ret void

View File

@@ -244,13 +244,21 @@ fn Type getValue(Blob blob)
%LinkedList = type { ptr, i64, ptr, ptr }
%List = type { i64, i64, ptr, ptr }
%Foo = type { i32, i32 }
$"$ct.test.Bobo" = comdat any
$"$ct.test.Blob" = comdat any
$"$ct.test.Foor" = comdat any
$"$ct.test.Foo2" = comdat any
$"$ct.test.Foo" = comdat any
$"$ct.int" = comdat any
$"$ct.test.MyEnum" = comdat any
@"$ct.test.Bobo" = linkonce global %.introspect { i8 10, ptr null, i64 20, i64 0, i64 6, [0 x i64] zeroinitializer }, comdat, align 8
@"$ct.test.Blob" = linkonce global %.introspect { i8 10, ptr null, i64 8, i64 0, i64 2, [0 x i64] zeroinitializer }, comdat, align 8
@"$ct.test.Foor" = linkonce global %.introspect { i8 11, ptr null, i64 16, i64 0, i64 2, [0 x i64] zeroinitializer }, comdat, align 8
@@ -283,6 +291,7 @@ $"$ct.test.MyEnum" = comdat any
@.str.20 = private unnamed_addr constant [13 x i8] c"Vararg0: %d\0A\00", align 1
@.str.21 = private unnamed_addr constant [12 x i8] c"Foo is: %d\0A\00", align 1
@.str.22 = private unnamed_addr constant [9 x i8] c"Mutating\00", align 1
; Function Attrs: nounwind
define void @test.Foo2.printme(ptr %0) #0 {
entry:
@@ -291,6 +300,7 @@ entry:
%3 = call i32 (ptr, ...) @printf(ptr @.str.21, i32 %2)
ret void
}
; Function Attrs: nounwind
define i32 @test.Foo2.mutate(ptr %0) #0 {
entry:
@@ -301,14 +311,17 @@ entry:
store i32 %add, ptr %2, align 4
ret i32 %add
}
; Function Attrs: nounwind
declare i32 @printf(ptr, ...) #0
; Function Attrs: nounwind
define void @test.helloWorld() #0 {
entry:
%0 = call i32 (ptr, ...) @printf(ptr @.str)
ret void
}
; Function Attrs: nounwind
define i32 @test.test_static() #0 {
entry:
@@ -320,6 +333,7 @@ entry:
%3 = load i32, ptr @test_static.x, align 4
ret i32 %3
}
; Function Attrs: nounwind
define i32 @test.helo(double %0, ptr align 4 %1) #0 {
entry:
@@ -332,6 +346,7 @@ entry:
%2 = call i32 @test.helo(double 1.000000e+00, ptr align 4 %indirectarg)
ret i32 1
}
; Function Attrs: nounwind
define i32 @test.test1(i32 %0, i32 %1) #0 {
entry:
@@ -343,12 +358,15 @@ entry:
store i32 %3, ptr %a, align 4
%gt = icmp sgt i32 %1, 128
br i1 %gt, label %if.then, label %if.exit
if.then: ; preds = %entry
ret i32 -1
if.exit: ; preds = %entry
%4 = load i32, ptr %a, align 4
ret i32 %4
}
; Function Attrs: nounwind
define i32 @test.sum_us(ptr align 8 %0) #0 {
entry:
@@ -359,8 +377,10 @@ entry:
%2 = load i64, ptr %1, align 8
%eq = icmp eq i64 0, %2
br i1 %eq, label %if.then, label %if.exit
if.then: ; preds = %entry
ret i32 0
if.exit: ; preds = %entry
%3 = load i32, ptr %sum, align 4
%4 = getelementptr inbounds %"int[]", ptr %0, i32 0, i32 0
@@ -384,6 +404,7 @@ if.exit: ; preds = %entry
%14 = load i32, ptr %sum, align 4
ret i32 %14
}
; Function Attrs: nounwind
define i32 @test.sumd(ptr align 8 %0) #0 {
entry:
@@ -392,6 +413,7 @@ entry:
store i32 0, ptr %sum, align 4
store i32 0, ptr %i, align 4
br label %loop.cond
loop.cond: ; preds = %loop.body, %entry
%1 = load i32, ptr %i, align 4
%sext = sext i32 %1 to i64
@@ -401,6 +423,7 @@ loop.cond: ; preds = %loop.body, %entry
%check = icmp slt i64 %3, 0
%siui-lt = or i1 %check, %lt
br i1 %siui-lt, label %loop.body, label %loop.exit
loop.body: ; preds = %loop.cond
%4 = load i32, ptr %sum, align 4
%5 = getelementptr inbounds %"int[]", ptr %0, i32 0, i32 0
@@ -415,10 +438,12 @@ loop.body: ; preds = %loop.cond
%add2 = add i32 %9, 1
store i32 %add2, ptr %i, align 4
br label %loop.cond
loop.exit: ; preds = %loop.cond
%10 = load i32, ptr %sum, align 4
ret i32 %10
}
; Function Attrs: nounwind
define void @test.main() #0 {
entry:
@@ -440,8 +465,8 @@ entry:
%varargslots = alloca [4 x i32], align 16
%indirectarg12 = alloca %"int[]", align 8
%varargslots13 = alloca [1 x i32], align 4
%indirectarg14 = alloca %"int[]", align 8
%indirectarg15 = alloca %"int[]", align 8
%indirectarg16 = alloca %"int[]", align 8
%a1 = alloca ptr, align 8
%b2 = alloca ptr, align 8
%0 = call i32 @test.test_static()
@@ -454,12 +479,14 @@ entry:
call void @"std.collections.linkedlist$int$.LinkedList.push"(ptr %list, i32 30)
store i32 0, ptr %i, align 4
br label %loop.cond
loop.cond: ; preds = %loop.body, %entry
%3 = load i32, ptr %i, align 4
%4 = call i64 @"std.collections.linkedlist$int$.LinkedList.len"(ptr %list) #3
%trunc = trunc i64 %4 to i32
%lt = icmp slt i32 %3, %trunc
br i1 %lt, label %loop.body, label %loop.exit
loop.body: ; preds = %loop.cond
%5 = load i32, ptr %i, align 4
%6 = load i32, ptr %i, align 4
@@ -470,6 +497,7 @@ loop.body: ; preds = %loop.cond
%add = add i32 %9, 1
store i32 %add, ptr %i, align 4
br label %loop.cond
loop.exit: ; preds = %loop.cond
call void @"std.collections.linkedlist$int$.LinkedList.free"(ptr %list)
%10 = call i32 (ptr, ...) @printf(ptr @.str.3, i32 3)
@@ -483,22 +511,25 @@ loop.exit: ; preds = %loop.cond
call void @"std.collections.list$int$.List.insert_at"(ptr %array, i64 2, i32 300)
store i32 0, ptr %i1, align 4
br label %loop.cond2
loop.cond2: ; preds = %loop.body5, %loop.exit
%12 = load i32, ptr %i1, align 4
%13 = call i64 @"std.collections.list$int$.List.len"(ptr %array)
%13 = call i64 @"std.collections.list$int$.List.len"(ptr %array) #3
%trunc3 = trunc i64 %13 to i32
%lt4 = icmp slt i32 %12, %trunc3
br i1 %lt4, label %loop.body5, label %loop.exit8
loop.body5: ; preds = %loop.cond2
%14 = load i32, ptr %i1, align 4
%15 = load i32, ptr %i1, align 4
%sext6 = sext i32 %15 to i64
%16 = call i32 @"std.collections.list$int$.List.get"(ptr %array, i64 %sext6)
%16 = call i32 @"std.collections.list$int$.List.get"(ptr %array, i64 %sext6) #3
%17 = call i32 (ptr, ...) @printf(ptr @.str.5, i32 %14, i32 %16)
%18 = load i32, ptr %i1, align 4
%add7 = add i32 %18, 1
store i32 %add7, ptr %i1, align 4
br label %loop.cond2
loop.exit8: ; preds = %loop.cond2
call void @"std.collections.list$int$.List.free"(ptr %array)
call void @llvm.memcpy.p0.p0.i32(ptr align 4 %a, ptr align 4 @.__const.6, i32 4, i1 false)
@@ -551,20 +582,20 @@ loop.exit8: ; preds = %loop.cond2
%49 = getelementptr inbounds [4 x i32], ptr %varargslots, i64 0, i64 3
store i32 5, ptr %49, align 4
%50 = insertvalue %"int[]" undef, ptr %varargslots, 0
%51 = insertvalue %"int[]" %50, i64 4, 1
store %"int[]" %51, ptr %indirectarg12, align 8
%52 = call i32 @test.sum_us(ptr align 8 %indirectarg12)
%53 = call i32 (ptr, ...) @printf(ptr @.str.18, i32 %52)
%54 = getelementptr inbounds [1 x i32], ptr %varargslots13, i64 0, i64 0
store i32 1, ptr %54, align 4
%55 = insertvalue %"int[]" undef, ptr %varargslots13, 0
%56 = insertvalue %"int[]" %55, i64 1, 1
store %"int[]" %56, ptr %indirectarg14, align 8
%57 = call i32 @test.sum_us(ptr align 8 %indirectarg14)
%58 = call i32 (ptr, ...) @printf(ptr @.str.19, i32 %57)
store %"int[]" zeroinitializer, ptr %indirectarg15, align 8
%59 = call i32 @test.sum_us(ptr align 8 %indirectarg15)
%60 = call i32 (ptr, ...) @printf(ptr @.str.20, i32 %59)
%"#temp#" = insertvalue %"int[]" %50, i64 4, 1
store %"int[]" %"#temp#", ptr %indirectarg12, align 8
%51 = call i32 @test.sum_us(ptr align 8 %indirectarg12)
%52 = call i32 (ptr, ...) @printf(ptr @.str.18, i32 %51)
%53 = getelementptr inbounds [1 x i32], ptr %varargslots13, i64 0, i64 0
store i32 1, ptr %53, align 4
%54 = insertvalue %"int[]" undef, ptr %varargslots13, 0
%"#temp#14" = insertvalue %"int[]" %54, i64 1, 1
store %"int[]" %"#temp#14", ptr %indirectarg15, align 8
%55 = call i32 @test.sum_us(ptr align 8 %indirectarg15)
%56 = call i32 (ptr, ...) @printf(ptr @.str.19, i32 %55)
store %"int[]" zeroinitializer, ptr %indirectarg16, align 8
%57 = call i32 @test.sum_us(ptr align 8 %indirectarg16)
%58 = call i32 (ptr, ...) @printf(ptr @.str.20, i32 %57)
store ptr null, ptr %a1, align 8
store ptr null, ptr %b2, align 8
ret void