Dynamic protocols.

This commit is contained in:
Christoffer Lerno
2023-10-04 23:10:59 +02:00
committed by Christoffer Lerno
parent 4cc30c0d33
commit 49c4595457
106 changed files with 2372 additions and 2011 deletions

View File

@@ -56,29 +56,29 @@ entry:
%a = alloca ptr, align 8
%b = alloca ptr, align 8
%retparam = alloca i64, align 8
%varargslots = alloca [1 x %any], align 16
%varargslots = alloca [1 x %"any*"], align 16
%taddr = alloca i32, align 4
%retparam1 = alloca i64, align 8
%varargslots2 = alloca [1 x %any], align 16
%varargslots2 = alloca [1 x %"any*"], align 16
%taddr3 = alloca i32, align 4
%z = alloca ptr, align 8
%retparam4 = alloca i64, align 8
%varargslots5 = alloca [1 x %any], align 16
%varargslots5 = alloca [1 x %"any*"], align 16
%taddr6 = alloca i32, align 4
%retparam7 = alloca i64, align 8
%varargslots8 = alloca [1 x %any], align 16
%varargslots8 = alloca [1 x %"any*"], align 16
%taddr9 = alloca %"char[]", align 8
%retparam10 = alloca i64, align 8
%varargslots11 = alloca [1 x %any], align 16
%varargslots11 = alloca [1 x %"any*"], align 16
%taddr12 = alloca %"char[]", align 8
%retparam13 = alloca i64, align 8
%varargslots14 = alloca [1 x %any], align 16
%varargslots14 = alloca [1 x %"any*"], align 16
%taddr15 = alloca %"char[]", align 8
%retparam16 = alloca i64, align 8
%varargslots17 = alloca [1 x %any], align 16
%varargslots17 = alloca [1 x %"any*"], align 16
%taddr18 = alloca %"char[]", align 8
%retparam19 = alloca i64, align 8
%varargslots20 = alloca [1 x %any], align 16
%varargslots20 = alloca [1 x %"any*"], align 16
%taddr21 = alloca %"char[]", align 8
%y = alloca ptr, align 8
%zfoke = alloca i64, align 8
@@ -87,56 +87,56 @@ entry:
%0 = load ptr, ptr %a, align 8
%1 = call i32 %0(i32 123)
store i32 %1, ptr %taddr, align 4
%2 = insertvalue %any undef, ptr %taddr, 0
%3 = insertvalue %any %2, i64 ptrtoint (ptr @"$ct.int" to i64), 1
%4 = getelementptr inbounds [1 x %any], ptr %varargslots, i64 0, i64 0
store %any %3, ptr %4, align 16
%2 = insertvalue %"any*" undef, ptr %taddr, 0
%3 = insertvalue %"any*" %2, i64 ptrtoint (ptr @"$ct.int" to i64), 1
%4 = getelementptr inbounds [1 x %"any*"], ptr %varargslots, i64 0, i64 0
store %"any*" %3, ptr %4, align 16
%5 = call i64 @std.io.printfn(ptr %retparam, ptr @.str, i64 2, ptr %varargslots, i64 1)
%6 = call i32 @test.test2(i32 3)
store i32 %6, ptr %taddr3, align 4
%7 = insertvalue %any undef, ptr %taddr3, 0
%8 = insertvalue %any %7, i64 ptrtoint (ptr @"$ct.int" to i64), 1
%9 = getelementptr inbounds [1 x %any], ptr %varargslots2, i64 0, i64 0
store %any %8, ptr %9, align 16
%7 = insertvalue %"any*" undef, ptr %taddr3, 0
%8 = insertvalue %"any*" %7, i64 ptrtoint (ptr @"$ct.int" to i64), 1
%9 = getelementptr inbounds [1 x %"any*"], ptr %varargslots2, i64 0, i64 0
store %"any*" %8, ptr %9, align 16
%10 = call i64 @std.io.printfn(ptr %retparam1, ptr @.str.1, i64 2, ptr %varargslots2, i64 1)
store ptr @test.test2, ptr %z, align 8
%11 = load ptr, ptr %z, align 8
%12 = call i32 %11(i32 444)
store i32 %12, ptr %taddr6, align 4
%13 = insertvalue %any undef, ptr %taddr6, 0
%14 = insertvalue %any %13, i64 ptrtoint (ptr @"$ct.int" to i64), 1
%15 = getelementptr inbounds [1 x %any], ptr %varargslots5, i64 0, i64 0
store %any %14, ptr %15, align 16
%13 = insertvalue %"any*" undef, ptr %taddr6, 0
%14 = insertvalue %"any*" %13, i64 ptrtoint (ptr @"$ct.int" to i64), 1
%15 = getelementptr inbounds [1 x %"any*"], ptr %varargslots5, i64 0, i64 0
store %"any*" %14, ptr %15, align 16
%16 = call i64 @std.io.printfn(ptr %retparam4, ptr @.str.2, i64 2, ptr %varargslots5, i64 1)
store %"char[]" { ptr @.str.4, i64 12 }, ptr %taddr9, align 8
%17 = insertvalue %any undef, ptr %taddr9, 0
%18 = insertvalue %any %17, i64 ptrtoint (ptr @"$ct.String" to i64), 1
%19 = getelementptr inbounds [1 x %any], ptr %varargslots8, i64 0, i64 0
store %any %18, ptr %19, align 16
%17 = insertvalue %"any*" undef, ptr %taddr9, 0
%18 = insertvalue %"any*" %17, i64 ptrtoint (ptr @"$ct.String" to i64), 1
%19 = getelementptr inbounds [1 x %"any*"], ptr %varargslots8, i64 0, i64 0
store %"any*" %18, ptr %19, align 16
%20 = call i64 @std.io.printfn(ptr %retparam7, ptr @.str.3, i64 2, ptr %varargslots8, i64 1)
store %"char[]" { ptr @.str.6, i64 12 }, ptr %taddr12, align 8
%21 = insertvalue %any undef, ptr %taddr12, 0
%22 = insertvalue %any %21, i64 ptrtoint (ptr @"$ct.String" to i64), 1
%23 = getelementptr inbounds [1 x %any], ptr %varargslots11, i64 0, i64 0
store %any %22, ptr %23, align 16
%21 = insertvalue %"any*" undef, ptr %taddr12, 0
%22 = insertvalue %"any*" %21, i64 ptrtoint (ptr @"$ct.String" to i64), 1
%23 = getelementptr inbounds [1 x %"any*"], ptr %varargslots11, i64 0, i64 0
store %"any*" %22, ptr %23, align 16
%24 = call i64 @std.io.printfn(ptr %retparam10, ptr @.str.5, i64 2, ptr %varargslots11, i64 1)
store %"char[]" { ptr @.str.8, i64 12 }, ptr %taddr15, align 8
%25 = insertvalue %any undef, ptr %taddr15, 0
%26 = insertvalue %any %25, i64 ptrtoint (ptr @"$ct.String" to i64), 1
%27 = getelementptr inbounds [1 x %any], ptr %varargslots14, i64 0, i64 0
store %any %26, ptr %27, align 16
%25 = insertvalue %"any*" undef, ptr %taddr15, 0
%26 = insertvalue %"any*" %25, i64 ptrtoint (ptr @"$ct.String" to i64), 1
%27 = getelementptr inbounds [1 x %"any*"], ptr %varargslots14, i64 0, i64 0
store %"any*" %26, ptr %27, align 16
%28 = call i64 @std.io.printfn(ptr %retparam13, ptr @.str.7, i64 2, ptr %varargslots14, i64 1)
store %"char[]" { ptr @.str.10, i64 6 }, ptr %taddr18, align 8
%29 = insertvalue %any undef, ptr %taddr18, 0
%30 = insertvalue %any %29, i64 ptrtoint (ptr @"$ct.String" to i64), 1
%31 = getelementptr inbounds [1 x %any], ptr %varargslots17, i64 0, i64 0
store %any %30, ptr %31, align 16
%29 = insertvalue %"any*" undef, ptr %taddr18, 0
%30 = insertvalue %"any*" %29, i64 ptrtoint (ptr @"$ct.String" to i64), 1
%31 = getelementptr inbounds [1 x %"any*"], ptr %varargslots17, i64 0, i64 0
store %"any*" %30, ptr %31, align 16
%32 = call i64 @std.io.printfn(ptr %retparam16, ptr @.str.9, i64 2, ptr %varargslots17, i64 1)
store %"char[]" { ptr @.str.12, i64 13 }, ptr %taddr21, align 8
%33 = insertvalue %any undef, ptr %taddr21, 0
%34 = insertvalue %any %33, i64 ptrtoint (ptr @"$ct.String" to i64), 1
%35 = getelementptr inbounds [1 x %any], ptr %varargslots20, i64 0, i64 0
store %any %34, ptr %35, align 16
%33 = insertvalue %"any*" undef, ptr %taddr21, 0
%34 = insertvalue %"any*" %33, i64 ptrtoint (ptr @"$ct.String" to i64), 1
%35 = getelementptr inbounds [1 x %"any*"], ptr %varargslots20, i64 0, i64 0
store %"any*" %34, ptr %35, align 16
%36 = call i64 @std.io.printfn(ptr %retparam19, ptr @.str.11, i64 2, ptr %varargslots20, i64 1)
store ptr @test.test2, ptr %y, align 8
store i64 ptrtoint (ptr @"$ct.p$fn$int$int$" to i64), ptr %zfoke, align 8

View File

@@ -26,13 +26,13 @@ fn int main()
define void @test.retest(ptr %0, i64 %1) #0 {
entry:
%foo = alloca %"any[]", align 8
%foo = alloca %"any*[]", align 8
store ptr %0, ptr %foo, align 8
%ptroffset = getelementptr inbounds i64, ptr %foo, i64 1
store i64 %1, ptr %ptroffset, align 8
%2 = getelementptr inbounds %"any[]", ptr %foo, i32 0, i32 0
%2 = getelementptr inbounds %"any*[]", ptr %foo, i32 0, i32 0
%lo = load ptr, ptr %2, align 8
%3 = getelementptr inbounds %"any[]", ptr %foo, i32 0, i32 1
%3 = getelementptr inbounds %"any*[]", ptr %foo, i32 0, i32 1
%hi = load i64, ptr %3, align 8
call void @test.test(ptr %lo, i64 %hi)
ret void
@@ -40,14 +40,14 @@ entry:
define void @test.test(ptr %0, i64 %1) #0 {
entry:
%foo = alloca %"any[]", align 8
%foo = alloca %"any*[]", align 8
store ptr %0, ptr %foo, align 8
%ptroffset = getelementptr inbounds i64, ptr %foo, i64 1
store i64 %1, ptr %ptroffset, align 8
%2 = getelementptr inbounds %"any[]", ptr %foo, i32 0, i32 0
%2 = getelementptr inbounds %"any*[]", ptr %foo, i32 0, i32 0
%3 = load ptr, ptr %2, align 8
%ptroffset1 = getelementptr inbounds %any, ptr %3, i64 0
%4 = getelementptr inbounds %any, ptr %ptroffset1, i32 0, i32 0
%ptroffset1 = getelementptr inbounds %"any*", ptr %3, i64 0
%4 = getelementptr inbounds %"any*", ptr %ptroffset1, i32 0, i32 0
%5 = load ptr, ptr %4, align 8
%6 = load i32, ptr %5, align 4
call void (ptr, ...) @printf(ptr @.str, i32 %6)
@@ -57,22 +57,22 @@ entry:
define i32 @main() #0 {
entry:
%i = alloca i32, align 4
%varargslots = alloca [1 x %any], align 16
%varargslots = alloca [1 x %"any*"], align 16
%taddr = alloca i32, align 4
%varargslots1 = alloca [1 x %any], align 16
%varargslots1 = alloca [1 x %"any*"], align 16
%taddr2 = alloca i32, align 4
store i32 1, ptr %i, align 4
store i32 1, ptr %taddr, align 4
%0 = insertvalue %any undef, ptr %taddr, 0
%1 = insertvalue %any %0, i64 ptrtoint (ptr @"$ct.int" to i64), 1
%2 = getelementptr inbounds [1 x %any], ptr %varargslots, i64 0, i64 0
store %any %1, ptr %2, align 16
%0 = insertvalue %"any*" undef, ptr %taddr, 0
%1 = insertvalue %"any*" %0, i64 ptrtoint (ptr @"$ct.int" to i64), 1
%2 = getelementptr inbounds [1 x %"any*"], ptr %varargslots, i64 0, i64 0
store %"any*" %1, ptr %2, align 16
call void @test.test(ptr %varargslots, i64 1)
store i32 1, ptr %taddr2, align 4
%3 = insertvalue %any undef, ptr %taddr2, 0
%4 = insertvalue %any %3, i64 ptrtoint (ptr @"$ct.int" to i64), 1
%5 = getelementptr inbounds [1 x %any], ptr %varargslots1, i64 0, i64 0
store %any %4, ptr %5, align 16
%3 = insertvalue %"any*" undef, ptr %taddr2, 0
%4 = insertvalue %"any*" %3, i64 ptrtoint (ptr @"$ct.int" to i64), 1
%5 = getelementptr inbounds [1 x %"any*"], ptr %varargslots1, i64 0, i64 0
store %"any*" %4, ptr %5, align 16
call void @test.retest(ptr %varargslots1, i64 1)
ret i32 1
}

View File

@@ -42,11 +42,11 @@ entry:
; Function Attrs: nounwind
define void @foo.test2(i32 %0, ptr %1, i64 %2, i32 %3) #0 {
entry:
%y = alloca %"any[]", align 8
%y = alloca %"any*[]", align 8
store ptr %1, ptr %y, align 8
%ptroffset = getelementptr inbounds i64, ptr %y, i64 1
store i64 %2, ptr %ptroffset, align 8
%4 = getelementptr inbounds %"any[]", ptr %y, i32 0, i32 1
%4 = getelementptr inbounds %"any*[]", ptr %y, i32 0, i32 1
%5 = load i64, ptr %4, align 8
%trunc = trunc i64 %5 to i32
call void (ptr, ...) @printf(ptr @.str.1, i32 %0, i32 %trunc, i32 %3)
@@ -57,11 +57,11 @@ entry:
define void @foo.main() #0 {
entry:
%varargslots = alloca [2 x i32], align 4
%varargslots1 = alloca [2 x %any], align 16
%varargslots1 = alloca [2 x %"any*"], align 16
%taddr = alloca i32, align 4
%taddr2 = alloca i32, align 4
%varargslots3 = alloca [2 x i32], align 4
%varargslots4 = alloca [2 x %any], align 16
%varargslots4 = alloca [2 x %"any*"], align 16
%taddr5 = alloca i32, align 4
%taddr6 = alloca i32, align 4
%0 = getelementptr inbounds [2 x i32], ptr %varargslots, i64 0, i64 0
@@ -70,15 +70,15 @@ entry:
store i32 5, ptr %1, align 4
call void @foo.test(i32 3, ptr %varargslots, i64 2, i32 123)
store i32 4, ptr %taddr, align 4
%2 = insertvalue %any undef, ptr %taddr, 0
%3 = insertvalue %any %2, i64 ptrtoint (ptr @"$ct.int" to i64), 1
%4 = getelementptr inbounds [2 x %any], ptr %varargslots1, i64 0, i64 0
store %any %3, ptr %4, align 16
%2 = insertvalue %"any*" undef, ptr %taddr, 0
%3 = insertvalue %"any*" %2, i64 ptrtoint (ptr @"$ct.int" to i64), 1
%4 = getelementptr inbounds [2 x %"any*"], ptr %varargslots1, i64 0, i64 0
store %"any*" %3, ptr %4, align 16
store i32 5, ptr %taddr2, align 4
%5 = insertvalue %any undef, ptr %taddr2, 0
%6 = insertvalue %any %5, i64 ptrtoint (ptr @"$ct.int" to i64), 1
%7 = getelementptr inbounds [2 x %any], ptr %varargslots1, i64 0, i64 1
store %any %6, ptr %7, align 16
%5 = insertvalue %"any*" undef, ptr %taddr2, 0
%6 = insertvalue %"any*" %5, i64 ptrtoint (ptr @"$ct.int" to i64), 1
%7 = getelementptr inbounds [2 x %"any*"], ptr %varargslots1, i64 0, i64 1
store %"any*" %6, ptr %7, align 16
call void @foo.test2(i32 3, ptr %varargslots1, i64 2, i32 123)
%8 = getelementptr inbounds [2 x i32], ptr %varargslots3, i64 0, i64 0
store i32 4, ptr %8, align 4
@@ -86,15 +86,15 @@ entry:
store i32 5, ptr %9, align 4
call void @foo.test(i32 3, ptr %varargslots3, i64 2, i32 2)
store i32 4, ptr %taddr5, align 4
%10 = insertvalue %any undef, ptr %taddr5, 0
%11 = insertvalue %any %10, i64 ptrtoint (ptr @"$ct.int" to i64), 1
%12 = getelementptr inbounds [2 x %any], ptr %varargslots4, i64 0, i64 0
store %any %11, ptr %12, align 16
%10 = insertvalue %"any*" undef, ptr %taddr5, 0
%11 = insertvalue %"any*" %10, i64 ptrtoint (ptr @"$ct.int" to i64), 1
%12 = getelementptr inbounds [2 x %"any*"], ptr %varargslots4, i64 0, i64 0
store %"any*" %11, ptr %12, align 16
store i32 5, ptr %taddr6, align 4
%13 = insertvalue %any undef, ptr %taddr6, 0
%14 = insertvalue %any %13, i64 ptrtoint (ptr @"$ct.int" to i64), 1
%15 = getelementptr inbounds [2 x %any], ptr %varargslots4, i64 0, i64 1
store %any %14, ptr %15, align 16
%13 = insertvalue %"any*" undef, ptr %taddr6, 0
%14 = insertvalue %"any*" %13, i64 ptrtoint (ptr @"$ct.int" to i64), 1
%15 = getelementptr inbounds [2 x %"any*"], ptr %varargslots4, i64 0, i64 1
store %"any*" %14, ptr %15, align 16
call void @foo.test2(i32 3, ptr %varargslots4, i64 2, i32 2)
ret void
}