mirror of
https://github.com/c3lang/c3c.git
synced 2026-02-27 12:01:16 +00:00
Dynamic protocols.
This commit is contained in:
committed by
Christoffer Lerno
parent
4cc30c0d33
commit
49c4595457
@@ -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
|
||||
|
||||
@@ -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
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
Reference in New Issue
Block a user