From 159a0ec065fea28964f229b0da9f843610165038 Mon Sep 17 00:00:00 2001 From: luoliwoshang <2643523683@qq.com> Date: Sat, 28 Feb 2026 21:39:49 +0800 Subject: [PATCH] cl/ssa: split invoke through reusable thunk --- cl/_testdata/embedunexport/out.ll | 24 +- cl/_testdata/geometry1370/out.ll | 24 +- cl/_testgo/abimethod/out.ll | 524 ++++++++++++------------ cl/_testgo/closureall/out.ll | 26 +- cl/_testgo/embedunexport-1598/out.ll | 26 +- cl/_testgo/errors/out.ll | 26 +- cl/_testgo/ifaceprom/out.ll | 368 ++++++++--------- cl/_testgo/interface/out.ll | 76 ++-- cl/_testgo/invoke/out.ll | 26 +- cl/_testgo/reader/out.ll | 336 ++++++++-------- cl/_testgo/reflect/out.ll | 582 +++++++++++++-------------- cl/_testgo/tpinst/out.ll | 142 ++++--- cl/_testrt/mapclosure/out.ll | 26 +- cl/_testrt/tpabi/out.ll | 58 +-- cl/_testrt/tpmethod/out.ll | 24 +- cl/_testrt/vamethod/out.ll | 52 +-- cl/instr.go | 10 +- ssa/interface.go | 62 ++- 18 files changed, 1240 insertions(+), 1172 deletions(-) diff --git a/cl/_testdata/embedunexport/out.ll b/cl/_testdata/embedunexport/out.ll index 986d419641..3f93a39da0 100644 --- a/cl/_testdata/embedunexport/out.ll +++ b/cl/_testdata/embedunexport/out.ll @@ -32,15 +32,7 @@ _llgo_0: define void @"github.com/goplus/llgo/cl/_testdata/embedunexport.Use"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) { _llgo_0: - %1 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) - %2 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %0, 0 - %3 = getelementptr ptr, ptr %2, i64 4 - %4 = load ptr, ptr %3, align 8 - %5 = insertvalue { ptr, ptr } undef, ptr %4, 0 - %6 = insertvalue { ptr, ptr } %5, ptr %1, 1 - %7 = extractvalue { ptr, ptr } %6, 1 - %8 = extractvalue { ptr, ptr } %6, 0 - call void %8(ptr %7, %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @0, i64 8 }) + call void @"__llgo_invoke.github.com/goplus/llgo/cl/_testdata/embedunexport.iface$gGW7PSocDeRlTvk5kuSew8C-TZ8OXQrGkMlj2EUlZ9E$m1.setName"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0, %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @0, i64 8 }) ret void } @@ -59,4 +51,18 @@ _llgo_2: ; preds = %_llgo_1, %_llgo_0 declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocZ"(i64) +define weak_odr void @"__llgo_invoke.github.com/goplus/llgo/cl/_testdata/embedunexport.iface$gGW7PSocDeRlTvk5kuSew8C-TZ8OXQrGkMlj2EUlZ9E$m1.setName"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0, %"github.com/goplus/llgo/runtime/internal/runtime.String" %1) { +_llgo_0: + %2 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) + %3 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %0, 0 + %4 = getelementptr ptr, ptr %3, i64 4 + %5 = load ptr, ptr %4, align 8 + %6 = insertvalue { ptr, ptr } undef, ptr %5, 0 + %7 = insertvalue { ptr, ptr } %6, ptr %2, 1 + %8 = extractvalue { ptr, ptr } %7, 1 + %9 = extractvalue { ptr, ptr } %7, 0 + tail call void %9(ptr %8, %"github.com/goplus/llgo/runtime/internal/runtime.String" %1) + ret void +} + declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface") diff --git a/cl/_testdata/geometry1370/out.ll b/cl/_testdata/geometry1370/out.ll index 0651810645..2f7bf3eded 100644 --- a/cl/_testdata/geometry1370/out.ll +++ b/cl/_testdata/geometry1370/out.ll @@ -60,15 +60,7 @@ _llgo_2: ; preds = %_llgo_1, %_llgo_0 define void @"github.com/goplus/llgo/cl/_testdata/geometry1370.RegisterShape"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0, i64 %1) { _llgo_0: - %2 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) - %3 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %0, 0 - %4 = getelementptr ptr, ptr %3, i64 4 - %5 = load ptr, ptr %4, align 8 - %6 = insertvalue { ptr, ptr } undef, ptr %5, 0 - %7 = insertvalue { ptr, ptr } %6, ptr %2, 1 - %8 = extractvalue { ptr, ptr } %7, 1 - %9 = extractvalue { ptr, ptr } %7, 0 - call void %9(ptr %8, i64 %1) + call void @"__llgo_invoke.github.com/goplus/llgo/cl/_testdata/geometry1370.iface$OopIVfjRcxQr1gmJyGi5G7hHt__vH05AREEM7PthH9o$m1.setID"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0, i64 %1) ret void } @@ -87,4 +79,18 @@ _llgo_2: ; preds = %_llgo_1, %_llgo_0 declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocZ"(i64) +define weak_odr void @"__llgo_invoke.github.com/goplus/llgo/cl/_testdata/geometry1370.iface$OopIVfjRcxQr1gmJyGi5G7hHt__vH05AREEM7PthH9o$m1.setID"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0, i64 %1) { +_llgo_0: + %2 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) + %3 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %0, 0 + %4 = getelementptr ptr, ptr %3, i64 4 + %5 = load ptr, ptr %4, align 8 + %6 = insertvalue { ptr, ptr } undef, ptr %5, 0 + %7 = insertvalue { ptr, ptr } %6, ptr %2, 1 + %8 = extractvalue { ptr, ptr } %7, 1 + %9 = extractvalue { ptr, ptr } %7, 0 + tail call void %9(ptr %8, i64 %1) + ret void +} + declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface") diff --git a/cl/_testgo/abimethod/out.ll b/cl/_testgo/abimethod/out.ll index cdff390b0c..ea5e3e50db 100644 --- a/cl/_testgo/abimethod/out.ll +++ b/cl/_testgo/abimethod/out.ll @@ -357,23 +357,15 @@ _llgo_0: %5 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr @"_llgo_iface$WkyTd7mXEW0USaC6FIo7OG9IdUUyjAJl_h3PFrMEtHc", ptr @"*github.com/goplus/llgo/cl/_testgo/abimethod.struct$mRfo5gQx8vKF1DvrL24XRoyvI_ttVDcwc1JYMRxWfb8") %6 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %5, 0 %7 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %6, ptr %0, 1 - %8 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %7) - %9 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %7, 0 - %10 = getelementptr ptr, ptr %9, i64 3 - %11 = load ptr, ptr %10, align 8 - %12 = insertvalue { ptr, ptr } undef, ptr %11, 0 - %13 = insertvalue { ptr, ptr } %12, ptr %8, 1 - %14 = extractvalue { ptr, ptr } %13, 1 - %15 = extractvalue { ptr, ptr } %13, 0 - %16 = call i64 %15(ptr %14) - %17 = icmp ne i64 %16, 100 - br i1 %17, label %_llgo_1, label %_llgo_2 + %8 = call i64 @"__llgo_invoke._llgo_iface$WkyTd7mXEW0USaC6FIo7OG9IdUUyjAJl_h3PFrMEtHc$m0.Demo1"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %7) + %9 = icmp ne i64 %8, 100 + br i1 %9, label %_llgo_1, label %_llgo_2 _llgo_1: ; preds = %_llgo_0 - %18 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) - store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @13, i64 20 }, ptr %18, align 8 - %19 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %18, 1 - call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %19) + %10 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) + store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @13, i64 20 }, ptr %10, align 8 + %11 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %10, 1 + call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %11) unreachable _llgo_2: ; preds = %_llgo_0 @@ -397,23 +389,15 @@ _llgo_0: %7 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr @"_llgo_iface$WkyTd7mXEW0USaC6FIo7OG9IdUUyjAJl_h3PFrMEtHc", ptr @"github.com/goplus/llgo/cl/_testgo/abimethod.struct$mRfo5gQx8vKF1DvrL24XRoyvI_ttVDcwc1JYMRxWfb8") %8 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %7, 0 %9 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %8, ptr %6, 1 - %10 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %9) - %11 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %9, 0 - %12 = getelementptr ptr, ptr %11, i64 3 - %13 = load ptr, ptr %12, align 8 - %14 = insertvalue { ptr, ptr } undef, ptr %13, 0 - %15 = insertvalue { ptr, ptr } %14, ptr %10, 1 - %16 = extractvalue { ptr, ptr } %15, 1 - %17 = extractvalue { ptr, ptr } %15, 0 - %18 = call i64 %17(ptr %16) - %19 = icmp ne i64 %18, 100 - br i1 %19, label %_llgo_1, label %_llgo_2 + %10 = call i64 @"__llgo_invoke._llgo_iface$WkyTd7mXEW0USaC6FIo7OG9IdUUyjAJl_h3PFrMEtHc$m0.Demo1"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %9) + %11 = icmp ne i64 %10, 100 + br i1 %11, label %_llgo_1, label %_llgo_2 _llgo_1: ; preds = %_llgo_0 - %20 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) - store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @15, i64 20 }, ptr %20, align 8 - %21 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %20, 1 - call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %21) + %12 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) + store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @15, i64 20 }, ptr %12, align 8 + %13 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %12, 1 + call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %13) unreachable _llgo_2: ; preds = %_llgo_0 @@ -435,23 +419,15 @@ _llgo_0: %6 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr @"_llgo_iface$WkyTd7mXEW0USaC6FIo7OG9IdUUyjAJl_h3PFrMEtHc", ptr @"github.com/goplus/llgo/cl/_testgo/abimethod.struct$F3FioEGWwXQRUdV6xoxVUEDjRNgBQIpL0XIyBECp088") %7 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %6, 0 %8 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %7, ptr %5, 1 - %9 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %8) - %10 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %8, 0 - %11 = getelementptr ptr, ptr %10, i64 3 - %12 = load ptr, ptr %11, align 8 - %13 = insertvalue { ptr, ptr } undef, ptr %12, 0 - %14 = insertvalue { ptr, ptr } %13, ptr %9, 1 - %15 = extractvalue { ptr, ptr } %14, 1 - %16 = extractvalue { ptr, ptr } %14, 0 - %17 = call i64 %16(ptr %15) - %18 = icmp ne i64 %17, 100 - br i1 %18, label %_llgo_1, label %_llgo_2 + %9 = call i64 @"__llgo_invoke._llgo_iface$WkyTd7mXEW0USaC6FIo7OG9IdUUyjAJl_h3PFrMEtHc$m0.Demo1"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %8) + %10 = icmp ne i64 %9, 100 + br i1 %10, label %_llgo_1, label %_llgo_2 _llgo_1: ; preds = %_llgo_0 - %19 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) - store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @17, i64 20 }, ptr %19, align 8 - %20 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %19, 1 - call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %20) + %11 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) + store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @17, i64 20 }, ptr %11, align 8 + %12 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %11, 1 + call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %12) unreachable _llgo_2: ; preds = %_llgo_0 @@ -469,23 +445,15 @@ _llgo_0: %4 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr @"_llgo_iface$WkyTd7mXEW0USaC6FIo7OG9IdUUyjAJl_h3PFrMEtHc", ptr @"*github.com/goplus/llgo/cl/_testgo/abimethod.struct$F3FioEGWwXQRUdV6xoxVUEDjRNgBQIpL0XIyBECp088") %5 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %4, 0 %6 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %5, ptr %0, 1 - %7 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %6) - %8 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %6, 0 - %9 = getelementptr ptr, ptr %8, i64 3 - %10 = load ptr, ptr %9, align 8 - %11 = insertvalue { ptr, ptr } undef, ptr %10, 0 - %12 = insertvalue { ptr, ptr } %11, ptr %7, 1 - %13 = extractvalue { ptr, ptr } %12, 1 - %14 = extractvalue { ptr, ptr } %12, 0 - %15 = call i64 %14(ptr %13) - %16 = icmp ne i64 %15, 100 - br i1 %16, label %_llgo_1, label %_llgo_2 + %7 = call i64 @"__llgo_invoke._llgo_iface$WkyTd7mXEW0USaC6FIo7OG9IdUUyjAJl_h3PFrMEtHc$m0.Demo1"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %6) + %8 = icmp ne i64 %7, 100 + br i1 %8, label %_llgo_1, label %_llgo_2 _llgo_1: ; preds = %_llgo_0 - %17 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) - store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @18, i64 20 }, ptr %17, align 8 - %18 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %17, 1 - call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %18) + %9 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) + store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @18, i64 20 }, ptr %9, align 8 + %10 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %9, 1 + call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %10) unreachable _llgo_2: ; preds = %_llgo_0 @@ -503,23 +471,15 @@ _llgo_0: %4 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr @"_llgo_iface$GIQLduxo5T_xLwYbboAKy8LzikHgsGzb7WxrkOH3Lr4", ptr @"*github.com/goplus/llgo/cl/_testgo/abimethod.struct$F3FioEGWwXQRUdV6xoxVUEDjRNgBQIpL0XIyBECp088") %5 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %4, 0 %6 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %5, ptr %0, 1 - %7 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %6) - %8 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %6, 0 - %9 = getelementptr ptr, ptr %8, i64 3 - %10 = load ptr, ptr %9, align 8 - %11 = insertvalue { ptr, ptr } undef, ptr %10, 0 - %12 = insertvalue { ptr, ptr } %11, ptr %7, 1 - %13 = extractvalue { ptr, ptr } %12, 1 - %14 = extractvalue { ptr, ptr } %12, 0 - %15 = call i64 %14(ptr %13) - %16 = icmp ne i64 %15, 100 - br i1 %16, label %_llgo_1, label %_llgo_2 + %7 = call i64 @"__llgo_invoke._llgo_iface$GIQLduxo5T_xLwYbboAKy8LzikHgsGzb7WxrkOH3Lr4$m0.Demo2"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %6) + %8 = icmp ne i64 %7, 100 + br i1 %8, label %_llgo_1, label %_llgo_2 _llgo_1: ; preds = %_llgo_0 - %17 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) - store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @20, i64 20 }, ptr %17, align 8 - %18 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %17, 1 - call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %18) + %9 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) + store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @20, i64 20 }, ptr %9, align 8 + %10 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %9, 1 + call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %10) unreachable _llgo_2: ; preds = %_llgo_0 @@ -543,23 +503,15 @@ _llgo_0: %7 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr @"_llgo_iface$GIQLduxo5T_xLwYbboAKy8LzikHgsGzb7WxrkOH3Lr4", ptr @"github.com/goplus/llgo/cl/_testgo/abimethod.struct$mRfo5gQx8vKF1DvrL24XRoyvI_ttVDcwc1JYMRxWfb8") %8 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %7, 0 %9 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %8, ptr %6, 1 - %10 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %9) - %11 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %9, 0 - %12 = getelementptr ptr, ptr %11, i64 3 - %13 = load ptr, ptr %12, align 8 - %14 = insertvalue { ptr, ptr } undef, ptr %13, 0 - %15 = insertvalue { ptr, ptr } %14, ptr %10, 1 - %16 = extractvalue { ptr, ptr } %15, 1 - %17 = extractvalue { ptr, ptr } %15, 0 - %18 = call i64 %17(ptr %16) - %19 = icmp ne i64 %18, 100 - br i1 %19, label %_llgo_1, label %_llgo_2 + %10 = call i64 @"__llgo_invoke._llgo_iface$GIQLduxo5T_xLwYbboAKy8LzikHgsGzb7WxrkOH3Lr4$m0.Demo2"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %9) + %11 = icmp ne i64 %10, 100 + br i1 %11, label %_llgo_1, label %_llgo_2 _llgo_1: ; preds = %_llgo_0 - %20 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) - store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @21, i64 20 }, ptr %20, align 8 - %21 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %20, 1 - call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %21) + %12 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) + store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @21, i64 20 }, ptr %12, align 8 + %13 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %12, 1 + call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %13) unreachable _llgo_2: ; preds = %_llgo_0 @@ -583,43 +535,27 @@ _llgo_0: %7 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr @"_llgo_iface$58AxoxqQ6sGUOM73FOqFrXsMlgxkU4HGd-S1Wl-ssYw", ptr @"github.com/goplus/llgo/cl/_testgo/abimethod.struct$mRfo5gQx8vKF1DvrL24XRoyvI_ttVDcwc1JYMRxWfb8") %8 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %7, 0 %9 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %8, ptr %6, 1 - %10 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %9) - %11 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %9, 0 - %12 = getelementptr ptr, ptr %11, i64 3 - %13 = load ptr, ptr %12, align 8 - %14 = insertvalue { ptr, ptr } undef, ptr %13, 0 - %15 = insertvalue { ptr, ptr } %14, ptr %10, 1 - %16 = extractvalue { ptr, ptr } %15, 1 - %17 = extractvalue { ptr, ptr } %15, 0 - %18 = call i64 %17(ptr %16) - %19 = icmp ne i64 %18, 100 - br i1 %19, label %_llgo_1, label %_llgo_2 + %10 = call i64 @"__llgo_invoke._llgo_iface$58AxoxqQ6sGUOM73FOqFrXsMlgxkU4HGd-S1Wl-ssYw$m0.Demo1"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %9) + %11 = icmp ne i64 %10, 100 + br i1 %11, label %_llgo_1, label %_llgo_2 _llgo_1: ; preds = %_llgo_0 - %20 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) - store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @23, i64 20 }, ptr %20, align 8 - %21 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %20, 1 - call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %21) + %12 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) + store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @23, i64 20 }, ptr %12, align 8 + %13 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %12, 1 + call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %13) unreachable _llgo_2: ; preds = %_llgo_0 - %22 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %9) - %23 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %9, 0 - %24 = getelementptr ptr, ptr %23, i64 4 - %25 = load ptr, ptr %24, align 8 - %26 = insertvalue { ptr, ptr } undef, ptr %25, 0 - %27 = insertvalue { ptr, ptr } %26, ptr %22, 1 - %28 = extractvalue { ptr, ptr } %27, 1 - %29 = extractvalue { ptr, ptr } %27, 0 - %30 = call i64 %29(ptr %28) - %31 = icmp ne i64 %30, 100 - br i1 %31, label %_llgo_3, label %_llgo_4 + %14 = call i64 @"__llgo_invoke._llgo_iface$58AxoxqQ6sGUOM73FOqFrXsMlgxkU4HGd-S1Wl-ssYw$m1.Demo2"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %9) + %15 = icmp ne i64 %14, 100 + br i1 %15, label %_llgo_3, label %_llgo_4 _llgo_3: ; preds = %_llgo_2 - %32 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) - store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @23, i64 20 }, ptr %32, align 8 - %33 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %32, 1 - call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %33) + %16 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) + store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @23, i64 20 }, ptr %16, align 8 + %17 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %16, 1 + call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %17) unreachable _llgo_4: ; preds = %_llgo_2 @@ -643,63 +579,39 @@ _llgo_0: %7 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr @"github.com/goplus/llgo/cl/_testgo/abimethod.iface$kT5SIXt45Cspjl04Bof3DZVSOIltlDo-njpk6KqtZvA", ptr @"github.com/goplus/llgo/cl/_testgo/abimethod.struct$mRfo5gQx8vKF1DvrL24XRoyvI_ttVDcwc1JYMRxWfb8") %8 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %7, 0 %9 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %8, ptr %6, 1 - %10 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %9) - %11 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %9, 0 - %12 = getelementptr ptr, ptr %11, i64 3 - %13 = load ptr, ptr %12, align 8 - %14 = insertvalue { ptr, ptr } undef, ptr %13, 0 - %15 = insertvalue { ptr, ptr } %14, ptr %10, 1 - %16 = extractvalue { ptr, ptr } %15, 1 - %17 = extractvalue { ptr, ptr } %15, 0 - %18 = call i64 %17(ptr %16) - %19 = icmp ne i64 %18, 100 - br i1 %19, label %_llgo_1, label %_llgo_2 + %10 = call i64 @"__llgo_invoke.github.com/goplus/llgo/cl/_testgo/abimethod.iface$kT5SIXt45Cspjl04Bof3DZVSOIltlDo-njpk6KqtZvA$m0.Demo1"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %9) + %11 = icmp ne i64 %10, 100 + br i1 %11, label %_llgo_1, label %_llgo_2 _llgo_1: ; preds = %_llgo_0 - %20 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) - store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @25, i64 20 }, ptr %20, align 8 - %21 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %20, 1 - call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %21) + %12 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) + store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @25, i64 20 }, ptr %12, align 8 + %13 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %12, 1 + call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %13) unreachable _llgo_2: ; preds = %_llgo_0 - %22 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %9) - %23 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %9, 0 - %24 = getelementptr ptr, ptr %23, i64 4 - %25 = load ptr, ptr %24, align 8 - %26 = insertvalue { ptr, ptr } undef, ptr %25, 0 - %27 = insertvalue { ptr, ptr } %26, ptr %22, 1 - %28 = extractvalue { ptr, ptr } %27, 1 - %29 = extractvalue { ptr, ptr } %27, 0 - %30 = call i64 %29(ptr %28) - %31 = icmp ne i64 %30, 100 - br i1 %31, label %_llgo_3, label %_llgo_4 + %14 = call i64 @"__llgo_invoke.github.com/goplus/llgo/cl/_testgo/abimethod.iface$kT5SIXt45Cspjl04Bof3DZVSOIltlDo-njpk6KqtZvA$m1.Demo2"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %9) + %15 = icmp ne i64 %14, 100 + br i1 %15, label %_llgo_3, label %_llgo_4 _llgo_3: ; preds = %_llgo_2 - %32 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) - store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @25, i64 20 }, ptr %32, align 8 - %33 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %32, 1 - call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %33) + %16 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) + store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @25, i64 20 }, ptr %16, align 8 + %17 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %16, 1 + call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %17) unreachable _llgo_4: ; preds = %_llgo_2 - %34 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %9) - %35 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %9, 0 - %36 = getelementptr ptr, ptr %35, i64 5 - %37 = load ptr, ptr %36, align 8 - %38 = insertvalue { ptr, ptr } undef, ptr %37, 0 - %39 = insertvalue { ptr, ptr } %38, ptr %34, 1 - %40 = extractvalue { ptr, ptr } %39, 1 - %41 = extractvalue { ptr, ptr } %39, 0 - %42 = call i64 %41(ptr %40) - %43 = icmp ne i64 %42, 100 - br i1 %43, label %_llgo_5, label %_llgo_6 + %18 = call i64 @"__llgo_invoke.github.com/goplus/llgo/cl/_testgo/abimethod.iface$kT5SIXt45Cspjl04Bof3DZVSOIltlDo-njpk6KqtZvA$m2.demo3"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %9) + %19 = icmp ne i64 %18, 100 + br i1 %19, label %_llgo_5, label %_llgo_6 _llgo_5: ; preds = %_llgo_4 - %44 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) - store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @25, i64 20 }, ptr %44, align 8 - %45 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %44, 1 - call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %45) + %20 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) + store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @25, i64 20 }, ptr %20, align 8 + %21 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %20, 1 + call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %21) unreachable _llgo_6: ; preds = %_llgo_4 @@ -717,24 +629,16 @@ _llgo_0: %4 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr @"_llgo_iface$O6rEVxIuA5O1E0KWpQBCgGx26X5gYhJ_nnJnHVL8_7U", ptr @"*github.com/goplus/llgo/cl/_testgo/abimethod.struct$RGW016k7zllXgGPm1CvD5-IBe-9lphOOTCFtYyDGLjY") %5 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %4, 0 %6 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %5, ptr %0, 1 - %7 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %6) - %8 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %6, 0 - %9 = getelementptr ptr, ptr %8, i64 3 - %10 = load ptr, ptr %9, align 8 - %11 = insertvalue { ptr, ptr } undef, ptr %10, 0 - %12 = insertvalue { ptr, ptr } %11, ptr %7, 1 - %13 = extractvalue { ptr, ptr } %12, 1 - %14 = extractvalue { ptr, ptr } %12, 0 - %15 = call %"github.com/goplus/llgo/runtime/internal/runtime.String" %14(ptr %13) - %16 = call i1 @"github.com/goplus/llgo/runtime/internal/runtime.StringEqual"(%"github.com/goplus/llgo/runtime/internal/runtime.String" %15, %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @26, i64 5 }) - %17 = xor i1 %16, true - br i1 %17, label %_llgo_1, label %_llgo_2 + %7 = call %"github.com/goplus/llgo/runtime/internal/runtime.String" @"__llgo_invoke._llgo_iface$O6rEVxIuA5O1E0KWpQBCgGx26X5gYhJ_nnJnHVL8_7U$m0.String"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %6) + %8 = call i1 @"github.com/goplus/llgo/runtime/internal/runtime.StringEqual"(%"github.com/goplus/llgo/runtime/internal/runtime.String" %7, %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @26, i64 5 }) + %9 = xor i1 %8, true + br i1 %9, label %_llgo_1, label %_llgo_2 _llgo_1: ; preds = %_llgo_0 - %18 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) - store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @95, i64 25 }, ptr %18, align 8 - %19 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %18, 1 - call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %19) + %10 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) + store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @95, i64 25 }, ptr %10, align 8 + %11 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %10, 1 + call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %11) unreachable _llgo_2: ; preds = %_llgo_0 @@ -748,50 +652,34 @@ _llgo_0: %2 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %1, 0 %3 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %2, ptr %0, 1 %4 = call ptr @"github.com/goplus/llgo/cl/_testgo/abimethod.testGeneric$1"() - %5 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %3) - %6 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %3, 0 - %7 = getelementptr ptr, ptr %6, i64 4 - %8 = load ptr, ptr %7, align 8 - %9 = insertvalue { ptr, ptr } undef, ptr %8, 0 - %10 = insertvalue { ptr, ptr } %9, ptr %5, 1 - %11 = extractvalue { ptr, ptr } %10, 1 - %12 = extractvalue { ptr, ptr } %10, 0 - call void %12(ptr %11, ptr %4) - %13 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %3) - %14 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %3, 0 - %15 = getelementptr ptr, ptr %14, i64 3 - %16 = load ptr, ptr %15, align 8 - %17 = insertvalue { ptr, ptr } undef, ptr %16, 0 - %18 = insertvalue { ptr, ptr } %17, ptr %13, 1 - %19 = extractvalue { ptr, ptr } %18, 1 - %20 = extractvalue { ptr, ptr } %18, 0 - %21 = call ptr %20(ptr %19) - %22 = load %"github.com/goplus/llgo/runtime/internal/runtime.eface", ptr %21, align 8 - %23 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %22, 0 - %24 = call i1 @"github.com/goplus/llgo/runtime/internal/runtime.MatchConcreteType"(ptr @_llgo_int, ptr %23) - br i1 %24, label %_llgo_3, label %_llgo_4 + call void @"__llgo_invoke._llgo_iface$uinGjIxPTfzB5e5h5gH-0VIvLl5rQdJ_yx2UsrxQqds$m1.Store"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %3, ptr %4) + %5 = call ptr @"__llgo_invoke._llgo_iface$uinGjIxPTfzB5e5h5gH-0VIvLl5rQdJ_yx2UsrxQqds$m0.Load"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %3) + %6 = load %"github.com/goplus/llgo/runtime/internal/runtime.eface", ptr %5, align 8 + %7 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %6, 0 + %8 = call i1 @"github.com/goplus/llgo/runtime/internal/runtime.MatchConcreteType"(ptr @_llgo_int, ptr %7) + br i1 %8, label %_llgo_3, label %_llgo_4 _llgo_1: ; preds = %_llgo_3 - %25 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) - store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @109, i64 17 }, ptr %25, align 8 - %26 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %25, 1 - call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %26) + %9 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) + store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @109, i64 17 }, ptr %9, align 8 + %10 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %9, 1 + call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %10) unreachable _llgo_2: ; preds = %_llgo_3 ret void _llgo_3: ; preds = %_llgo_0 - %27 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %22, 1 - %28 = ptrtoint ptr %27 to i64 - %29 = icmp ne i64 %28, 100 - br i1 %29, label %_llgo_1, label %_llgo_2 + %11 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %6, 1 + %12 = ptrtoint ptr %11 to i64 + %13 = icmp ne i64 %12, 100 + br i1 %13, label %_llgo_1, label %_llgo_2 _llgo_4: ; preds = %_llgo_0 - %30 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) - store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @108, i64 40 }, ptr %30, align 8 - %31 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %30, 1 - call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %31) + %14 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) + store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @108, i64 40 }, ptr %14, align 8 + %15 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %14, 1 + call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %15) unreachable } @@ -810,23 +698,15 @@ _llgo_0: %2 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr @"_llgo_iface$WkyTd7mXEW0USaC6FIo7OG9IdUUyjAJl_h3PFrMEtHc", ptr @"*_llgo_github.com/goplus/llgo/cl/_testgo/abimethod.T") %3 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %2, 0 %4 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %3, ptr %0, 1 - %5 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %4) - %6 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %4, 0 - %7 = getelementptr ptr, ptr %6, i64 3 - %8 = load ptr, ptr %7, align 8 - %9 = insertvalue { ptr, ptr } undef, ptr %8, 0 - %10 = insertvalue { ptr, ptr } %9, ptr %5, 1 - %11 = extractvalue { ptr, ptr } %10, 1 - %12 = extractvalue { ptr, ptr } %10, 0 - %13 = call i64 %12(ptr %11) - %14 = icmp ne i64 %13, 100 - br i1 %14, label %_llgo_1, label %_llgo_2 + %5 = call i64 @"__llgo_invoke._llgo_iface$WkyTd7mXEW0USaC6FIo7OG9IdUUyjAJl_h3PFrMEtHc$m0.Demo1"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %4) + %6 = icmp ne i64 %5, 100 + br i1 %6, label %_llgo_1, label %_llgo_2 _llgo_1: ; preds = %_llgo_0 - %15 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) - store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @110, i64 16 }, ptr %15, align 8 - %16 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %15, 1 - call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %16) + %7 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) + store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @110, i64 16 }, ptr %7, align 8 + %8 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %7, 1 + call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %8) unreachable _llgo_2: ; preds = %_llgo_0 @@ -845,23 +725,15 @@ _llgo_0: %5 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr @"_llgo_iface$WkyTd7mXEW0USaC6FIo7OG9IdUUyjAJl_h3PFrMEtHc", ptr @"_llgo_github.com/goplus/llgo/cl/_testgo/abimethod.T") %6 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %5, 0 %7 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %6, ptr %4, 1 - %8 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %7) - %9 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %7, 0 - %10 = getelementptr ptr, ptr %9, i64 3 - %11 = load ptr, ptr %10, align 8 - %12 = insertvalue { ptr, ptr } undef, ptr %11, 0 - %13 = insertvalue { ptr, ptr } %12, ptr %8, 1 - %14 = extractvalue { ptr, ptr } %13, 1 - %15 = extractvalue { ptr, ptr } %13, 0 - %16 = call i64 %15(ptr %14) - %17 = icmp ne i64 %16, 100 - br i1 %17, label %_llgo_1, label %_llgo_2 + %8 = call i64 @"__llgo_invoke._llgo_iface$WkyTd7mXEW0USaC6FIo7OG9IdUUyjAJl_h3PFrMEtHc$m0.Demo1"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %7) + %9 = icmp ne i64 %8, 100 + br i1 %9, label %_llgo_1, label %_llgo_2 _llgo_1: ; preds = %_llgo_0 - %18 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) - store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @111, i64 16 }, ptr %18, align 8 - %19 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %18, 1 - call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %19) + %10 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) + store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @111, i64 16 }, ptr %10, align 8 + %11 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %10, 1 + call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %11) unreachable _llgo_2: ; preds = %_llgo_0 @@ -876,23 +748,15 @@ _llgo_0: %2 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr @"_llgo_iface$GIQLduxo5T_xLwYbboAKy8LzikHgsGzb7WxrkOH3Lr4", ptr @"*_llgo_github.com/goplus/llgo/cl/_testgo/abimethod.T") %3 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %2, 0 %4 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %3, ptr %0, 1 - %5 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %4) - %6 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %4, 0 - %7 = getelementptr ptr, ptr %6, i64 3 - %8 = load ptr, ptr %7, align 8 - %9 = insertvalue { ptr, ptr } undef, ptr %8, 0 - %10 = insertvalue { ptr, ptr } %9, ptr %5, 1 - %11 = extractvalue { ptr, ptr } %10, 1 - %12 = extractvalue { ptr, ptr } %10, 0 - %13 = call i64 %12(ptr %11) - %14 = icmp ne i64 %13, 100 - br i1 %14, label %_llgo_1, label %_llgo_2 + %5 = call i64 @"__llgo_invoke._llgo_iface$GIQLduxo5T_xLwYbboAKy8LzikHgsGzb7WxrkOH3Lr4$m0.Demo2"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %4) + %6 = icmp ne i64 %5, 100 + br i1 %6, label %_llgo_1, label %_llgo_2 _llgo_1: ; preds = %_llgo_0 - %15 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) - store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @112, i64 16 }, ptr %15, align 8 - %16 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %15, 1 - call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %16) + %7 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) + store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @112, i64 16 }, ptr %7, align 8 + %8 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %7, 1 + call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %8) unreachable _llgo_2: ; preds = %_llgo_0 @@ -997,6 +861,20 @@ _llgo_0: declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr, ptr) +define weak_odr i64 @"__llgo_invoke._llgo_iface$WkyTd7mXEW0USaC6FIo7OG9IdUUyjAJl_h3PFrMEtHc$m0.Demo1"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) { +_llgo_0: + %1 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) + %2 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %0, 0 + %3 = getelementptr ptr, ptr %2, i64 3 + %4 = load ptr, ptr %3, align 8 + %5 = insertvalue { ptr, ptr } undef, ptr %4, 0 + %6 = insertvalue { ptr, ptr } %5, ptr %1, 1 + %7 = extractvalue { ptr, ptr } %6, 1 + %8 = extractvalue { ptr, ptr } %6, 0 + %9 = tail call i64 %8(ptr %7) + ret i64 %9 +} + declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface") declare i1 @"github.com/goplus/llgo/runtime/internal/runtime.strequal"(ptr, ptr) @@ -1044,6 +922,90 @@ _llgo_0: ret i64 %2 } +define weak_odr i64 @"__llgo_invoke._llgo_iface$GIQLduxo5T_xLwYbboAKy8LzikHgsGzb7WxrkOH3Lr4$m0.Demo2"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) { +_llgo_0: + %1 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) + %2 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %0, 0 + %3 = getelementptr ptr, ptr %2, i64 3 + %4 = load ptr, ptr %3, align 8 + %5 = insertvalue { ptr, ptr } undef, ptr %4, 0 + %6 = insertvalue { ptr, ptr } %5, ptr %1, 1 + %7 = extractvalue { ptr, ptr } %6, 1 + %8 = extractvalue { ptr, ptr } %6, 0 + %9 = tail call i64 %8(ptr %7) + ret i64 %9 +} + +define weak_odr i64 @"__llgo_invoke._llgo_iface$58AxoxqQ6sGUOM73FOqFrXsMlgxkU4HGd-S1Wl-ssYw$m0.Demo1"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) { +_llgo_0: + %1 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) + %2 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %0, 0 + %3 = getelementptr ptr, ptr %2, i64 3 + %4 = load ptr, ptr %3, align 8 + %5 = insertvalue { ptr, ptr } undef, ptr %4, 0 + %6 = insertvalue { ptr, ptr } %5, ptr %1, 1 + %7 = extractvalue { ptr, ptr } %6, 1 + %8 = extractvalue { ptr, ptr } %6, 0 + %9 = tail call i64 %8(ptr %7) + ret i64 %9 +} + +define weak_odr i64 @"__llgo_invoke._llgo_iface$58AxoxqQ6sGUOM73FOqFrXsMlgxkU4HGd-S1Wl-ssYw$m1.Demo2"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) { +_llgo_0: + %1 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) + %2 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %0, 0 + %3 = getelementptr ptr, ptr %2, i64 4 + %4 = load ptr, ptr %3, align 8 + %5 = insertvalue { ptr, ptr } undef, ptr %4, 0 + %6 = insertvalue { ptr, ptr } %5, ptr %1, 1 + %7 = extractvalue { ptr, ptr } %6, 1 + %8 = extractvalue { ptr, ptr } %6, 0 + %9 = tail call i64 %8(ptr %7) + ret i64 %9 +} + +define weak_odr i64 @"__llgo_invoke.github.com/goplus/llgo/cl/_testgo/abimethod.iface$kT5SIXt45Cspjl04Bof3DZVSOIltlDo-njpk6KqtZvA$m0.Demo1"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) { +_llgo_0: + %1 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) + %2 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %0, 0 + %3 = getelementptr ptr, ptr %2, i64 3 + %4 = load ptr, ptr %3, align 8 + %5 = insertvalue { ptr, ptr } undef, ptr %4, 0 + %6 = insertvalue { ptr, ptr } %5, ptr %1, 1 + %7 = extractvalue { ptr, ptr } %6, 1 + %8 = extractvalue { ptr, ptr } %6, 0 + %9 = tail call i64 %8(ptr %7) + ret i64 %9 +} + +define weak_odr i64 @"__llgo_invoke.github.com/goplus/llgo/cl/_testgo/abimethod.iface$kT5SIXt45Cspjl04Bof3DZVSOIltlDo-njpk6KqtZvA$m1.Demo2"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) { +_llgo_0: + %1 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) + %2 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %0, 0 + %3 = getelementptr ptr, ptr %2, i64 4 + %4 = load ptr, ptr %3, align 8 + %5 = insertvalue { ptr, ptr } undef, ptr %4, 0 + %6 = insertvalue { ptr, ptr } %5, ptr %1, 1 + %7 = extractvalue { ptr, ptr } %6, 1 + %8 = extractvalue { ptr, ptr } %6, 0 + %9 = tail call i64 %8(ptr %7) + ret i64 %9 +} + +define weak_odr i64 @"__llgo_invoke.github.com/goplus/llgo/cl/_testgo/abimethod.iface$kT5SIXt45Cspjl04Bof3DZVSOIltlDo-njpk6KqtZvA$m2.demo3"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) { +_llgo_0: + %1 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) + %2 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %0, 0 + %3 = getelementptr ptr, ptr %2, i64 5 + %4 = load ptr, ptr %3, align 8 + %5 = insertvalue { ptr, ptr } undef, ptr %4, 0 + %6 = insertvalue { ptr, ptr } %5, ptr %1, 1 + %7 = extractvalue { ptr, ptr } %6, 1 + %8 = extractvalue { ptr, ptr } %6, 0 + %9 = tail call i64 %8(ptr %7) + ret i64 %9 +} + declare ptr @bytes.NewBufferString(%"github.com/goplus/llgo/runtime/internal/runtime.String") define i64 @"github.com/goplus/llgo/cl/_testgo/abimethod.*struct{m int; *bytes.Buffer}.Available"(ptr %0) { @@ -1729,6 +1691,20 @@ declare { %"github.com/goplus/llgo/runtime/internal/runtime.Slice", %"github.com declare { i64, i1 } @"bytes.(*Buffer).tryGrowByReslice"(ptr, i64) +define weak_odr %"github.com/goplus/llgo/runtime/internal/runtime.String" @"__llgo_invoke._llgo_iface$O6rEVxIuA5O1E0KWpQBCgGx26X5gYhJ_nnJnHVL8_7U$m0.String"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) { +_llgo_0: + %1 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) + %2 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %0, 0 + %3 = getelementptr ptr, ptr %2, i64 3 + %4 = load ptr, ptr %3, align 8 + %5 = insertvalue { ptr, ptr } undef, ptr %4, 0 + %6 = insertvalue { ptr, ptr } %5, ptr %1, 1 + %7 = extractvalue { ptr, ptr } %6, 1 + %8 = extractvalue { ptr, ptr } %6, 0 + %9 = tail call %"github.com/goplus/llgo/runtime/internal/runtime.String" %8(ptr %7) + ret %"github.com/goplus/llgo/runtime/internal/runtime.String" %9 +} + declare i1 @"github.com/goplus/llgo/runtime/internal/runtime.StringEqual"(%"github.com/goplus/llgo/runtime/internal/runtime.String", %"github.com/goplus/llgo/runtime/internal/runtime.String") define linkonce ptr @"github.com/goplus/llgo/cl/_testgo/abimethod.(*Pointer[any]).Load"(ptr %0) { @@ -1755,6 +1731,34 @@ _llgo_0: ret i1 %3 } +define weak_odr void @"__llgo_invoke._llgo_iface$uinGjIxPTfzB5e5h5gH-0VIvLl5rQdJ_yx2UsrxQqds$m1.Store"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0, ptr %1) { +_llgo_0: + %2 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) + %3 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %0, 0 + %4 = getelementptr ptr, ptr %3, i64 4 + %5 = load ptr, ptr %4, align 8 + %6 = insertvalue { ptr, ptr } undef, ptr %5, 0 + %7 = insertvalue { ptr, ptr } %6, ptr %2, 1 + %8 = extractvalue { ptr, ptr } %7, 1 + %9 = extractvalue { ptr, ptr } %7, 0 + tail call void %9(ptr %8, ptr %1) + ret void +} + +define weak_odr ptr @"__llgo_invoke._llgo_iface$uinGjIxPTfzB5e5h5gH-0VIvLl5rQdJ_yx2UsrxQqds$m0.Load"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) { +_llgo_0: + %1 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) + %2 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %0, 0 + %3 = getelementptr ptr, ptr %2, i64 3 + %4 = load ptr, ptr %3, align 8 + %5 = insertvalue { ptr, ptr } undef, ptr %4, 0 + %6 = insertvalue { ptr, ptr } %5, ptr %1, 1 + %7 = extractvalue { ptr, ptr } %6, 1 + %8 = extractvalue { ptr, ptr } %6, 0 + %9 = tail call ptr %8(ptr %7) + ret ptr %9 +} + declare i1 @"github.com/goplus/llgo/runtime/internal/runtime.MatchConcreteType"(ptr, ptr) attributes #0 = { nocallback nofree nounwind willreturn memory(argmem: write) } diff --git a/cl/_testgo/closureall/out.ll b/cl/_testgo/closureall/out.ll index 0d1f779163..689a3787d1 100644 --- a/cl/_testgo/closureall/out.ll +++ b/cl/_testgo/closureall/out.ll @@ -249,16 +249,8 @@ define i64 @"github.com/goplus/llgo/cl/_testgo/closureall.interface{Add(int) int _llgo_0: %2 = load { %"github.com/goplus/llgo/runtime/internal/runtime.iface" }, ptr %0, align 8 %3 = extractvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %2, 0 - %4 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %3) - %5 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %3, 0 - %6 = getelementptr ptr, ptr %5, i64 3 - %7 = load ptr, ptr %6, align 8 - %8 = insertvalue { ptr, ptr } undef, ptr %7, 0 - %9 = insertvalue { ptr, ptr } %8, ptr %4, 1 - %10 = extractvalue { ptr, ptr } %9, 1 - %11 = extractvalue { ptr, ptr } %9, 0 - %12 = call i64 %11(ptr %10, i64 %1) - ret i64 %12 + %4 = call i64 @"__llgo_invoke._llgo_iface$VdBKYV8-gcMjZtZfcf-u2oKoj9Lu3VXwuG8TGCW2S4A$m0.Add"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %3, i64 %1) + ret i64 %4 } declare double @sqrt(double) @@ -271,6 +263,20 @@ _llgo_0: ret i64 %2 } +define weak_odr i64 @"__llgo_invoke._llgo_iface$VdBKYV8-gcMjZtZfcf-u2oKoj9Lu3VXwuG8TGCW2S4A$m0.Add"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0, i64 %1) { +_llgo_0: + %2 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) + %3 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %0, 0 + %4 = getelementptr ptr, ptr %3, i64 3 + %5 = load ptr, ptr %4, align 8 + %6 = insertvalue { ptr, ptr } undef, ptr %5, 0 + %7 = insertvalue { ptr, ptr } %6, ptr %2, 1 + %8 = extractvalue { ptr, ptr } %7, 1 + %9 = extractvalue { ptr, ptr } %7, 0 + %10 = tail call i64 %9(ptr %8, i64 %1) + ret i64 %10 +} + declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface") attributes #0 = { nocallback nofree nounwind willreturn memory(argmem: write) } diff --git a/cl/_testgo/embedunexport-1598/out.ll b/cl/_testgo/embedunexport-1598/out.ll index 216e6afead..fc7e01aeff 100644 --- a/cl/_testgo/embedunexport-1598/out.ll +++ b/cl/_testgo/embedunexport-1598/out.ll @@ -110,16 +110,8 @@ _llgo_0: %4 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %3, 0 %5 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %4, ptr %1, 1 call void @"github.com/goplus/llgo/cl/_testdata/embedunexport.Use"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %5) - %6 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %5) - %7 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %5, 0 - %8 = getelementptr ptr, ptr %7, i64 3 - %9 = load ptr, ptr %8, align 8 - %10 = insertvalue { ptr, ptr } undef, ptr %9, 0 - %11 = insertvalue { ptr, ptr } %10, ptr %6, 1 - %12 = extractvalue { ptr, ptr } %11, 1 - %13 = extractvalue { ptr, ptr } %11, 0 - %14 = call %"github.com/goplus/llgo/runtime/internal/runtime.String" %13(ptr %12) - call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintString"(%"github.com/goplus/llgo/runtime/internal/runtime.String" %14) + %6 = call %"github.com/goplus/llgo/runtime/internal/runtime.String" @"__llgo_invoke.github.com/goplus/llgo/cl/_testgo/embedunexport-1598.iface$gGW7PSocDeRlTvk5kuSew8C-TZ8OXQrGkMlj2EUlZ9E$m0.Name"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %5) + call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintString"(%"github.com/goplus/llgo/runtime/internal/runtime.String" %6) call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8 10) ret void } @@ -167,6 +159,20 @@ declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr, ptr) declare void @"github.com/goplus/llgo/cl/_testdata/embedunexport.Use"(%"github.com/goplus/llgo/runtime/internal/runtime.iface") +define weak_odr %"github.com/goplus/llgo/runtime/internal/runtime.String" @"__llgo_invoke.github.com/goplus/llgo/cl/_testgo/embedunexport-1598.iface$gGW7PSocDeRlTvk5kuSew8C-TZ8OXQrGkMlj2EUlZ9E$m0.Name"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) { +_llgo_0: + %1 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) + %2 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %0, 0 + %3 = getelementptr ptr, ptr %2, i64 3 + %4 = load ptr, ptr %3, align 8 + %5 = insertvalue { ptr, ptr } undef, ptr %4, 0 + %6 = insertvalue { ptr, ptr } %5, ptr %1, 1 + %7 = extractvalue { ptr, ptr } %6, 1 + %8 = extractvalue { ptr, ptr } %6, 0 + %9 = tail call %"github.com/goplus/llgo/runtime/internal/runtime.String" %8(ptr %7) + ret %"github.com/goplus/llgo/runtime/internal/runtime.String" %9 +} + declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface") declare void @"github.com/goplus/llgo/runtime/internal/runtime.PrintString"(%"github.com/goplus/llgo/runtime/internal/runtime.String") diff --git a/cl/_testgo/errors/out.ll b/cl/_testgo/errors/out.ll index fc7a97faea..05e86d7062 100644 --- a/cl/_testgo/errors/out.ll +++ b/cl/_testgo/errors/out.ll @@ -72,16 +72,8 @@ _llgo_0: %0 = call %"github.com/goplus/llgo/runtime/internal/runtime.iface" @"github.com/goplus/llgo/cl/_testgo/errors.New"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @7, i64 8 }) call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintIface"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8 10) - %1 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) - %2 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %0, 0 - %3 = getelementptr ptr, ptr %2, i64 3 - %4 = load ptr, ptr %3, align 8 - %5 = insertvalue { ptr, ptr } undef, ptr %4, 0 - %6 = insertvalue { ptr, ptr } %5, ptr %1, 1 - %7 = extractvalue { ptr, ptr } %6, 1 - %8 = extractvalue { ptr, ptr } %6, 0 - %9 = call %"github.com/goplus/llgo/runtime/internal/runtime.String" %8(ptr %7) - call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintString"(%"github.com/goplus/llgo/runtime/internal/runtime.String" %9) + %1 = call %"github.com/goplus/llgo/runtime/internal/runtime.String" @"__llgo_invoke._llgo_iface$Fh8eUJ-Gw4e6TYuajcFIOSCuqSPKAt5nS4ow7xeGXEU$m0.Error"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) + call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintString"(%"github.com/goplus/llgo/runtime/internal/runtime.String" %1) call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8 10) ret void } @@ -120,6 +112,20 @@ declare void @"github.com/goplus/llgo/runtime/internal/runtime.PrintIface"(%"git declare void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8) +define weak_odr %"github.com/goplus/llgo/runtime/internal/runtime.String" @"__llgo_invoke._llgo_iface$Fh8eUJ-Gw4e6TYuajcFIOSCuqSPKAt5nS4ow7xeGXEU$m0.Error"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) { +_llgo_0: + %1 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) + %2 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %0, 0 + %3 = getelementptr ptr, ptr %2, i64 3 + %4 = load ptr, ptr %3, align 8 + %5 = insertvalue { ptr, ptr } undef, ptr %4, 0 + %6 = insertvalue { ptr, ptr } %5, ptr %1, 1 + %7 = extractvalue { ptr, ptr } %6, 1 + %8 = extractvalue { ptr, ptr } %6, 0 + %9 = tail call %"github.com/goplus/llgo/runtime/internal/runtime.String" %8(ptr %7) + ret %"github.com/goplus/llgo/runtime/internal/runtime.String" %9 +} + declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface") declare void @"github.com/goplus/llgo/runtime/internal/runtime.PrintString"(%"github.com/goplus/llgo/runtime/internal/runtime.String") diff --git a/cl/_testgo/ifaceprom/out.ll b/cl/_testgo/ifaceprom/out.ll index a001d6e3a3..f090566611 100644 --- a/cl/_testgo/ifaceprom/out.ll +++ b/cl/_testgo/ifaceprom/out.ll @@ -56,16 +56,8 @@ _llgo_0: store %"github.com/goplus/llgo/cl/_testgo/ifaceprom.S" %0, ptr %1, align 8 %2 = getelementptr inbounds %"github.com/goplus/llgo/cl/_testgo/ifaceprom.S", ptr %1, i32 0, i32 0 %3 = load %"github.com/goplus/llgo/runtime/internal/runtime.iface", ptr %2, align 8 - %4 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %3) - %5 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %3, 0 - %6 = getelementptr ptr, ptr %5, i64 3 - %7 = load ptr, ptr %6, align 8 - %8 = insertvalue { ptr, ptr } undef, ptr %7, 0 - %9 = insertvalue { ptr, ptr } %8, ptr %4, 1 - %10 = extractvalue { ptr, ptr } %9, 1 - %11 = extractvalue { ptr, ptr } %9, 0 - %12 = call i64 %11(ptr %10) - ret i64 %12 + %4 = call i64 @"__llgo_invoke.github.com/goplus/llgo/cl/_testgo/ifaceprom.iface$zZ89tENb5h_KNjvpxf1TXPfaWFYn0IZrZwyVf42lRtA$m0.one"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %3) + ret i64 %4 } define %"github.com/goplus/llgo/runtime/internal/runtime.String" @"github.com/goplus/llgo/cl/_testgo/ifaceprom.S.two"(%"github.com/goplus/llgo/cl/_testgo/ifaceprom.S" %0) { @@ -75,48 +67,24 @@ _llgo_0: store %"github.com/goplus/llgo/cl/_testgo/ifaceprom.S" %0, ptr %1, align 8 %2 = getelementptr inbounds %"github.com/goplus/llgo/cl/_testgo/ifaceprom.S", ptr %1, i32 0, i32 0 %3 = load %"github.com/goplus/llgo/runtime/internal/runtime.iface", ptr %2, align 8 - %4 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %3) - %5 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %3, 0 - %6 = getelementptr ptr, ptr %5, i64 4 - %7 = load ptr, ptr %6, align 8 - %8 = insertvalue { ptr, ptr } undef, ptr %7, 0 - %9 = insertvalue { ptr, ptr } %8, ptr %4, 1 - %10 = extractvalue { ptr, ptr } %9, 1 - %11 = extractvalue { ptr, ptr } %9, 0 - %12 = call %"github.com/goplus/llgo/runtime/internal/runtime.String" %11(ptr %10) - ret %"github.com/goplus/llgo/runtime/internal/runtime.String" %12 + %4 = call %"github.com/goplus/llgo/runtime/internal/runtime.String" @"__llgo_invoke.github.com/goplus/llgo/cl/_testgo/ifaceprom.iface$zZ89tENb5h_KNjvpxf1TXPfaWFYn0IZrZwyVf42lRtA$m1.two"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %3) + ret %"github.com/goplus/llgo/runtime/internal/runtime.String" %4 } define i64 @"github.com/goplus/llgo/cl/_testgo/ifaceprom.(*S).one"(ptr %0) { _llgo_0: %1 = getelementptr inbounds %"github.com/goplus/llgo/cl/_testgo/ifaceprom.S", ptr %0, i32 0, i32 0 %2 = load %"github.com/goplus/llgo/runtime/internal/runtime.iface", ptr %1, align 8 - %3 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %2) - %4 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %2, 0 - %5 = getelementptr ptr, ptr %4, i64 3 - %6 = load ptr, ptr %5, align 8 - %7 = insertvalue { ptr, ptr } undef, ptr %6, 0 - %8 = insertvalue { ptr, ptr } %7, ptr %3, 1 - %9 = extractvalue { ptr, ptr } %8, 1 - %10 = extractvalue { ptr, ptr } %8, 0 - %11 = call i64 %10(ptr %9) - ret i64 %11 + %3 = call i64 @"__llgo_invoke.github.com/goplus/llgo/cl/_testgo/ifaceprom.iface$zZ89tENb5h_KNjvpxf1TXPfaWFYn0IZrZwyVf42lRtA$m0.one"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %2) + ret i64 %3 } define %"github.com/goplus/llgo/runtime/internal/runtime.String" @"github.com/goplus/llgo/cl/_testgo/ifaceprom.(*S).two"(ptr %0) { _llgo_0: %1 = getelementptr inbounds %"github.com/goplus/llgo/cl/_testgo/ifaceprom.S", ptr %0, i32 0, i32 0 %2 = load %"github.com/goplus/llgo/runtime/internal/runtime.iface", ptr %1, align 8 - %3 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %2) - %4 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %2, 0 - %5 = getelementptr ptr, ptr %4, i64 4 - %6 = load ptr, ptr %5, align 8 - %7 = insertvalue { ptr, ptr } undef, ptr %6, 0 - %8 = insertvalue { ptr, ptr } %7, ptr %3, 1 - %9 = extractvalue { ptr, ptr } %8, 1 - %10 = extractvalue { ptr, ptr } %8, 0 - %11 = call %"github.com/goplus/llgo/runtime/internal/runtime.String" %10(ptr %9) - ret %"github.com/goplus/llgo/runtime/internal/runtime.String" %11 + %3 = call %"github.com/goplus/llgo/runtime/internal/runtime.String" @"__llgo_invoke.github.com/goplus/llgo/cl/_testgo/ifaceprom.iface$zZ89tENb5h_KNjvpxf1TXPfaWFYn0IZrZwyVf42lRtA$m1.two"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %2) + ret %"github.com/goplus/llgo/runtime/internal/runtime.String" %3 } define i64 @"github.com/goplus/llgo/cl/_testgo/ifaceprom.impl.one"(%"github.com/goplus/llgo/cl/_testgo/ifaceprom.impl" %0) { @@ -169,143 +137,111 @@ _llgo_0: store %"github.com/goplus/llgo/runtime/internal/runtime.iface" %5, ptr %1, align 8 %6 = getelementptr inbounds %"github.com/goplus/llgo/cl/_testgo/ifaceprom.S", ptr %0, i32 0, i32 0 %7 = load %"github.com/goplus/llgo/runtime/internal/runtime.iface", ptr %6, align 8 - %8 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %7) - %9 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %7, 0 - %10 = getelementptr ptr, ptr %9, i64 3 - %11 = load ptr, ptr %10, align 8 - %12 = insertvalue { ptr, ptr } undef, ptr %11, 0 - %13 = insertvalue { ptr, ptr } %12, ptr %8, 1 - %14 = extractvalue { ptr, ptr } %13, 1 - %15 = extractvalue { ptr, ptr } %13, 0 - %16 = call i64 %15(ptr %14) - %17 = icmp ne i64 %16, 1 - br i1 %17, label %_llgo_1, label %_llgo_2 + %8 = call i64 @"__llgo_invoke.github.com/goplus/llgo/cl/_testgo/ifaceprom.iface$zZ89tENb5h_KNjvpxf1TXPfaWFYn0IZrZwyVf42lRtA$m0.one"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %7) + %9 = icmp ne i64 %8, 1 + br i1 %9, label %_llgo_1, label %_llgo_2 _llgo_1: ; preds = %_llgo_0 - %18 = inttoptr i64 %16 to ptr - %19 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_int, ptr undef }, ptr %18, 1 - call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %19) + %10 = inttoptr i64 %8 to ptr + %11 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_int, ptr undef }, ptr %10, 1 + call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %11) unreachable _llgo_2: ; preds = %_llgo_0 - %20 = load %"github.com/goplus/llgo/cl/_testgo/ifaceprom.S", ptr %0, align 8 - %21 = extractvalue %"github.com/goplus/llgo/cl/_testgo/ifaceprom.S" %20, 0 - %22 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %21) - %23 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %21, 0 - %24 = getelementptr ptr, ptr %23, i64 3 - %25 = load ptr, ptr %24, align 8 - %26 = insertvalue { ptr, ptr } undef, ptr %25, 0 - %27 = insertvalue { ptr, ptr } %26, ptr %22, 1 - %28 = extractvalue { ptr, ptr } %27, 1 - %29 = extractvalue { ptr, ptr } %27, 0 - %30 = call i64 %29(ptr %28) - %31 = icmp ne i64 %30, 1 - br i1 %31, label %_llgo_3, label %_llgo_4 + %12 = load %"github.com/goplus/llgo/cl/_testgo/ifaceprom.S", ptr %0, align 8 + %13 = extractvalue %"github.com/goplus/llgo/cl/_testgo/ifaceprom.S" %12, 0 + %14 = call i64 @"__llgo_invoke.github.com/goplus/llgo/cl/_testgo/ifaceprom.iface$zZ89tENb5h_KNjvpxf1TXPfaWFYn0IZrZwyVf42lRtA$m0.one"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %13) + %15 = icmp ne i64 %14, 1 + br i1 %15, label %_llgo_3, label %_llgo_4 _llgo_3: ; preds = %_llgo_2 - %32 = inttoptr i64 %30 to ptr - %33 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_int, ptr undef }, ptr %32, 1 - call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %33) + %16 = inttoptr i64 %14 to ptr + %17 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_int, ptr undef }, ptr %16, 1 + call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %17) unreachable _llgo_4: ; preds = %_llgo_2 - %34 = getelementptr inbounds %"github.com/goplus/llgo/cl/_testgo/ifaceprom.S", ptr %0, i32 0, i32 0 - %35 = load %"github.com/goplus/llgo/runtime/internal/runtime.iface", ptr %34, align 8 - %36 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfaceType"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %35) - %37 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %35, 1 + %18 = getelementptr inbounds %"github.com/goplus/llgo/cl/_testgo/ifaceprom.S", ptr %0, i32 0, i32 0 + %19 = load %"github.com/goplus/llgo/runtime/internal/runtime.iface", ptr %18, align 8 + %20 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfaceType"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %19) + %21 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %19, 1 br i1 true, label %_llgo_17, label %_llgo_18 _llgo_5: ; preds = %_llgo_17 - %38 = inttoptr i64 %93 to ptr - %39 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_int, ptr undef }, ptr %38, 1 - call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %39) + %22 = inttoptr i64 %61 to ptr + %23 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_int, ptr undef }, ptr %22, 1 + call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %23) unreachable _llgo_6: ; preds = %_llgo_17 - %40 = load %"github.com/goplus/llgo/cl/_testgo/ifaceprom.S", ptr %0, align 8 - %41 = extractvalue %"github.com/goplus/llgo/cl/_testgo/ifaceprom.S" %40, 0 - %42 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfaceType"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %41) - %43 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %41, 1 + %24 = load %"github.com/goplus/llgo/cl/_testgo/ifaceprom.S", ptr %0, align 8 + %25 = extractvalue %"github.com/goplus/llgo/cl/_testgo/ifaceprom.S" %24, 0 + %26 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfaceType"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %25) + %27 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %25, 1 br i1 true, label %_llgo_19, label %_llgo_20 _llgo_7: ; preds = %_llgo_19 - %44 = inttoptr i64 %102 to ptr - %45 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_int, ptr undef }, ptr %44, 1 - call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %45) + %28 = inttoptr i64 %70 to ptr + %29 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_int, ptr undef }, ptr %28, 1 + call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %29) unreachable _llgo_8: ; preds = %_llgo_19 - %46 = getelementptr inbounds %"github.com/goplus/llgo/cl/_testgo/ifaceprom.S", ptr %0, i32 0, i32 0 - %47 = load %"github.com/goplus/llgo/runtime/internal/runtime.iface", ptr %46, align 8 - %48 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %47) - %49 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %47, 0 - %50 = getelementptr ptr, ptr %49, i64 4 - %51 = load ptr, ptr %50, align 8 - %52 = insertvalue { ptr, ptr } undef, ptr %51, 0 - %53 = insertvalue { ptr, ptr } %52, ptr %48, 1 - %54 = extractvalue { ptr, ptr } %53, 1 - %55 = extractvalue { ptr, ptr } %53, 0 - %56 = call %"github.com/goplus/llgo/runtime/internal/runtime.String" %55(ptr %54) - %57 = call i1 @"github.com/goplus/llgo/runtime/internal/runtime.StringEqual"(%"github.com/goplus/llgo/runtime/internal/runtime.String" %56, %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @0, i64 3 }) - %58 = xor i1 %57, true - br i1 %58, label %_llgo_9, label %_llgo_10 + %30 = getelementptr inbounds %"github.com/goplus/llgo/cl/_testgo/ifaceprom.S", ptr %0, i32 0, i32 0 + %31 = load %"github.com/goplus/llgo/runtime/internal/runtime.iface", ptr %30, align 8 + %32 = call %"github.com/goplus/llgo/runtime/internal/runtime.String" @"__llgo_invoke.github.com/goplus/llgo/cl/_testgo/ifaceprom.iface$zZ89tENb5h_KNjvpxf1TXPfaWFYn0IZrZwyVf42lRtA$m1.two"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %31) + %33 = call i1 @"github.com/goplus/llgo/runtime/internal/runtime.StringEqual"(%"github.com/goplus/llgo/runtime/internal/runtime.String" %32, %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @0, i64 3 }) + %34 = xor i1 %33, true + br i1 %34, label %_llgo_9, label %_llgo_10 _llgo_9: ; preds = %_llgo_8 - %59 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) - store %"github.com/goplus/llgo/runtime/internal/runtime.String" %56, ptr %59, align 8 - %60 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %59, 1 - call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %60) + %35 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) + store %"github.com/goplus/llgo/runtime/internal/runtime.String" %32, ptr %35, align 8 + %36 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %35, 1 + call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %36) unreachable _llgo_10: ; preds = %_llgo_8 - %61 = load %"github.com/goplus/llgo/cl/_testgo/ifaceprom.S", ptr %0, align 8 - %62 = extractvalue %"github.com/goplus/llgo/cl/_testgo/ifaceprom.S" %61, 0 - %63 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %62) - %64 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %62, 0 - %65 = getelementptr ptr, ptr %64, i64 4 - %66 = load ptr, ptr %65, align 8 - %67 = insertvalue { ptr, ptr } undef, ptr %66, 0 - %68 = insertvalue { ptr, ptr } %67, ptr %63, 1 - %69 = extractvalue { ptr, ptr } %68, 1 - %70 = extractvalue { ptr, ptr } %68, 0 - %71 = call %"github.com/goplus/llgo/runtime/internal/runtime.String" %70(ptr %69) - %72 = call i1 @"github.com/goplus/llgo/runtime/internal/runtime.StringEqual"(%"github.com/goplus/llgo/runtime/internal/runtime.String" %71, %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @0, i64 3 }) - %73 = xor i1 %72, true - br i1 %73, label %_llgo_11, label %_llgo_12 + %37 = load %"github.com/goplus/llgo/cl/_testgo/ifaceprom.S", ptr %0, align 8 + %38 = extractvalue %"github.com/goplus/llgo/cl/_testgo/ifaceprom.S" %37, 0 + %39 = call %"github.com/goplus/llgo/runtime/internal/runtime.String" @"__llgo_invoke.github.com/goplus/llgo/cl/_testgo/ifaceprom.iface$zZ89tENb5h_KNjvpxf1TXPfaWFYn0IZrZwyVf42lRtA$m1.two"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %38) + %40 = call i1 @"github.com/goplus/llgo/runtime/internal/runtime.StringEqual"(%"github.com/goplus/llgo/runtime/internal/runtime.String" %39, %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @0, i64 3 }) + %41 = xor i1 %40, true + br i1 %41, label %_llgo_11, label %_llgo_12 _llgo_11: ; preds = %_llgo_10 - %74 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) - store %"github.com/goplus/llgo/runtime/internal/runtime.String" %71, ptr %74, align 8 - %75 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %74, 1 - call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %75) + %42 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) + store %"github.com/goplus/llgo/runtime/internal/runtime.String" %39, ptr %42, align 8 + %43 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %42, 1 + call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %43) unreachable _llgo_12: ; preds = %_llgo_10 - %76 = getelementptr inbounds %"github.com/goplus/llgo/cl/_testgo/ifaceprom.S", ptr %0, i32 0, i32 0 - %77 = load %"github.com/goplus/llgo/runtime/internal/runtime.iface", ptr %76, align 8 - %78 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfaceType"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %77) - %79 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %77, 1 + %44 = getelementptr inbounds %"github.com/goplus/llgo/cl/_testgo/ifaceprom.S", ptr %0, i32 0, i32 0 + %45 = load %"github.com/goplus/llgo/runtime/internal/runtime.iface", ptr %44, align 8 + %46 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfaceType"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %45) + %47 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %45, 1 br i1 true, label %_llgo_21, label %_llgo_22 _llgo_13: ; preds = %_llgo_21 - %80 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) - store %"github.com/goplus/llgo/runtime/internal/runtime.String" %111, ptr %80, align 8 - %81 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %80, 1 - call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %81) + %48 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) + store %"github.com/goplus/llgo/runtime/internal/runtime.String" %79, ptr %48, align 8 + %49 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %48, 1 + call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %49) unreachable _llgo_14: ; preds = %_llgo_21 - %82 = load %"github.com/goplus/llgo/cl/_testgo/ifaceprom.S", ptr %0, align 8 - %83 = extractvalue %"github.com/goplus/llgo/cl/_testgo/ifaceprom.S" %82, 0 - %84 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfaceType"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %83) - %85 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %83, 1 + %50 = load %"github.com/goplus/llgo/cl/_testgo/ifaceprom.S", ptr %0, align 8 + %51 = extractvalue %"github.com/goplus/llgo/cl/_testgo/ifaceprom.S" %50, 0 + %52 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfaceType"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %51) + %53 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %51, 1 br i1 true, label %_llgo_23, label %_llgo_24 _llgo_15: ; preds = %_llgo_23 - %86 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) - store %"github.com/goplus/llgo/runtime/internal/runtime.String" %121, ptr %86, align 8 - %87 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %86, 1 - call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %87) + %54 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) + store %"github.com/goplus/llgo/runtime/internal/runtime.String" %89, ptr %54, align 8 + %55 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %54, 1 + call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %55) unreachable _llgo_16: ; preds = %_llgo_23 @@ -314,85 +250,113 @@ _llgo_16: ; preds = %_llgo_23 ret void _llgo_17: ; preds = %_llgo_4 - %88 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) - %89 = getelementptr inbounds { %"github.com/goplus/llgo/runtime/internal/runtime.iface" }, ptr %88, i32 0, i32 0 - store %"github.com/goplus/llgo/runtime/internal/runtime.iface" %35, ptr %89, align 8 - %90 = insertvalue { ptr, ptr } { ptr @"github.com/goplus/llgo/cl/_testgo/ifaceprom.I.one$bound", ptr undef }, ptr %88, 1 - %91 = extractvalue { ptr, ptr } %90, 1 - %92 = extractvalue { ptr, ptr } %90, 0 - %93 = call i64 %92(ptr %91) - %94 = icmp ne i64 %93, 1 - br i1 %94, label %_llgo_5, label %_llgo_6 + %56 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) + %57 = getelementptr inbounds { %"github.com/goplus/llgo/runtime/internal/runtime.iface" }, ptr %56, i32 0, i32 0 + store %"github.com/goplus/llgo/runtime/internal/runtime.iface" %19, ptr %57, align 8 + %58 = insertvalue { ptr, ptr } { ptr @"github.com/goplus/llgo/cl/_testgo/ifaceprom.I.one$bound", ptr undef }, ptr %56, 1 + %59 = extractvalue { ptr, ptr } %58, 1 + %60 = extractvalue { ptr, ptr } %58, 0 + %61 = call i64 %60(ptr %59) + %62 = icmp ne i64 %61, 1 + br i1 %62, label %_llgo_5, label %_llgo_6 _llgo_18: ; preds = %_llgo_4 - %95 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) - store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @12, i64 116 }, ptr %95, align 8 - %96 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %95, 1 - call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %96) + %63 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) + store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @12, i64 116 }, ptr %63, align 8 + %64 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %63, 1 + call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %64) unreachable _llgo_19: ; preds = %_llgo_6 - %97 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) - %98 = getelementptr inbounds { %"github.com/goplus/llgo/runtime/internal/runtime.iface" }, ptr %97, i32 0, i32 0 - store %"github.com/goplus/llgo/runtime/internal/runtime.iface" %41, ptr %98, align 8 - %99 = insertvalue { ptr, ptr } { ptr @"github.com/goplus/llgo/cl/_testgo/ifaceprom.I.one$bound", ptr undef }, ptr %97, 1 - %100 = extractvalue { ptr, ptr } %99, 1 - %101 = extractvalue { ptr, ptr } %99, 0 - %102 = call i64 %101(ptr %100) - %103 = icmp ne i64 %102, 1 - br i1 %103, label %_llgo_7, label %_llgo_8 + %65 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) + %66 = getelementptr inbounds { %"github.com/goplus/llgo/runtime/internal/runtime.iface" }, ptr %65, i32 0, i32 0 + store %"github.com/goplus/llgo/runtime/internal/runtime.iface" %25, ptr %66, align 8 + %67 = insertvalue { ptr, ptr } { ptr @"github.com/goplus/llgo/cl/_testgo/ifaceprom.I.one$bound", ptr undef }, ptr %65, 1 + %68 = extractvalue { ptr, ptr } %67, 1 + %69 = extractvalue { ptr, ptr } %67, 0 + %70 = call i64 %69(ptr %68) + %71 = icmp ne i64 %70, 1 + br i1 %71, label %_llgo_7, label %_llgo_8 _llgo_20: ; preds = %_llgo_6 - %104 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) - store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @12, i64 116 }, ptr %104, align 8 - %105 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %104, 1 - call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %105) + %72 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) + store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @12, i64 116 }, ptr %72, align 8 + %73 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %72, 1 + call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %73) unreachable _llgo_21: ; preds = %_llgo_12 - %106 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) - %107 = getelementptr inbounds { %"github.com/goplus/llgo/runtime/internal/runtime.iface" }, ptr %106, i32 0, i32 0 - store %"github.com/goplus/llgo/runtime/internal/runtime.iface" %77, ptr %107, align 8 - %108 = insertvalue { ptr, ptr } { ptr @"github.com/goplus/llgo/cl/_testgo/ifaceprom.I.two$bound", ptr undef }, ptr %106, 1 - %109 = extractvalue { ptr, ptr } %108, 1 - %110 = extractvalue { ptr, ptr } %108, 0 - %111 = call %"github.com/goplus/llgo/runtime/internal/runtime.String" %110(ptr %109) - %112 = call i1 @"github.com/goplus/llgo/runtime/internal/runtime.StringEqual"(%"github.com/goplus/llgo/runtime/internal/runtime.String" %111, %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @0, i64 3 }) - %113 = xor i1 %112, true - br i1 %113, label %_llgo_13, label %_llgo_14 + %74 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) + %75 = getelementptr inbounds { %"github.com/goplus/llgo/runtime/internal/runtime.iface" }, ptr %74, i32 0, i32 0 + store %"github.com/goplus/llgo/runtime/internal/runtime.iface" %45, ptr %75, align 8 + %76 = insertvalue { ptr, ptr } { ptr @"github.com/goplus/llgo/cl/_testgo/ifaceprom.I.two$bound", ptr undef }, ptr %74, 1 + %77 = extractvalue { ptr, ptr } %76, 1 + %78 = extractvalue { ptr, ptr } %76, 0 + %79 = call %"github.com/goplus/llgo/runtime/internal/runtime.String" %78(ptr %77) + %80 = call i1 @"github.com/goplus/llgo/runtime/internal/runtime.StringEqual"(%"github.com/goplus/llgo/runtime/internal/runtime.String" %79, %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @0, i64 3 }) + %81 = xor i1 %80, true + br i1 %81, label %_llgo_13, label %_llgo_14 _llgo_22: ; preds = %_llgo_12 - %114 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) - store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @12, i64 116 }, ptr %114, align 8 - %115 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %114, 1 - call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %115) + %82 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) + store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @12, i64 116 }, ptr %82, align 8 + %83 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %82, 1 + call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %83) unreachable _llgo_23: ; preds = %_llgo_14 - %116 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) - %117 = getelementptr inbounds { %"github.com/goplus/llgo/runtime/internal/runtime.iface" }, ptr %116, i32 0, i32 0 - store %"github.com/goplus/llgo/runtime/internal/runtime.iface" %83, ptr %117, align 8 - %118 = insertvalue { ptr, ptr } { ptr @"github.com/goplus/llgo/cl/_testgo/ifaceprom.I.two$bound", ptr undef }, ptr %116, 1 - %119 = extractvalue { ptr, ptr } %118, 1 - %120 = extractvalue { ptr, ptr } %118, 0 - %121 = call %"github.com/goplus/llgo/runtime/internal/runtime.String" %120(ptr %119) - %122 = call i1 @"github.com/goplus/llgo/runtime/internal/runtime.StringEqual"(%"github.com/goplus/llgo/runtime/internal/runtime.String" %121, %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @0, i64 3 }) - %123 = xor i1 %122, true - br i1 %123, label %_llgo_15, label %_llgo_16 + %84 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) + %85 = getelementptr inbounds { %"github.com/goplus/llgo/runtime/internal/runtime.iface" }, ptr %84, i32 0, i32 0 + store %"github.com/goplus/llgo/runtime/internal/runtime.iface" %51, ptr %85, align 8 + %86 = insertvalue { ptr, ptr } { ptr @"github.com/goplus/llgo/cl/_testgo/ifaceprom.I.two$bound", ptr undef }, ptr %84, 1 + %87 = extractvalue { ptr, ptr } %86, 1 + %88 = extractvalue { ptr, ptr } %86, 0 + %89 = call %"github.com/goplus/llgo/runtime/internal/runtime.String" %88(ptr %87) + %90 = call i1 @"github.com/goplus/llgo/runtime/internal/runtime.StringEqual"(%"github.com/goplus/llgo/runtime/internal/runtime.String" %89, %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @0, i64 3 }) + %91 = xor i1 %90, true + br i1 %91, label %_llgo_15, label %_llgo_16 _llgo_24: ; preds = %_llgo_14 - %124 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) - store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @12, i64 116 }, ptr %124, align 8 - %125 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %124, 1 - call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %125) + %92 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) + store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @12, i64 116 }, ptr %92, align 8 + %93 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %92, 1 + call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %93) unreachable } ; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write) declare void @llvm.memset(ptr nocapture writeonly, i8, i64, i1 immarg) #0 +define weak_odr i64 @"__llgo_invoke.github.com/goplus/llgo/cl/_testgo/ifaceprom.iface$zZ89tENb5h_KNjvpxf1TXPfaWFYn0IZrZwyVf42lRtA$m0.one"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) { +_llgo_0: + %1 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) + %2 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %0, 0 + %3 = getelementptr ptr, ptr %2, i64 3 + %4 = load ptr, ptr %3, align 8 + %5 = insertvalue { ptr, ptr } undef, ptr %4, 0 + %6 = insertvalue { ptr, ptr } %5, ptr %1, 1 + %7 = extractvalue { ptr, ptr } %6, 1 + %8 = extractvalue { ptr, ptr } %6, 0 + %9 = tail call i64 %8(ptr %7) + ret i64 %9 +} + declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface") +define weak_odr %"github.com/goplus/llgo/runtime/internal/runtime.String" @"__llgo_invoke.github.com/goplus/llgo/cl/_testgo/ifaceprom.iface$zZ89tENb5h_KNjvpxf1TXPfaWFYn0IZrZwyVf42lRtA$m1.two"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) { +_llgo_0: + %1 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) + %2 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %0, 0 + %3 = getelementptr ptr, ptr %2, i64 4 + %4 = load ptr, ptr %3, align 8 + %5 = insertvalue { ptr, ptr } undef, ptr %4, 0 + %6 = insertvalue { ptr, ptr } %5, ptr %1, 1 + %7 = extractvalue { ptr, ptr } %6, 1 + %8 = extractvalue { ptr, ptr } %6, 0 + %9 = tail call %"github.com/goplus/llgo/runtime/internal/runtime.String" %8(ptr %7) + ret %"github.com/goplus/llgo/runtime/internal/runtime.String" %9 +} + declare i1 @"github.com/goplus/llgo/runtime/internal/runtime.memequal0"(ptr, ptr) define linkonce i1 @"__llgo_stub.github.com/goplus/llgo/runtime/internal/runtime.memequal0"(ptr %0, ptr %1, ptr %2) { @@ -445,16 +409,8 @@ define i64 @"github.com/goplus/llgo/cl/_testgo/ifaceprom.I.one$bound"(ptr %0) { _llgo_0: %1 = load { %"github.com/goplus/llgo/runtime/internal/runtime.iface" }, ptr %0, align 8 %2 = extractvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %1, 0 - %3 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %2) - %4 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %2, 0 - %5 = getelementptr ptr, ptr %4, i64 3 - %6 = load ptr, ptr %5, align 8 - %7 = insertvalue { ptr, ptr } undef, ptr %6, 0 - %8 = insertvalue { ptr, ptr } %7, ptr %3, 1 - %9 = extractvalue { ptr, ptr } %8, 1 - %10 = extractvalue { ptr, ptr } %8, 0 - %11 = call i64 %10(ptr %9) - ret i64 %11 + %3 = call i64 @"__llgo_invoke.github.com/goplus/llgo/cl/_testgo/ifaceprom.iface$zZ89tENb5h_KNjvpxf1TXPfaWFYn0IZrZwyVf42lRtA$m0.one"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %2) + ret i64 %3 } declare i1 @"github.com/goplus/llgo/runtime/internal/runtime.StringEqual"(%"github.com/goplus/llgo/runtime/internal/runtime.String", %"github.com/goplus/llgo/runtime/internal/runtime.String") @@ -463,16 +419,8 @@ define %"github.com/goplus/llgo/runtime/internal/runtime.String" @"github.com/go _llgo_0: %1 = load { %"github.com/goplus/llgo/runtime/internal/runtime.iface" }, ptr %0, align 8 %2 = extractvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %1, 0 - %3 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %2) - %4 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %2, 0 - %5 = getelementptr ptr, ptr %4, i64 4 - %6 = load ptr, ptr %5, align 8 - %7 = insertvalue { ptr, ptr } undef, ptr %6, 0 - %8 = insertvalue { ptr, ptr } %7, ptr %3, 1 - %9 = extractvalue { ptr, ptr } %8, 1 - %10 = extractvalue { ptr, ptr } %8, 0 - %11 = call %"github.com/goplus/llgo/runtime/internal/runtime.String" %10(ptr %9) - ret %"github.com/goplus/llgo/runtime/internal/runtime.String" %11 + %3 = call %"github.com/goplus/llgo/runtime/internal/runtime.String" @"__llgo_invoke.github.com/goplus/llgo/cl/_testgo/ifaceprom.iface$zZ89tENb5h_KNjvpxf1TXPfaWFYn0IZrZwyVf42lRtA$m1.two"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %2) + ret %"github.com/goplus/llgo/runtime/internal/runtime.String" %3 } declare void @"github.com/goplus/llgo/runtime/internal/runtime.PrintString"(%"github.com/goplus/llgo/runtime/internal/runtime.String") diff --git a/cl/_testgo/interface/out.ll b/cl/_testgo/interface/out.ll index 828bf2c4f1..6781bf3031 100644 --- a/cl/_testgo/interface/out.ll +++ b/cl/_testgo/interface/out.ll @@ -118,67 +118,59 @@ _llgo_0: br i1 %7, label %_llgo_3, label %_llgo_4 _llgo_1: ; preds = %_llgo_5 - %8 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %25) - %9 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %25, 0 - %10 = getelementptr ptr, ptr %9, i64 3 - %11 = load ptr, ptr %10, align 8 - %12 = insertvalue { ptr, ptr } undef, ptr %11, 0 - %13 = insertvalue { ptr, ptr } %12, ptr %8, 1 - %14 = extractvalue { ptr, ptr } %13, 1 - %15 = extractvalue { ptr, ptr } %13, 0 - call void %15(ptr %14) + call void @"__llgo_invoke.github.com/goplus/llgo/cl/_testgo/interface.iface$sO8a1LvuUsjXwiwaC6sR9-L4DiYgiOnZi7iosyShJXg$m0.Load"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %17) br label %_llgo_2 _llgo_2: ; preds = %_llgo_1, %_llgo_5 - %16 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %5, 0 - %17 = call i1 @"github.com/goplus/llgo/runtime/internal/runtime.Implements"(ptr @"_llgo_github.com/goplus/llgo/cl/_testdata/foo.Gamer", ptr %16) - br i1 %17, label %_llgo_6, label %_llgo_7 + %8 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %5, 0 + %9 = call i1 @"github.com/goplus/llgo/runtime/internal/runtime.Implements"(ptr @"_llgo_github.com/goplus/llgo/cl/_testdata/foo.Gamer", ptr %8) + br i1 %9, label %_llgo_6, label %_llgo_7 _llgo_3: ; preds = %_llgo_0 - %18 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %3, 1 - %19 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr @"github.com/goplus/llgo/cl/_testgo/interface.iface$sO8a1LvuUsjXwiwaC6sR9-L4DiYgiOnZi7iosyShJXg", ptr %6) - %20 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %19, 0 - %21 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %20, ptr %18, 1 - %22 = insertvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } undef, %"github.com/goplus/llgo/runtime/internal/runtime.iface" %21, 0 - %23 = insertvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } %22, i1 true, 1 + %10 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %3, 1 + %11 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr @"github.com/goplus/llgo/cl/_testgo/interface.iface$sO8a1LvuUsjXwiwaC6sR9-L4DiYgiOnZi7iosyShJXg", ptr %6) + %12 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %11, 0 + %13 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %12, ptr %10, 1 + %14 = insertvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } undef, %"github.com/goplus/llgo/runtime/internal/runtime.iface" %13, 0 + %15 = insertvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } %14, i1 true, 1 br label %_llgo_5 _llgo_4: ; preds = %_llgo_0 br label %_llgo_5 _llgo_5: ; preds = %_llgo_4, %_llgo_3 - %24 = phi { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } [ %23, %_llgo_3 ], [ zeroinitializer, %_llgo_4 ] - %25 = extractvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } %24, 0 - %26 = extractvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } %24, 1 + %16 = phi { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } [ %15, %_llgo_3 ], [ zeroinitializer, %_llgo_4 ] + %17 = extractvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } %16, 0 + %18 = extractvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } %16, 1 call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintString"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @13, i64 2 }) call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8 32) - call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintIface"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %25) + call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintIface"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %17) call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8 32) - call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintBool"(i1 %26) + call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintBool"(i1 %18) call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8 10) - br i1 %26, label %_llgo_1, label %_llgo_2 + br i1 %18, label %_llgo_1, label %_llgo_2 _llgo_6: ; preds = %_llgo_2 - %27 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %5, 1 - %28 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr @"github.com/goplus/llgo/cl/_testgo/interface.iface$sO8a1LvuUsjXwiwaC6sR9-L4DiYgiOnZi7iosyShJXg", ptr %16) - %29 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %28, 0 - %30 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %29, ptr %27, 1 - %31 = insertvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } undef, %"github.com/goplus/llgo/runtime/internal/runtime.iface" %30, 0 - %32 = insertvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } %31, i1 true, 1 + %19 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %5, 1 + %20 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr @"github.com/goplus/llgo/cl/_testgo/interface.iface$sO8a1LvuUsjXwiwaC6sR9-L4DiYgiOnZi7iosyShJXg", ptr %8) + %21 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %20, 0 + %22 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %21, ptr %19, 1 + %23 = insertvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } undef, %"github.com/goplus/llgo/runtime/internal/runtime.iface" %22, 0 + %24 = insertvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } %23, i1 true, 1 br label %_llgo_8 _llgo_7: ; preds = %_llgo_2 br label %_llgo_8 _llgo_8: ; preds = %_llgo_7, %_llgo_6 - %33 = phi { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } [ %32, %_llgo_6 ], [ zeroinitializer, %_llgo_7 ] - %34 = extractvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } %33, 0 - %35 = extractvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } %33, 1 + %25 = phi { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } [ %24, %_llgo_6 ], [ zeroinitializer, %_llgo_7 ] + %26 = extractvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } %25, 0 + %27 = extractvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } %25, 1 call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintString"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @14, i64 4 }) call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8 32) - call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintIface"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %34) + call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintIface"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %26) call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8 32) - call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintBool"(i1 %35) + call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintBool"(i1 %27) call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8 10) ret void } @@ -232,6 +224,20 @@ declare void @"github.com/goplus/llgo/runtime/internal/runtime.PrintIface"(%"git declare void @"github.com/goplus/llgo/runtime/internal/runtime.PrintBool"(i1) +define weak_odr void @"__llgo_invoke.github.com/goplus/llgo/cl/_testgo/interface.iface$sO8a1LvuUsjXwiwaC6sR9-L4DiYgiOnZi7iosyShJXg$m0.Load"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) { +_llgo_0: + %1 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) + %2 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %0, 0 + %3 = getelementptr ptr, ptr %2, i64 3 + %4 = load ptr, ptr %3, align 8 + %5 = insertvalue { ptr, ptr } undef, ptr %4, 0 + %6 = insertvalue { ptr, ptr } %5, ptr %1, 1 + %7 = extractvalue { ptr, ptr } %6, 1 + %8 = extractvalue { ptr, ptr } %6, 0 + tail call void %8(ptr %7) + ret void +} + declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface") attributes #0 = { nocallback nofree nounwind willreturn memory(argmem: write) } diff --git a/cl/_testgo/invoke/out.ll b/cl/_testgo/invoke/out.ll index 1cdd95e85f..38133ed452 100644 --- a/cl/_testgo/invoke/out.ll +++ b/cl/_testgo/invoke/out.ll @@ -243,16 +243,8 @@ _llgo_2: ; preds = %_llgo_1, %_llgo_0 define void @"github.com/goplus/llgo/cl/_testgo/invoke.invoke"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) { _llgo_0: - %1 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) - %2 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %0, 0 - %3 = getelementptr ptr, ptr %2, i64 3 - %4 = load ptr, ptr %3, align 8 - %5 = insertvalue { ptr, ptr } undef, ptr %4, 0 - %6 = insertvalue { ptr, ptr } %5, ptr %1, 1 - %7 = extractvalue { ptr, ptr } %6, 1 - %8 = extractvalue { ptr, ptr } %6, 0 - %9 = call i64 %8(ptr %7) - call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintInt"(i64 %9) + %1 = call i64 @"__llgo_invoke._llgo_iface$uRUteI7wmSy7y7ODhGzk0FdDaxGKMhVSSu6HZEv9aa0$m0.Invoke"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) + call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintInt"(i64 %1) call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8 10) ret void } @@ -435,6 +427,20 @@ declare void @"github.com/goplus/llgo/runtime/internal/runtime.PrintInt"(i64) declare void @"github.com/goplus/llgo/runtime/internal/runtime.PrintFloat"(double) +define weak_odr i64 @"__llgo_invoke._llgo_iface$uRUteI7wmSy7y7ODhGzk0FdDaxGKMhVSSu6HZEv9aa0$m0.Invoke"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) { +_llgo_0: + %1 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) + %2 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %0, 0 + %3 = getelementptr ptr, ptr %2, i64 3 + %4 = load ptr, ptr %3, align 8 + %5 = insertvalue { ptr, ptr } undef, ptr %4, 0 + %6 = insertvalue { ptr, ptr } %5, ptr %1, 1 + %7 = extractvalue { ptr, ptr } %6, 1 + %8 = extractvalue { ptr, ptr } %6, 0 + %9 = tail call i64 %8(ptr %7) + ret i64 %9 +} + declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface") declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocZ"(i64) diff --git a/cl/_testgo/reader/out.ll b/cl/_testgo/reader/out.ll index 49ad7ec3a2..1c6ad6e46c 100644 --- a/cl/_testgo/reader/out.ll +++ b/cl/_testgo/reader/out.ll @@ -230,81 +230,73 @@ _llgo_0: br label %_llgo_1 _llgo_1: ; preds = %_llgo_6, %_llgo_3, %_llgo_0 - %3 = phi %"github.com/goplus/llgo/runtime/internal/runtime.Slice" [ %2, %_llgo_0 ], [ %24, %_llgo_3 ], [ %61, %_llgo_6 ] + %3 = phi %"github.com/goplus/llgo/runtime/internal/runtime.Slice" [ %2, %_llgo_0 ], [ %16, %_llgo_3 ], [ %53, %_llgo_6 ] %4 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %3, 1 %5 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %3, 2 %6 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %3, 2 %7 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %3, 0 %8 = call %"github.com/goplus/llgo/runtime/internal/runtime.Slice" @"github.com/goplus/llgo/runtime/internal/runtime.NewSlice3"(ptr %7, i64 1, i64 %6, i64 %4, i64 %5, i64 %6) - %9 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) - %10 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %0, 0 - %11 = getelementptr ptr, ptr %10, i64 3 - %12 = load ptr, ptr %11, align 8 - %13 = insertvalue { ptr, ptr } undef, ptr %12, 0 - %14 = insertvalue { ptr, ptr } %13, ptr %9, 1 - %15 = extractvalue { ptr, ptr } %14, 1 - %16 = extractvalue { ptr, ptr } %14, 0 - %17 = call { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %16(ptr %15, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %8) - %18 = extractvalue { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %17, 0 - %19 = extractvalue { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %17, 1 - %20 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %3, 1 - %21 = add i64 %20, %18 - %22 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %3, 2 - %23 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %3, 0 - %24 = call %"github.com/goplus/llgo/runtime/internal/runtime.Slice" @"github.com/goplus/llgo/runtime/internal/runtime.NewSlice3"(ptr %23, i64 1, i64 %22, i64 0, i64 %21, i64 %22) - %25 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfaceType"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %19) - %26 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %19, 1 - %27 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %25, 0 - %28 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %27, ptr %26, 1 - %29 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfaceType"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" zeroinitializer) - %30 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %29, 0 - %31 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %30, ptr null, 1 - %32 = call i1 @"github.com/goplus/llgo/runtime/internal/runtime.EfaceEqual"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %28, %"github.com/goplus/llgo/runtime/internal/runtime.eface" %31) - %33 = xor i1 %32, true - br i1 %33, label %_llgo_2, label %_llgo_3 + %9 = call { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } @"__llgo_invoke._llgo_iface$uycIKA3bbxRhudEjW1hHKWKdLqHQsCVy8NdW1bkQmNw$m0.Read"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %8) + %10 = extractvalue { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %9, 0 + %11 = extractvalue { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %9, 1 + %12 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %3, 1 + %13 = add i64 %12, %10 + %14 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %3, 2 + %15 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %3, 0 + %16 = call %"github.com/goplus/llgo/runtime/internal/runtime.Slice" @"github.com/goplus/llgo/runtime/internal/runtime.NewSlice3"(ptr %15, i64 1, i64 %14, i64 0, i64 %13, i64 %14) + %17 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfaceType"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %11) + %18 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %11, 1 + %19 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %17, 0 + %20 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %19, ptr %18, 1 + %21 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfaceType"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" zeroinitializer) + %22 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %21, 0 + %23 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %22, ptr null, 1 + %24 = call i1 @"github.com/goplus/llgo/runtime/internal/runtime.EfaceEqual"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %20, %"github.com/goplus/llgo/runtime/internal/runtime.eface" %23) + %25 = xor i1 %24, true + br i1 %25, label %_llgo_2, label %_llgo_3 _llgo_2: ; preds = %_llgo_1 - %34 = load %"github.com/goplus/llgo/runtime/internal/runtime.iface", ptr @"github.com/goplus/llgo/cl/_testgo/reader.EOF", align 8 - %35 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfaceType"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %19) - %36 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %19, 1 - %37 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %35, 0 - %38 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %37, ptr %36, 1 - %39 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfaceType"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %34) - %40 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %34, 1 - %41 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %39, 0 - %42 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %41, ptr %40, 1 - %43 = call i1 @"github.com/goplus/llgo/runtime/internal/runtime.EfaceEqual"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %38, %"github.com/goplus/llgo/runtime/internal/runtime.eface" %42) - br i1 %43, label %_llgo_4, label %_llgo_5 + %26 = load %"github.com/goplus/llgo/runtime/internal/runtime.iface", ptr @"github.com/goplus/llgo/cl/_testgo/reader.EOF", align 8 + %27 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfaceType"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %11) + %28 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %11, 1 + %29 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %27, 0 + %30 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %29, ptr %28, 1 + %31 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfaceType"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %26) + %32 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %26, 1 + %33 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" undef, ptr %31, 0 + %34 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %33, ptr %32, 1 + %35 = call i1 @"github.com/goplus/llgo/runtime/internal/runtime.EfaceEqual"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %30, %"github.com/goplus/llgo/runtime/internal/runtime.eface" %34) + br i1 %35, label %_llgo_4, label %_llgo_5 _llgo_3: ; preds = %_llgo_1 - %44 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %24, 1 - %45 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %24, 2 - %46 = icmp eq i64 %44, %45 - br i1 %46, label %_llgo_6, label %_llgo_1 + %36 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %16, 1 + %37 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %16, 2 + %38 = icmp eq i64 %36, %37 + br i1 %38, label %_llgo_6, label %_llgo_1 _llgo_4: ; preds = %_llgo_2 br label %_llgo_5 _llgo_5: ; preds = %_llgo_4, %_llgo_2 - %47 = phi %"github.com/goplus/llgo/runtime/internal/runtime.iface" [ %19, %_llgo_2 ], [ zeroinitializer, %_llgo_4 ] - %48 = insertvalue { %"github.com/goplus/llgo/runtime/internal/runtime.Slice", %"github.com/goplus/llgo/runtime/internal/runtime.iface" } undef, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %24, 0 - %49 = insertvalue { %"github.com/goplus/llgo/runtime/internal/runtime.Slice", %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %48, %"github.com/goplus/llgo/runtime/internal/runtime.iface" %47, 1 - ret { %"github.com/goplus/llgo/runtime/internal/runtime.Slice", %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %49 + %39 = phi %"github.com/goplus/llgo/runtime/internal/runtime.iface" [ %11, %_llgo_2 ], [ zeroinitializer, %_llgo_4 ] + %40 = insertvalue { %"github.com/goplus/llgo/runtime/internal/runtime.Slice", %"github.com/goplus/llgo/runtime/internal/runtime.iface" } undef, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %16, 0 + %41 = insertvalue { %"github.com/goplus/llgo/runtime/internal/runtime.Slice", %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %40, %"github.com/goplus/llgo/runtime/internal/runtime.iface" %39, 1 + ret { %"github.com/goplus/llgo/runtime/internal/runtime.Slice", %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %41 _llgo_6: ; preds = %_llgo_3 - %50 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocZ"(i64 1) - %51 = getelementptr inbounds i8, ptr %50, i64 0 - store i8 0, ptr %51, align 1 - %52 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" undef, ptr %50, 0 - %53 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %52, i64 1, 1 - %54 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %53, i64 1, 2 - %55 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %54, 0 - %56 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %54, 1 - %57 = call %"github.com/goplus/llgo/runtime/internal/runtime.Slice" @"github.com/goplus/llgo/runtime/internal/runtime.SliceAppend"(%"github.com/goplus/llgo/runtime/internal/runtime.Slice" %24, ptr %55, i64 %56, i64 1) - %58 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %24, 1 - %59 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %57, 2 - %60 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %57, 0 - %61 = call %"github.com/goplus/llgo/runtime/internal/runtime.Slice" @"github.com/goplus/llgo/runtime/internal/runtime.NewSlice3"(ptr %60, i64 1, i64 %59, i64 0, i64 %58, i64 %59) + %42 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocZ"(i64 1) + %43 = getelementptr inbounds i8, ptr %42, i64 0 + store i8 0, ptr %43, align 1 + %44 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" undef, ptr %42, 0 + %45 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %44, i64 1, 1 + %46 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %45, i64 1, 2 + %47 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %46, 0 + %48 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %46, 1 + %49 = call %"github.com/goplus/llgo/runtime/internal/runtime.Slice" @"github.com/goplus/llgo/runtime/internal/runtime.SliceAppend"(%"github.com/goplus/llgo/runtime/internal/runtime.Slice" %16, ptr %47, i64 %48, i64 1) + %50 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %16, 1 + %51 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %49, 2 + %52 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %49, 0 + %53 = call %"github.com/goplus/llgo/runtime/internal/runtime.Slice" @"github.com/goplus/llgo/runtime/internal/runtime.NewSlice3"(ptr %52, i64 1, i64 %51, i64 0, i64 %50, i64 %51) br label %_llgo_1 } @@ -315,55 +307,39 @@ _llgo_0: br i1 %3, label %_llgo_3, label %_llgo_4 _llgo_1: ; preds = %_llgo_5 - %4 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %38) - %5 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %38, 0 - %6 = getelementptr ptr, ptr %5, i64 3 - %7 = load ptr, ptr %6, align 8 - %8 = insertvalue { ptr, ptr } undef, ptr %7, 0 - %9 = insertvalue { ptr, ptr } %8, ptr %4, 1 - %10 = extractvalue { ptr, ptr } %9, 1 - %11 = extractvalue { ptr, ptr } %9, 0 - %12 = call { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %11(ptr %10, %"github.com/goplus/llgo/runtime/internal/runtime.String" %1) - %13 = extractvalue { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %12, 0 - %14 = extractvalue { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %12, 1 - %15 = insertvalue { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } undef, i64 %13, 0 - %16 = insertvalue { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %15, %"github.com/goplus/llgo/runtime/internal/runtime.iface" %14, 1 - ret { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %16 + %4 = call { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } @"__llgo_invoke._llgo_iface$Ly4zXiUMEac-hYAMw6b6miJ1JEhGfLyBWyBOhpsRZcU$m0.WriteString"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %22, %"github.com/goplus/llgo/runtime/internal/runtime.String" %1) + %5 = extractvalue { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %4, 0 + %6 = extractvalue { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %4, 1 + %7 = insertvalue { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } undef, i64 %5, 0 + %8 = insertvalue { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %7, %"github.com/goplus/llgo/runtime/internal/runtime.iface" %6, 1 + ret { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %8 _llgo_2: ; preds = %_llgo_5 - %17 = call %"github.com/goplus/llgo/runtime/internal/runtime.Slice" @"github.com/goplus/llgo/runtime/internal/runtime.StringToBytes"(%"github.com/goplus/llgo/runtime/internal/runtime.String" %1) - %18 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) - %19 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %0, 0 - %20 = getelementptr ptr, ptr %19, i64 3 - %21 = load ptr, ptr %20, align 8 - %22 = insertvalue { ptr, ptr } undef, ptr %21, 0 - %23 = insertvalue { ptr, ptr } %22, ptr %18, 1 - %24 = extractvalue { ptr, ptr } %23, 1 - %25 = extractvalue { ptr, ptr } %23, 0 - %26 = call { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %25(ptr %24, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %17) - %27 = extractvalue { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %26, 0 - %28 = extractvalue { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %26, 1 - %29 = insertvalue { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } undef, i64 %27, 0 - %30 = insertvalue { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %29, %"github.com/goplus/llgo/runtime/internal/runtime.iface" %28, 1 - ret { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %30 + %9 = call %"github.com/goplus/llgo/runtime/internal/runtime.Slice" @"github.com/goplus/llgo/runtime/internal/runtime.StringToBytes"(%"github.com/goplus/llgo/runtime/internal/runtime.String" %1) + %10 = call { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } @"__llgo_invoke._llgo_iface$kr1iSWwMezh0B9LdQN0MhEZUNZvBlHPhlst95jAyxE0$m0.Write"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %9) + %11 = extractvalue { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %10, 0 + %12 = extractvalue { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %10, 1 + %13 = insertvalue { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } undef, i64 %11, 0 + %14 = insertvalue { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %13, %"github.com/goplus/llgo/runtime/internal/runtime.iface" %12, 1 + ret { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %14 _llgo_3: ; preds = %_llgo_0 - %31 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %0, 1 - %32 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr @"_llgo_iface$Ly4zXiUMEac-hYAMw6b6miJ1JEhGfLyBWyBOhpsRZcU", ptr %2) - %33 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %32, 0 - %34 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %33, ptr %31, 1 - %35 = insertvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } undef, %"github.com/goplus/llgo/runtime/internal/runtime.iface" %34, 0 - %36 = insertvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } %35, i1 true, 1 + %15 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %0, 1 + %16 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr @"_llgo_iface$Ly4zXiUMEac-hYAMw6b6miJ1JEhGfLyBWyBOhpsRZcU", ptr %2) + %17 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %16, 0 + %18 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %17, ptr %15, 1 + %19 = insertvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } undef, %"github.com/goplus/llgo/runtime/internal/runtime.iface" %18, 0 + %20 = insertvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } %19, i1 true, 1 br label %_llgo_5 _llgo_4: ; preds = %_llgo_0 br label %_llgo_5 _llgo_5: ; preds = %_llgo_4, %_llgo_3 - %37 = phi { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } [ %36, %_llgo_3 ], [ zeroinitializer, %_llgo_4 ] - %38 = extractvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } %37, 0 - %39 = extractvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } %37, 1 - br i1 %39, label %_llgo_1, label %_llgo_2 + %21 = phi { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } [ %20, %_llgo_3 ], [ zeroinitializer, %_llgo_4 ] + %22 = extractvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } %21, 0 + %23 = extractvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } %21, 1 + br i1 %23, label %_llgo_1, label %_llgo_2 } define %"github.com/goplus/llgo/runtime/internal/runtime.String" @"github.com/goplus/llgo/cl/_testgo/reader.(*errorString).Error"(ptr %0) { @@ -433,20 +409,12 @@ _llgo_0: store %"github.com/goplus/llgo/cl/_testgo/reader.nopCloser" %0, ptr %2, align 8 %3 = getelementptr inbounds %"github.com/goplus/llgo/cl/_testgo/reader.nopCloser", ptr %2, i32 0, i32 0 %4 = load %"github.com/goplus/llgo/runtime/internal/runtime.iface", ptr %3, align 8 - %5 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %4) - %6 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %4, 0 - %7 = getelementptr ptr, ptr %6, i64 3 - %8 = load ptr, ptr %7, align 8 - %9 = insertvalue { ptr, ptr } undef, ptr %8, 0 - %10 = insertvalue { ptr, ptr } %9, ptr %5, 1 - %11 = extractvalue { ptr, ptr } %10, 1 - %12 = extractvalue { ptr, ptr } %10, 0 - %13 = call { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %12(ptr %11, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %1) - %14 = extractvalue { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %13, 0 - %15 = extractvalue { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %13, 1 - %16 = insertvalue { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } undef, i64 %14, 0 - %17 = insertvalue { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %16, %"github.com/goplus/llgo/runtime/internal/runtime.iface" %15, 1 - ret { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %17 + %5 = call { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } @"__llgo_invoke._llgo_iface$uycIKA3bbxRhudEjW1hHKWKdLqHQsCVy8NdW1bkQmNw$m0.Read"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %4, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %1) + %6 = extractvalue { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %5, 0 + %7 = extractvalue { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %5, 1 + %8 = insertvalue { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } undef, i64 %6, 0 + %9 = insertvalue { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %8, %"github.com/goplus/llgo/runtime/internal/runtime.iface" %7, 1 + ret { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %9 } define %"github.com/goplus/llgo/runtime/internal/runtime.iface" @"github.com/goplus/llgo/cl/_testgo/reader.(*nopCloser).Close"(ptr %0) { @@ -460,20 +428,12 @@ define { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } @"githu _llgo_0: %2 = getelementptr inbounds %"github.com/goplus/llgo/cl/_testgo/reader.nopCloser", ptr %0, i32 0, i32 0 %3 = load %"github.com/goplus/llgo/runtime/internal/runtime.iface", ptr %2, align 8 - %4 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %3) - %5 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %3, 0 - %6 = getelementptr ptr, ptr %5, i64 3 - %7 = load ptr, ptr %6, align 8 - %8 = insertvalue { ptr, ptr } undef, ptr %7, 0 - %9 = insertvalue { ptr, ptr } %8, ptr %4, 1 - %10 = extractvalue { ptr, ptr } %9, 1 - %11 = extractvalue { ptr, ptr } %9, 0 - %12 = call { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %11(ptr %10, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %1) - %13 = extractvalue { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %12, 0 - %14 = extractvalue { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %12, 1 - %15 = insertvalue { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } undef, i64 %13, 0 - %16 = insertvalue { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %15, %"github.com/goplus/llgo/runtime/internal/runtime.iface" %14, 1 - ret { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %16 + %4 = call { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } @"__llgo_invoke._llgo_iface$uycIKA3bbxRhudEjW1hHKWKdLqHQsCVy8NdW1bkQmNw$m0.Read"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %3, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %1) + %5 = extractvalue { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %4, 0 + %6 = extractvalue { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %4, 1 + %7 = insertvalue { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } undef, i64 %5, 0 + %8 = insertvalue { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %7, %"github.com/goplus/llgo/runtime/internal/runtime.iface" %6, 1 + ret { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %8 } define %"github.com/goplus/llgo/runtime/internal/runtime.iface" @"github.com/goplus/llgo/cl/_testgo/reader.nopCloserWriterTo.Close"(%"github.com/goplus/llgo/cl/_testgo/reader.nopCloserWriterTo" %0) { @@ -488,20 +448,12 @@ _llgo_0: store %"github.com/goplus/llgo/cl/_testgo/reader.nopCloserWriterTo" %0, ptr %2, align 8 %3 = getelementptr inbounds %"github.com/goplus/llgo/cl/_testgo/reader.nopCloserWriterTo", ptr %2, i32 0, i32 0 %4 = load %"github.com/goplus/llgo/runtime/internal/runtime.iface", ptr %3, align 8 - %5 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %4) - %6 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %4, 0 - %7 = getelementptr ptr, ptr %6, i64 3 - %8 = load ptr, ptr %7, align 8 - %9 = insertvalue { ptr, ptr } undef, ptr %8, 0 - %10 = insertvalue { ptr, ptr } %9, ptr %5, 1 - %11 = extractvalue { ptr, ptr } %10, 1 - %12 = extractvalue { ptr, ptr } %10, 0 - %13 = call { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %12(ptr %11, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %1) - %14 = extractvalue { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %13, 0 - %15 = extractvalue { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %13, 1 - %16 = insertvalue { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } undef, i64 %14, 0 - %17 = insertvalue { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %16, %"github.com/goplus/llgo/runtime/internal/runtime.iface" %15, 1 - ret { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %17 + %5 = call { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } @"__llgo_invoke._llgo_iface$uycIKA3bbxRhudEjW1hHKWKdLqHQsCVy8NdW1bkQmNw$m0.Read"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %4, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %1) + %6 = extractvalue { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %5, 0 + %7 = extractvalue { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %5, 1 + %8 = insertvalue { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } undef, i64 %6, 0 + %9 = insertvalue { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %8, %"github.com/goplus/llgo/runtime/internal/runtime.iface" %7, 1 + ret { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %9 } define { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } @"github.com/goplus/llgo/cl/_testgo/reader.nopCloserWriterTo.WriteTo"(%"github.com/goplus/llgo/cl/_testgo/reader.nopCloserWriterTo" %0, %"github.com/goplus/llgo/runtime/internal/runtime.iface" %1) { @@ -520,26 +472,18 @@ _llgo_1: ; preds = %_llgo_0 %8 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr @"_llgo_iface$p5Bo_emI1h8acs1rFbUxZTrpeDbIQ34gFcsbwK9YIgs", ptr %5) %9 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %8, 0 %10 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %9, ptr %7, 1 - %11 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %10) - %12 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %10, 0 - %13 = getelementptr ptr, ptr %12, i64 3 - %14 = load ptr, ptr %13, align 8 - %15 = insertvalue { ptr, ptr } undef, ptr %14, 0 - %16 = insertvalue { ptr, ptr } %15, ptr %11, 1 - %17 = extractvalue { ptr, ptr } %16, 1 - %18 = extractvalue { ptr, ptr } %16, 0 - %19 = call { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %18(ptr %17, %"github.com/goplus/llgo/runtime/internal/runtime.iface" %1) - %20 = extractvalue { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %19, 0 - %21 = extractvalue { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %19, 1 - %22 = insertvalue { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } undef, i64 %20, 0 - %23 = insertvalue { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %22, %"github.com/goplus/llgo/runtime/internal/runtime.iface" %21, 1 - ret { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %23 + %11 = call { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } @"__llgo_invoke._llgo_iface$p5Bo_emI1h8acs1rFbUxZTrpeDbIQ34gFcsbwK9YIgs$m0.WriteTo"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %10, %"github.com/goplus/llgo/runtime/internal/runtime.iface" %1) + %12 = extractvalue { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %11, 0 + %13 = extractvalue { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %11, 1 + %14 = insertvalue { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } undef, i64 %12, 0 + %15 = insertvalue { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %14, %"github.com/goplus/llgo/runtime/internal/runtime.iface" %13, 1 + ret { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %15 _llgo_2: ; preds = %_llgo_0 - %24 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) - store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @53, i64 122 }, ptr %24, align 8 - %25 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %24, 1 - call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %25) + %16 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) + store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @53, i64 122 }, ptr %16, align 8 + %17 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %16, 1 + call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %17) unreachable } @@ -554,20 +498,12 @@ define { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } @"githu _llgo_0: %2 = getelementptr inbounds %"github.com/goplus/llgo/cl/_testgo/reader.nopCloserWriterTo", ptr %0, i32 0, i32 0 %3 = load %"github.com/goplus/llgo/runtime/internal/runtime.iface", ptr %2, align 8 - %4 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %3) - %5 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %3, 0 - %6 = getelementptr ptr, ptr %5, i64 3 - %7 = load ptr, ptr %6, align 8 - %8 = insertvalue { ptr, ptr } undef, ptr %7, 0 - %9 = insertvalue { ptr, ptr } %8, ptr %4, 1 - %10 = extractvalue { ptr, ptr } %9, 1 - %11 = extractvalue { ptr, ptr } %9, 0 - %12 = call { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %11(ptr %10, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %1) - %13 = extractvalue { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %12, 0 - %14 = extractvalue { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %12, 1 - %15 = insertvalue { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } undef, i64 %13, 0 - %16 = insertvalue { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %15, %"github.com/goplus/llgo/runtime/internal/runtime.iface" %14, 1 - ret { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %16 + %4 = call { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } @"__llgo_invoke._llgo_iface$uycIKA3bbxRhudEjW1hHKWKdLqHQsCVy8NdW1bkQmNw$m0.Read"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %3, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %1) + %5 = extractvalue { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %4, 0 + %6 = extractvalue { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %4, 1 + %7 = insertvalue { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } undef, i64 %5, 0 + %8 = insertvalue { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %7, %"github.com/goplus/llgo/runtime/internal/runtime.iface" %6, 1 + ret { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %8 } define { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } @"github.com/goplus/llgo/cl/_testgo/reader.(*nopCloserWriterTo).WriteTo"(ptr %0, %"github.com/goplus/llgo/runtime/internal/runtime.iface" %1) { @@ -1036,14 +972,56 @@ declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocZ"(i64) declare %"github.com/goplus/llgo/runtime/internal/runtime.Slice" @"github.com/goplus/llgo/runtime/internal/runtime.NewSlice3"(ptr, i64, i64, i64, i64, i64) +define weak_odr { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } @"__llgo_invoke._llgo_iface$uycIKA3bbxRhudEjW1hHKWKdLqHQsCVy8NdW1bkQmNw$m0.Read"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %1) { +_llgo_0: + %2 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) + %3 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %0, 0 + %4 = getelementptr ptr, ptr %3, i64 3 + %5 = load ptr, ptr %4, align 8 + %6 = insertvalue { ptr, ptr } undef, ptr %5, 0 + %7 = insertvalue { ptr, ptr } %6, ptr %2, 1 + %8 = extractvalue { ptr, ptr } %7, 1 + %9 = extractvalue { ptr, ptr } %7, 0 + %10 = tail call { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %9(ptr %8, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %1) + ret { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %10 +} + declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface") declare i1 @"github.com/goplus/llgo/runtime/internal/runtime.EfaceEqual"(%"github.com/goplus/llgo/runtime/internal/runtime.eface", %"github.com/goplus/llgo/runtime/internal/runtime.eface") declare %"github.com/goplus/llgo/runtime/internal/runtime.Slice" @"github.com/goplus/llgo/runtime/internal/runtime.SliceAppend"(%"github.com/goplus/llgo/runtime/internal/runtime.Slice", ptr, i64, i64) +define weak_odr { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } @"__llgo_invoke._llgo_iface$Ly4zXiUMEac-hYAMw6b6miJ1JEhGfLyBWyBOhpsRZcU$m0.WriteString"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0, %"github.com/goplus/llgo/runtime/internal/runtime.String" %1) { +_llgo_0: + %2 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) + %3 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %0, 0 + %4 = getelementptr ptr, ptr %3, i64 3 + %5 = load ptr, ptr %4, align 8 + %6 = insertvalue { ptr, ptr } undef, ptr %5, 0 + %7 = insertvalue { ptr, ptr } %6, ptr %2, 1 + %8 = extractvalue { ptr, ptr } %7, 1 + %9 = extractvalue { ptr, ptr } %7, 0 + %10 = tail call { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %9(ptr %8, %"github.com/goplus/llgo/runtime/internal/runtime.String" %1) + ret { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %10 +} + declare %"github.com/goplus/llgo/runtime/internal/runtime.Slice" @"github.com/goplus/llgo/runtime/internal/runtime.StringToBytes"(%"github.com/goplus/llgo/runtime/internal/runtime.String") +define weak_odr { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } @"__llgo_invoke._llgo_iface$kr1iSWwMezh0B9LdQN0MhEZUNZvBlHPhlst95jAyxE0$m0.Write"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %1) { +_llgo_0: + %2 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) + %3 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %0, 0 + %4 = getelementptr ptr, ptr %3, i64 3 + %5 = load ptr, ptr %4, align 8 + %6 = insertvalue { ptr, ptr } undef, ptr %5, 0 + %7 = insertvalue { ptr, ptr } %6, ptr %2, 1 + %8 = extractvalue { ptr, ptr } %7, 1 + %9 = extractvalue { ptr, ptr } %7, 0 + %10 = tail call { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %9(ptr %8, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %1) + ret { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %10 +} + declare void @"unicode/utf8.init"() declare i1 @"github.com/goplus/llgo/runtime/internal/runtime.memequal32"(ptr, ptr) @@ -1064,6 +1042,20 @@ declare void @"github.com/goplus/llgo/runtime/internal/runtime.PrintIface"(%"git declare void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface") +define weak_odr { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } @"__llgo_invoke._llgo_iface$p5Bo_emI1h8acs1rFbUxZTrpeDbIQ34gFcsbwK9YIgs$m0.WriteTo"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0, %"github.com/goplus/llgo/runtime/internal/runtime.iface" %1) { +_llgo_0: + %2 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) + %3 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %0, 0 + %4 = getelementptr ptr, ptr %3, i64 3 + %5 = load ptr, ptr %4, align 8 + %6 = insertvalue { ptr, ptr } undef, ptr %5, 0 + %7 = insertvalue { ptr, ptr } %6, ptr %2, 1 + %8 = extractvalue { ptr, ptr } %7, 1 + %9 = extractvalue { ptr, ptr } %7, 0 + %10 = tail call { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %9(ptr %8, %"github.com/goplus/llgo/runtime/internal/runtime.iface" %1) + ret { i64, %"github.com/goplus/llgo/runtime/internal/runtime.iface" } %10 +} + declare %"github.com/goplus/llgo/runtime/internal/runtime.String" @"github.com/goplus/llgo/runtime/internal/runtime.StringSlice"(%"github.com/goplus/llgo/runtime/internal/runtime.String", i64, i64) declare i64 @"github.com/goplus/llgo/runtime/internal/runtime.SliceCopy"(%"github.com/goplus/llgo/runtime/internal/runtime.Slice", ptr, i64, i64) diff --git a/cl/_testgo/reflect/out.ll b/cl/_testgo/reflect/out.ll index 1bf2324c07..c1d1914d7d 100644 --- a/cl/_testgo/reflect/out.ll +++ b/cl/_testgo/reflect/out.ll @@ -144,71 +144,63 @@ _llgo_0: %6 = call %reflect.Value @reflect.ValueOf(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %5) %7 = call i64 @reflect.Value.Kind(%reflect.Value %6) %8 = call %"github.com/goplus/llgo/runtime/internal/runtime.iface" @reflect.Value.Type(%reflect.Value %6) - %9 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %8) - %10 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %8, 0 - %11 = getelementptr ptr, ptr %10, i64 37 - %12 = load ptr, ptr %11, align 8 - %13 = insertvalue { ptr, ptr } undef, ptr %12, 0 - %14 = insertvalue { ptr, ptr } %13, ptr %9, 1 - %15 = extractvalue { ptr, ptr } %14, 1 - %16 = extractvalue { ptr, ptr } %14, 0 - %17 = call %"github.com/goplus/llgo/runtime/internal/runtime.String" %16(ptr %15) + %9 = call %"github.com/goplus/llgo/runtime/internal/runtime.String" @"__llgo_invoke.github.com/goplus/llgo/cl/_testgo/reflect.iface$M1QhMZ4ofNk-re2nO7vVZ4li1DQJvA-HUib82gANJRs$m34.String"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %8) call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintString"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @7, i64 7 }) call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8 32) call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintUint"(i64 %7) call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8 32) - call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintString"(%"github.com/goplus/llgo/runtime/internal/runtime.String" %17) + call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintString"(%"github.com/goplus/llgo/runtime/internal/runtime.String" %9) call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8 10) - %18 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocZ"(i64 24) - %19 = getelementptr inbounds %reflect.Value, ptr %18, i64 0 - %20 = call %reflect.Value @reflect.ValueOf(%"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_int, ptr inttoptr (i64 100 to ptr) }) - store %reflect.Value %20, ptr %19, align 8 - %21 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" undef, ptr %18, 0 - %22 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %21, i64 1, 1 - %23 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %22, i64 1, 2 - %24 = call %"github.com/goplus/llgo/runtime/internal/runtime.Slice" @reflect.Value.Call(%reflect.Value %6, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %23) - %25 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %24, 0 - %26 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %24, 1 - %27 = icmp sge i64 0, %26 - call void @"github.com/goplus/llgo/runtime/internal/runtime.AssertIndexRange"(i1 %27) - %28 = getelementptr inbounds %reflect.Value, ptr %25, i64 0 - %29 = load %reflect.Value, ptr %28, align 8 - %30 = call i64 @reflect.Value.Int(%reflect.Value %29) - call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintInt"(i64 %30) + %10 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocZ"(i64 24) + %11 = getelementptr inbounds %reflect.Value, ptr %10, i64 0 + %12 = call %reflect.Value @reflect.ValueOf(%"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_int, ptr inttoptr (i64 100 to ptr) }) + store %reflect.Value %12, ptr %11, align 8 + %13 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" undef, ptr %10, 0 + %14 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %13, i64 1, 1 + %15 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %14, i64 1, 2 + %16 = call %"github.com/goplus/llgo/runtime/internal/runtime.Slice" @reflect.Value.Call(%reflect.Value %6, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %15) + %17 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %16, 0 + %18 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %16, 1 + %19 = icmp sge i64 0, %18 + call void @"github.com/goplus/llgo/runtime/internal/runtime.AssertIndexRange"(i1 %19) + %20 = getelementptr inbounds %reflect.Value, ptr %17, i64 0 + %21 = load %reflect.Value, ptr %20, align 8 + %22 = call i64 @reflect.Value.Int(%reflect.Value %21) + call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintInt"(i64 %22) call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8 10) - %31 = call %"github.com/goplus/llgo/runtime/internal/runtime.eface" @reflect.Value.Interface(%reflect.Value %6) - %32 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %31, 0 - %33 = call i1 @"github.com/goplus/llgo/runtime/internal/runtime.MatchesClosure"(ptr @"_llgo_closure$QIHBTaw1IFobr8yvWpq-2AJFm3xBNhdW_aNBicqUBGk", ptr %32) - br i1 %33, label %_llgo_3, label %_llgo_4 + %23 = call %"github.com/goplus/llgo/runtime/internal/runtime.eface" @reflect.Value.Interface(%reflect.Value %6) + %24 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %23, 0 + %25 = call i1 @"github.com/goplus/llgo/runtime/internal/runtime.MatchesClosure"(ptr @"_llgo_closure$QIHBTaw1IFobr8yvWpq-2AJFm3xBNhdW_aNBicqUBGk", ptr %24) + br i1 %25, label %_llgo_3, label %_llgo_4 _llgo_1: ; preds = %_llgo_5 - %34 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) - store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @8, i64 5 }, ptr %34, align 8 - %35 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %34, 1 - call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %35) + %26 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) + store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @8, i64 5 }, ptr %26, align 8 + %27 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %26, 1 + call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %27) unreachable _llgo_2: ; preds = %_llgo_5 - %36 = extractvalue { ptr, ptr } %44, 1 - %37 = extractvalue { ptr, ptr } %44, 0 - %38 = call i64 %37(ptr %36, i64 100) + %28 = extractvalue { ptr, ptr } %36, 1 + %29 = extractvalue { ptr, ptr } %36, 0 + %30 = call i64 %29(ptr %28, i64 100) ret void _llgo_3: ; preds = %_llgo_0 - %39 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %31, 1 - %40 = load { ptr, ptr }, ptr %39, align 8 - %41 = insertvalue { { ptr, ptr }, i1 } undef, { ptr, ptr } %40, 0 - %42 = insertvalue { { ptr, ptr }, i1 } %41, i1 true, 1 + %31 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %23, 1 + %32 = load { ptr, ptr }, ptr %31, align 8 + %33 = insertvalue { { ptr, ptr }, i1 } undef, { ptr, ptr } %32, 0 + %34 = insertvalue { { ptr, ptr }, i1 } %33, i1 true, 1 br label %_llgo_5 _llgo_4: ; preds = %_llgo_0 br label %_llgo_5 _llgo_5: ; preds = %_llgo_4, %_llgo_3 - %43 = phi { { ptr, ptr }, i1 } [ %42, %_llgo_3 ], [ zeroinitializer, %_llgo_4 ] - %44 = extractvalue { { ptr, ptr }, i1 } %43, 0 - %45 = extractvalue { { ptr, ptr }, i1 } %43, 1 - br i1 %45, label %_llgo_2, label %_llgo_1 + %35 = phi { { ptr, ptr }, i1 } [ %34, %_llgo_3 ], [ zeroinitializer, %_llgo_4 ] + %36 = extractvalue { { ptr, ptr }, i1 } %35, 0 + %37 = extractvalue { { ptr, ptr }, i1 } %35, 1 + br i1 %37, label %_llgo_2, label %_llgo_1 } define i64 @"github.com/goplus/llgo/cl/_testgo/reflect.callClosure$1"(ptr %0, i64 %1) { @@ -231,71 +223,63 @@ _llgo_0: %2 = call %reflect.Value @reflect.ValueOf(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %1) %3 = call i64 @reflect.Value.Kind(%reflect.Value %2) %4 = call %"github.com/goplus/llgo/runtime/internal/runtime.iface" @reflect.Value.Type(%reflect.Value %2) - %5 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %4) - %6 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %4, 0 - %7 = getelementptr ptr, ptr %6, i64 37 - %8 = load ptr, ptr %7, align 8 - %9 = insertvalue { ptr, ptr } undef, ptr %8, 0 - %10 = insertvalue { ptr, ptr } %9, ptr %5, 1 - %11 = extractvalue { ptr, ptr } %10, 1 - %12 = extractvalue { ptr, ptr } %10, 0 - %13 = call %"github.com/goplus/llgo/runtime/internal/runtime.String" %12(ptr %11) + %5 = call %"github.com/goplus/llgo/runtime/internal/runtime.String" @"__llgo_invoke.github.com/goplus/llgo/cl/_testgo/reflect.iface$M1QhMZ4ofNk-re2nO7vVZ4li1DQJvA-HUib82gANJRs$m34.String"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %4) call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintString"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @11, i64 4 }) call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8 32) call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintUint"(i64 %3) call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8 32) - call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintString"(%"github.com/goplus/llgo/runtime/internal/runtime.String" %13) + call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintString"(%"github.com/goplus/llgo/runtime/internal/runtime.String" %5) call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8 10) - %14 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocZ"(i64 24) - %15 = getelementptr inbounds %reflect.Value, ptr %14, i64 0 - %16 = call %reflect.Value @reflect.ValueOf(%"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_int, ptr inttoptr (i64 100 to ptr) }) - store %reflect.Value %16, ptr %15, align 8 - %17 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" undef, ptr %14, 0 - %18 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %17, i64 1, 1 - %19 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %18, i64 1, 2 - %20 = call %"github.com/goplus/llgo/runtime/internal/runtime.Slice" @reflect.Value.Call(%reflect.Value %2, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %19) - %21 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %20, 0 - %22 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %20, 1 - %23 = icmp sge i64 0, %22 - call void @"github.com/goplus/llgo/runtime/internal/runtime.AssertIndexRange"(i1 %23) - %24 = getelementptr inbounds %reflect.Value, ptr %21, i64 0 - %25 = load %reflect.Value, ptr %24, align 8 - %26 = call i64 @reflect.Value.Int(%reflect.Value %25) - call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintInt"(i64 %26) + %6 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocZ"(i64 24) + %7 = getelementptr inbounds %reflect.Value, ptr %6, i64 0 + %8 = call %reflect.Value @reflect.ValueOf(%"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_int, ptr inttoptr (i64 100 to ptr) }) + store %reflect.Value %8, ptr %7, align 8 + %9 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" undef, ptr %6, 0 + %10 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %9, i64 1, 1 + %11 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %10, i64 1, 2 + %12 = call %"github.com/goplus/llgo/runtime/internal/runtime.Slice" @reflect.Value.Call(%reflect.Value %2, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %11) + %13 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %12, 0 + %14 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %12, 1 + %15 = icmp sge i64 0, %14 + call void @"github.com/goplus/llgo/runtime/internal/runtime.AssertIndexRange"(i1 %15) + %16 = getelementptr inbounds %reflect.Value, ptr %13, i64 0 + %17 = load %reflect.Value, ptr %16, align 8 + %18 = call i64 @reflect.Value.Int(%reflect.Value %17) + call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintInt"(i64 %18) call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8 10) - %27 = call %"github.com/goplus/llgo/runtime/internal/runtime.eface" @reflect.Value.Interface(%reflect.Value %2) - %28 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %27, 0 - %29 = call i1 @"github.com/goplus/llgo/runtime/internal/runtime.MatchesClosure"(ptr @"_llgo_closure$QIHBTaw1IFobr8yvWpq-2AJFm3xBNhdW_aNBicqUBGk", ptr %28) - br i1 %29, label %_llgo_3, label %_llgo_4 + %19 = call %"github.com/goplus/llgo/runtime/internal/runtime.eface" @reflect.Value.Interface(%reflect.Value %2) + %20 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %19, 0 + %21 = call i1 @"github.com/goplus/llgo/runtime/internal/runtime.MatchesClosure"(ptr @"_llgo_closure$QIHBTaw1IFobr8yvWpq-2AJFm3xBNhdW_aNBicqUBGk", ptr %20) + br i1 %21, label %_llgo_3, label %_llgo_4 _llgo_1: ; preds = %_llgo_5 - %30 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) - store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @8, i64 5 }, ptr %30, align 8 - %31 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %30, 1 - call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %31) + %22 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) + store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @8, i64 5 }, ptr %22, align 8 + %23 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %22, 1 + call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %23) unreachable _llgo_2: ; preds = %_llgo_5 - %32 = extractvalue { ptr, ptr } %40, 1 - %33 = extractvalue { ptr, ptr } %40, 0 - %34 = call i64 %33(ptr %32, i64 100) + %24 = extractvalue { ptr, ptr } %32, 1 + %25 = extractvalue { ptr, ptr } %32, 0 + %26 = call i64 %25(ptr %24, i64 100) ret void _llgo_3: ; preds = %_llgo_0 - %35 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %27, 1 - %36 = load { ptr, ptr }, ptr %35, align 8 - %37 = insertvalue { { ptr, ptr }, i1 } undef, { ptr, ptr } %36, 0 - %38 = insertvalue { { ptr, ptr }, i1 } %37, i1 true, 1 + %27 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %19, 1 + %28 = load { ptr, ptr }, ptr %27, align 8 + %29 = insertvalue { { ptr, ptr }, i1 } undef, { ptr, ptr } %28, 0 + %30 = insertvalue { { ptr, ptr }, i1 } %29, i1 true, 1 br label %_llgo_5 _llgo_4: ; preds = %_llgo_0 br label %_llgo_5 _llgo_5: ; preds = %_llgo_4, %_llgo_3 - %39 = phi { { ptr, ptr }, i1 } [ %38, %_llgo_3 ], [ zeroinitializer, %_llgo_4 ] - %40 = extractvalue { { ptr, ptr }, i1 } %39, 0 - %41 = extractvalue { { ptr, ptr }, i1 } %39, 1 - br i1 %41, label %_llgo_2, label %_llgo_1 + %31 = phi { { ptr, ptr }, i1 } [ %30, %_llgo_3 ], [ zeroinitializer, %_llgo_4 ] + %32 = extractvalue { { ptr, ptr }, i1 } %31, 0 + %33 = extractvalue { { ptr, ptr }, i1 } %31, 1 + br i1 %33, label %_llgo_2, label %_llgo_1 } define i64 @"github.com/goplus/llgo/cl/_testgo/reflect.callFunc$1"(i64 %0) { @@ -322,90 +306,82 @@ _llgo_0: %10 = call %reflect.Value @reflect.Value.Method(%reflect.Value %9, i64 0) %11 = call i64 @reflect.Value.Kind(%reflect.Value %10) %12 = call %"github.com/goplus/llgo/runtime/internal/runtime.iface" @reflect.Value.Type(%reflect.Value %10) - %13 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %12) - %14 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %12, 0 - %15 = getelementptr ptr, ptr %14, i64 37 - %16 = load ptr, ptr %15, align 8 - %17 = insertvalue { ptr, ptr } undef, ptr %16, 0 - %18 = insertvalue { ptr, ptr } %17, ptr %13, 1 - %19 = extractvalue { ptr, ptr } %18, 1 - %20 = extractvalue { ptr, ptr } %18, 0 - %21 = call %"github.com/goplus/llgo/runtime/internal/runtime.String" %20(ptr %19) + %13 = call %"github.com/goplus/llgo/runtime/internal/runtime.String" @"__llgo_invoke.github.com/goplus/llgo/cl/_testgo/reflect.iface$M1QhMZ4ofNk-re2nO7vVZ4li1DQJvA-HUib82gANJRs$m34.String"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %12) call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintString"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @18, i64 7 }) call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8 32) call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintUint"(i64 %11) call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8 32) - call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintString"(%"github.com/goplus/llgo/runtime/internal/runtime.String" %21) + call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintString"(%"github.com/goplus/llgo/runtime/internal/runtime.String" %13) call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8 10) - %22 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocZ"(i64 24) - %23 = getelementptr inbounds %reflect.Value, ptr %22, i64 0 - %24 = call %reflect.Value @reflect.ValueOf(%"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_int, ptr inttoptr (i64 100 to ptr) }) - store %reflect.Value %24, ptr %23, align 8 - %25 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" undef, ptr %22, 0 - %26 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %25, i64 1, 1 - %27 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %26, i64 1, 2 - %28 = call %"github.com/goplus/llgo/runtime/internal/runtime.Slice" @reflect.Value.Call(%reflect.Value %10, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %27) - %29 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %28, 0 - %30 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %28, 1 - %31 = icmp sge i64 0, %30 - call void @"github.com/goplus/llgo/runtime/internal/runtime.AssertIndexRange"(i1 %31) - %32 = getelementptr inbounds %reflect.Value, ptr %29, i64 0 - %33 = load %reflect.Value, ptr %32, align 8 - %34 = call i64 @reflect.Value.Int(%reflect.Value %33) - call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintInt"(i64 %34) + %14 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocZ"(i64 24) + %15 = getelementptr inbounds %reflect.Value, ptr %14, i64 0 + %16 = call %reflect.Value @reflect.ValueOf(%"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_int, ptr inttoptr (i64 100 to ptr) }) + store %reflect.Value %16, ptr %15, align 8 + %17 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" undef, ptr %14, 0 + %18 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %17, i64 1, 1 + %19 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %18, i64 1, 2 + %20 = call %"github.com/goplus/llgo/runtime/internal/runtime.Slice" @reflect.Value.Call(%reflect.Value %10, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %19) + %21 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %20, 0 + %22 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %20, 1 + %23 = icmp sge i64 0, %22 + call void @"github.com/goplus/llgo/runtime/internal/runtime.AssertIndexRange"(i1 %23) + %24 = getelementptr inbounds %reflect.Value, ptr %21, i64 0 + %25 = load %reflect.Value, ptr %24, align 8 + %26 = call i64 @reflect.Value.Int(%reflect.Value %25) + call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintInt"(i64 %26) call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8 10) - %35 = call %"github.com/goplus/llgo/runtime/internal/runtime.eface" @reflect.Value.Interface(%reflect.Value %10) - %36 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %35, 0 - %37 = call i1 @"github.com/goplus/llgo/runtime/internal/runtime.MatchesClosure"(ptr @"_llgo_closure$QIHBTaw1IFobr8yvWpq-2AJFm3xBNhdW_aNBicqUBGk", ptr %36) - br i1 %37, label %_llgo_3, label %_llgo_4 + %27 = call %"github.com/goplus/llgo/runtime/internal/runtime.eface" @reflect.Value.Interface(%reflect.Value %10) + %28 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %27, 0 + %29 = call i1 @"github.com/goplus/llgo/runtime/internal/runtime.MatchesClosure"(ptr @"_llgo_closure$QIHBTaw1IFobr8yvWpq-2AJFm3xBNhdW_aNBicqUBGk", ptr %28) + br i1 %29, label %_llgo_3, label %_llgo_4 _llgo_1: ; preds = %_llgo_5 - %38 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) - store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @8, i64 5 }, ptr %38, align 8 - %39 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %38, 1 - call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %39) + %30 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) + store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @8, i64 5 }, ptr %30, align 8 + %31 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %30, 1 + call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %31) unreachable _llgo_2: ; preds = %_llgo_5 - %40 = extractvalue { ptr, ptr } %63, 1 - %41 = extractvalue { ptr, ptr } %63, 0 - %42 = call i64 %41(ptr %40, i64 1) - %43 = call %"github.com/goplus/llgo/runtime/internal/runtime.eface" @reflect.Value.Interface(%reflect.Value %10) - %44 = call %reflect.Value @reflect.ValueOf(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %43) - %45 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocZ"(i64 24) - %46 = getelementptr inbounds %reflect.Value, ptr %45, i64 0 - %47 = call %reflect.Value @reflect.ValueOf(%"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_int, ptr inttoptr (i64 100 to ptr) }) - store %reflect.Value %47, ptr %46, align 8 - %48 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" undef, ptr %45, 0 - %49 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %48, i64 1, 1 - %50 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %49, i64 1, 2 - %51 = call %"github.com/goplus/llgo/runtime/internal/runtime.Slice" @reflect.Value.Call(%reflect.Value %44, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %50) - %52 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %51, 0 - %53 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %51, 1 - %54 = icmp sge i64 0, %53 - call void @"github.com/goplus/llgo/runtime/internal/runtime.AssertIndexRange"(i1 %54) - %55 = getelementptr inbounds %reflect.Value, ptr %52, i64 0 - %56 = load %reflect.Value, ptr %55, align 8 - %57 = call i64 @reflect.Value.Int(%reflect.Value %56) - call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintInt"(i64 %57) + %32 = extractvalue { ptr, ptr } %55, 1 + %33 = extractvalue { ptr, ptr } %55, 0 + %34 = call i64 %33(ptr %32, i64 1) + %35 = call %"github.com/goplus/llgo/runtime/internal/runtime.eface" @reflect.Value.Interface(%reflect.Value %10) + %36 = call %reflect.Value @reflect.ValueOf(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %35) + %37 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocZ"(i64 24) + %38 = getelementptr inbounds %reflect.Value, ptr %37, i64 0 + %39 = call %reflect.Value @reflect.ValueOf(%"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_int, ptr inttoptr (i64 100 to ptr) }) + store %reflect.Value %39, ptr %38, align 8 + %40 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" undef, ptr %37, 0 + %41 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %40, i64 1, 1 + %42 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %41, i64 1, 2 + %43 = call %"github.com/goplus/llgo/runtime/internal/runtime.Slice" @reflect.Value.Call(%reflect.Value %36, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %42) + %44 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %43, 0 + %45 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %43, 1 + %46 = icmp sge i64 0, %45 + call void @"github.com/goplus/llgo/runtime/internal/runtime.AssertIndexRange"(i1 %46) + %47 = getelementptr inbounds %reflect.Value, ptr %44, i64 0 + %48 = load %reflect.Value, ptr %47, align 8 + %49 = call i64 @reflect.Value.Int(%reflect.Value %48) + call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintInt"(i64 %49) call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8 10) ret void _llgo_3: ; preds = %_llgo_0 - %58 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %35, 1 - %59 = load { ptr, ptr }, ptr %58, align 8 - %60 = insertvalue { { ptr, ptr }, i1 } undef, { ptr, ptr } %59, 0 - %61 = insertvalue { { ptr, ptr }, i1 } %60, i1 true, 1 + %50 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %27, 1 + %51 = load { ptr, ptr }, ptr %50, align 8 + %52 = insertvalue { { ptr, ptr }, i1 } undef, { ptr, ptr } %51, 0 + %53 = insertvalue { { ptr, ptr }, i1 } %52, i1 true, 1 br label %_llgo_5 _llgo_4: ; preds = %_llgo_0 br label %_llgo_5 _llgo_5: ; preds = %_llgo_4, %_llgo_3 - %62 = phi { { ptr, ptr }, i1 } [ %61, %_llgo_3 ], [ zeroinitializer, %_llgo_4 ] - %63 = extractvalue { { ptr, ptr }, i1 } %62, 0 - %64 = extractvalue { { ptr, ptr }, i1 } %62, 1 - br i1 %64, label %_llgo_2, label %_llgo_1 + %54 = phi { { ptr, ptr }, i1 } [ %53, %_llgo_3 ], [ zeroinitializer, %_llgo_4 ] + %55 = extractvalue { { ptr, ptr }, i1 } %54, 0 + %56 = extractvalue { { ptr, ptr }, i1 } %54, 1 + br i1 %56, label %_llgo_2, label %_llgo_1 } define void @"github.com/goplus/llgo/cl/_testgo/reflect.callMethod"() { @@ -418,90 +394,82 @@ _llgo_0: %4 = call %reflect.Value @reflect.Value.Method(%reflect.Value %3, i64 0) %5 = call i64 @reflect.Value.Kind(%reflect.Value %4) %6 = call %"github.com/goplus/llgo/runtime/internal/runtime.iface" @reflect.Value.Type(%reflect.Value %4) - %7 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %6) - %8 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %6, 0 - %9 = getelementptr ptr, ptr %8, i64 37 - %10 = load ptr, ptr %9, align 8 - %11 = insertvalue { ptr, ptr } undef, ptr %10, 0 - %12 = insertvalue { ptr, ptr } %11, ptr %7, 1 - %13 = extractvalue { ptr, ptr } %12, 1 - %14 = extractvalue { ptr, ptr } %12, 0 - %15 = call %"github.com/goplus/llgo/runtime/internal/runtime.String" %14(ptr %13) + %7 = call %"github.com/goplus/llgo/runtime/internal/runtime.String" @"__llgo_invoke.github.com/goplus/llgo/cl/_testgo/reflect.iface$M1QhMZ4ofNk-re2nO7vVZ4li1DQJvA-HUib82gANJRs$m34.String"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %6) call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintString"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @19, i64 6 }) call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8 32) call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintUint"(i64 %5) call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8 32) - call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintString"(%"github.com/goplus/llgo/runtime/internal/runtime.String" %15) + call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintString"(%"github.com/goplus/llgo/runtime/internal/runtime.String" %7) call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8 10) - %16 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocZ"(i64 24) - %17 = getelementptr inbounds %reflect.Value, ptr %16, i64 0 - %18 = call %reflect.Value @reflect.ValueOf(%"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_int, ptr inttoptr (i64 100 to ptr) }) - store %reflect.Value %18, ptr %17, align 8 - %19 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" undef, ptr %16, 0 - %20 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %19, i64 1, 1 - %21 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %20, i64 1, 2 - %22 = call %"github.com/goplus/llgo/runtime/internal/runtime.Slice" @reflect.Value.Call(%reflect.Value %4, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %21) - %23 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %22, 0 - %24 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %22, 1 - %25 = icmp sge i64 0, %24 - call void @"github.com/goplus/llgo/runtime/internal/runtime.AssertIndexRange"(i1 %25) - %26 = getelementptr inbounds %reflect.Value, ptr %23, i64 0 - %27 = load %reflect.Value, ptr %26, align 8 - %28 = call i64 @reflect.Value.Int(%reflect.Value %27) - call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintInt"(i64 %28) + %8 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocZ"(i64 24) + %9 = getelementptr inbounds %reflect.Value, ptr %8, i64 0 + %10 = call %reflect.Value @reflect.ValueOf(%"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_int, ptr inttoptr (i64 100 to ptr) }) + store %reflect.Value %10, ptr %9, align 8 + %11 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" undef, ptr %8, 0 + %12 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %11, i64 1, 1 + %13 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %12, i64 1, 2 + %14 = call %"github.com/goplus/llgo/runtime/internal/runtime.Slice" @reflect.Value.Call(%reflect.Value %4, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %13) + %15 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %14, 0 + %16 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %14, 1 + %17 = icmp sge i64 0, %16 + call void @"github.com/goplus/llgo/runtime/internal/runtime.AssertIndexRange"(i1 %17) + %18 = getelementptr inbounds %reflect.Value, ptr %15, i64 0 + %19 = load %reflect.Value, ptr %18, align 8 + %20 = call i64 @reflect.Value.Int(%reflect.Value %19) + call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintInt"(i64 %20) call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8 10) - %29 = call %"github.com/goplus/llgo/runtime/internal/runtime.eface" @reflect.Value.Interface(%reflect.Value %4) - %30 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %29, 0 - %31 = call i1 @"github.com/goplus/llgo/runtime/internal/runtime.MatchesClosure"(ptr @"_llgo_closure$QIHBTaw1IFobr8yvWpq-2AJFm3xBNhdW_aNBicqUBGk", ptr %30) - br i1 %31, label %_llgo_3, label %_llgo_4 + %21 = call %"github.com/goplus/llgo/runtime/internal/runtime.eface" @reflect.Value.Interface(%reflect.Value %4) + %22 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %21, 0 + %23 = call i1 @"github.com/goplus/llgo/runtime/internal/runtime.MatchesClosure"(ptr @"_llgo_closure$QIHBTaw1IFobr8yvWpq-2AJFm3xBNhdW_aNBicqUBGk", ptr %22) + br i1 %23, label %_llgo_3, label %_llgo_4 _llgo_1: ; preds = %_llgo_5 - %32 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) - store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @8, i64 5 }, ptr %32, align 8 - %33 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %32, 1 - call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %33) + %24 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) + store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @8, i64 5 }, ptr %24, align 8 + %25 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %24, 1 + call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %25) unreachable _llgo_2: ; preds = %_llgo_5 - %34 = extractvalue { ptr, ptr } %57, 1 - %35 = extractvalue { ptr, ptr } %57, 0 - %36 = call i64 %35(ptr %34, i64 1) - %37 = call %"github.com/goplus/llgo/runtime/internal/runtime.eface" @reflect.Value.Interface(%reflect.Value %4) - %38 = call %reflect.Value @reflect.ValueOf(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %37) - %39 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocZ"(i64 24) - %40 = getelementptr inbounds %reflect.Value, ptr %39, i64 0 - %41 = call %reflect.Value @reflect.ValueOf(%"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_int, ptr inttoptr (i64 100 to ptr) }) - store %reflect.Value %41, ptr %40, align 8 - %42 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" undef, ptr %39, 0 - %43 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %42, i64 1, 1 - %44 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %43, i64 1, 2 - %45 = call %"github.com/goplus/llgo/runtime/internal/runtime.Slice" @reflect.Value.Call(%reflect.Value %38, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %44) - %46 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %45, 0 - %47 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %45, 1 - %48 = icmp sge i64 0, %47 - call void @"github.com/goplus/llgo/runtime/internal/runtime.AssertIndexRange"(i1 %48) - %49 = getelementptr inbounds %reflect.Value, ptr %46, i64 0 - %50 = load %reflect.Value, ptr %49, align 8 - %51 = call i64 @reflect.Value.Int(%reflect.Value %50) - call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintInt"(i64 %51) + %26 = extractvalue { ptr, ptr } %49, 1 + %27 = extractvalue { ptr, ptr } %49, 0 + %28 = call i64 %27(ptr %26, i64 1) + %29 = call %"github.com/goplus/llgo/runtime/internal/runtime.eface" @reflect.Value.Interface(%reflect.Value %4) + %30 = call %reflect.Value @reflect.ValueOf(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %29) + %31 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocZ"(i64 24) + %32 = getelementptr inbounds %reflect.Value, ptr %31, i64 0 + %33 = call %reflect.Value @reflect.ValueOf(%"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_int, ptr inttoptr (i64 100 to ptr) }) + store %reflect.Value %33, ptr %32, align 8 + %34 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" undef, ptr %31, 0 + %35 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %34, i64 1, 1 + %36 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %35, i64 1, 2 + %37 = call %"github.com/goplus/llgo/runtime/internal/runtime.Slice" @reflect.Value.Call(%reflect.Value %30, %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %36) + %38 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %37, 0 + %39 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.Slice" %37, 1 + %40 = icmp sge i64 0, %39 + call void @"github.com/goplus/llgo/runtime/internal/runtime.AssertIndexRange"(i1 %40) + %41 = getelementptr inbounds %reflect.Value, ptr %38, i64 0 + %42 = load %reflect.Value, ptr %41, align 8 + %43 = call i64 @reflect.Value.Int(%reflect.Value %42) + call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintInt"(i64 %43) call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8 10) ret void _llgo_3: ; preds = %_llgo_0 - %52 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %29, 1 - %53 = load { ptr, ptr }, ptr %52, align 8 - %54 = insertvalue { { ptr, ptr }, i1 } undef, { ptr, ptr } %53, 0 - %55 = insertvalue { { ptr, ptr }, i1 } %54, i1 true, 1 + %44 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %21, 1 + %45 = load { ptr, ptr }, ptr %44, align 8 + %46 = insertvalue { { ptr, ptr }, i1 } undef, { ptr, ptr } %45, 0 + %47 = insertvalue { { ptr, ptr }, i1 } %46, i1 true, 1 br label %_llgo_5 _llgo_4: ; preds = %_llgo_0 br label %_llgo_5 _llgo_5: ; preds = %_llgo_4, %_llgo_3 - %56 = phi { { ptr, ptr }, i1 } [ %55, %_llgo_3 ], [ zeroinitializer, %_llgo_4 ] - %57 = extractvalue { { ptr, ptr }, i1 } %56, 0 - %58 = extractvalue { { ptr, ptr }, i1 } %56, 1 - br i1 %58, label %_llgo_2, label %_llgo_1 + %48 = phi { { ptr, ptr }, i1 } [ %47, %_llgo_3 ], [ zeroinitializer, %_llgo_4 ] + %49 = extractvalue { { ptr, ptr }, i1 } %48, 0 + %50 = extractvalue { { ptr, ptr }, i1 } %48, 1 + br i1 %50, label %_llgo_2, label %_llgo_1 } define void @"github.com/goplus/llgo/cl/_testgo/reflect.callSlice"() { @@ -782,62 +750,46 @@ _llgo_8: ; preds = %_llgo_7 _llgo_9: ; preds = %_llgo_8, %_llgo_7 %35 = call %"github.com/goplus/llgo/runtime/internal/runtime.iface" @reflect.Value.Type(%reflect.Value %6) - %36 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %35) - %37 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %35, 0 - %38 = getelementptr ptr, ptr %37, i64 20 - %39 = load ptr, ptr %38, align 8 - %40 = insertvalue { ptr, ptr } undef, ptr %39, 0 - %41 = insertvalue { ptr, ptr } %40, ptr %36, 1 - %42 = extractvalue { ptr, ptr } %41, 1 - %43 = extractvalue { ptr, ptr } %41, 0 - %44 = call %"github.com/goplus/llgo/runtime/internal/runtime.iface" %43(ptr %42) - %45 = call %reflect.Value @reflect.New(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %44) - %46 = call %reflect.Value @reflect.Value.Elem(%reflect.Value %45) - %47 = call %"github.com/goplus/llgo/runtime/internal/runtime.iface" @reflect.Value.Type(%reflect.Value %6) - %48 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %47) - %49 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %47, 0 - %50 = getelementptr ptr, ptr %49, i64 11 - %51 = load ptr, ptr %50, align 8 - %52 = insertvalue { ptr, ptr } undef, ptr %51, 0 - %53 = insertvalue { ptr, ptr } %52, ptr %48, 1 - %54 = extractvalue { ptr, ptr } %53, 1 - %55 = extractvalue { ptr, ptr } %53, 0 - %56 = call %"github.com/goplus/llgo/runtime/internal/runtime.iface" %55(ptr %54) - %57 = call %reflect.Value @reflect.New(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %56) - %58 = call %reflect.Value @reflect.Value.Elem(%reflect.Value %57) - %59 = call ptr @reflect.Value.MapRange(%reflect.Value %6) + %36 = call %"github.com/goplus/llgo/runtime/internal/runtime.iface" @"__llgo_invoke.github.com/goplus/llgo/cl/_testgo/reflect.iface$M1QhMZ4ofNk-re2nO7vVZ4li1DQJvA-HUib82gANJRs$m17.Key"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %35) + %37 = call %reflect.Value @reflect.New(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %36) + %38 = call %reflect.Value @reflect.Value.Elem(%reflect.Value %37) + %39 = call %"github.com/goplus/llgo/runtime/internal/runtime.iface" @reflect.Value.Type(%reflect.Value %6) + %40 = call %"github.com/goplus/llgo/runtime/internal/runtime.iface" @"__llgo_invoke.github.com/goplus/llgo/cl/_testgo/reflect.iface$M1QhMZ4ofNk-re2nO7vVZ4li1DQJvA-HUib82gANJRs$m8.Elem"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %39) + %41 = call %reflect.Value @reflect.New(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %40) + %42 = call %reflect.Value @reflect.Value.Elem(%reflect.Value %41) + %43 = call ptr @reflect.Value.MapRange(%reflect.Value %6) br label %_llgo_12 _llgo_10: ; preds = %_llgo_12 - call void @reflect.Value.SetIterKey(%reflect.Value %46, ptr %59) - call void @reflect.Value.SetIterValue(%reflect.Value %58, ptr %59) - %60 = call i64 @reflect.Value.Int(%reflect.Value %46) - %61 = call %reflect.Value @"reflect.(*MapIter).Key"(ptr %59) - %62 = call i64 @reflect.Value.Int(%reflect.Value %61) - %63 = icmp ne i64 %60, %62 - br i1 %63, label %_llgo_13, label %_llgo_14 + call void @reflect.Value.SetIterKey(%reflect.Value %38, ptr %43) + call void @reflect.Value.SetIterValue(%reflect.Value %42, ptr %43) + %44 = call i64 @reflect.Value.Int(%reflect.Value %38) + %45 = call %reflect.Value @"reflect.(*MapIter).Key"(ptr %43) + %46 = call i64 @reflect.Value.Int(%reflect.Value %45) + %47 = icmp ne i64 %44, %46 + br i1 %47, label %_llgo_13, label %_llgo_14 _llgo_11: ; preds = %_llgo_12 ret void _llgo_12: ; preds = %_llgo_14, %_llgo_9 - %64 = call i1 @"reflect.(*MapIter).Next"(ptr %59) - br i1 %64, label %_llgo_10, label %_llgo_11 + %48 = call i1 @"reflect.(*MapIter).Next"(ptr %43) + br i1 %48, label %_llgo_10, label %_llgo_11 _llgo_13: ; preds = %_llgo_14, %_llgo_10 - %65 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) - store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @44, i64 13 }, ptr %65, align 8 - %66 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %65, 1 - call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %66) + %49 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) + store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @44, i64 13 }, ptr %49, align 8 + %50 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %49, 1 + call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %50) unreachable _llgo_14: ; preds = %_llgo_10 - %67 = call %"github.com/goplus/llgo/runtime/internal/runtime.String" @reflect.Value.String(%reflect.Value %58) - %68 = call %reflect.Value @"reflect.(*MapIter).Value"(ptr %59) - %69 = call %"github.com/goplus/llgo/runtime/internal/runtime.String" @reflect.Value.String(%reflect.Value %68) - %70 = call i1 @"github.com/goplus/llgo/runtime/internal/runtime.StringEqual"(%"github.com/goplus/llgo/runtime/internal/runtime.String" %67, %"github.com/goplus/llgo/runtime/internal/runtime.String" %69) - %71 = xor i1 %70, true - br i1 %71, label %_llgo_13, label %_llgo_12 + %51 = call %"github.com/goplus/llgo/runtime/internal/runtime.String" @reflect.Value.String(%reflect.Value %42) + %52 = call %reflect.Value @"reflect.(*MapIter).Value"(ptr %43) + %53 = call %"github.com/goplus/llgo/runtime/internal/runtime.String" @reflect.Value.String(%reflect.Value %52) + %54 = call i1 @"github.com/goplus/llgo/runtime/internal/runtime.StringEqual"(%"github.com/goplus/llgo/runtime/internal/runtime.String" %51, %"github.com/goplus/llgo/runtime/internal/runtime.String" %53) + %55 = xor i1 %54, true + br i1 %55, label %_llgo_13, label %_llgo_12 } define void @"github.com/goplus/llgo/cl/_testgo/reflect.mapDemo2"() { @@ -927,62 +879,46 @@ _llgo_8: ; preds = %_llgo_7 _llgo_9: ; preds = %_llgo_8, %_llgo_7 %42 = call %"github.com/goplus/llgo/runtime/internal/runtime.iface" @reflect.Value.Type(%reflect.Value %5) - %43 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %42) - %44 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %42, 0 - %45 = getelementptr ptr, ptr %44, i64 20 - %46 = load ptr, ptr %45, align 8 - %47 = insertvalue { ptr, ptr } undef, ptr %46, 0 - %48 = insertvalue { ptr, ptr } %47, ptr %43, 1 - %49 = extractvalue { ptr, ptr } %48, 1 - %50 = extractvalue { ptr, ptr } %48, 0 - %51 = call %"github.com/goplus/llgo/runtime/internal/runtime.iface" %50(ptr %49) - %52 = call %reflect.Value @reflect.New(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %51) - %53 = call %reflect.Value @reflect.Value.Elem(%reflect.Value %52) - %54 = call %"github.com/goplus/llgo/runtime/internal/runtime.iface" @reflect.Value.Type(%reflect.Value %5) - %55 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %54) - %56 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %54, 0 - %57 = getelementptr ptr, ptr %56, i64 11 - %58 = load ptr, ptr %57, align 8 - %59 = insertvalue { ptr, ptr } undef, ptr %58, 0 - %60 = insertvalue { ptr, ptr } %59, ptr %55, 1 - %61 = extractvalue { ptr, ptr } %60, 1 - %62 = extractvalue { ptr, ptr } %60, 0 - %63 = call %"github.com/goplus/llgo/runtime/internal/runtime.iface" %62(ptr %61) - %64 = call %reflect.Value @reflect.New(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %63) - %65 = call %reflect.Value @reflect.Value.Elem(%reflect.Value %64) - %66 = call ptr @reflect.Value.MapRange(%reflect.Value %5) + %43 = call %"github.com/goplus/llgo/runtime/internal/runtime.iface" @"__llgo_invoke.github.com/goplus/llgo/cl/_testgo/reflect.iface$M1QhMZ4ofNk-re2nO7vVZ4li1DQJvA-HUib82gANJRs$m17.Key"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %42) + %44 = call %reflect.Value @reflect.New(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %43) + %45 = call %reflect.Value @reflect.Value.Elem(%reflect.Value %44) + %46 = call %"github.com/goplus/llgo/runtime/internal/runtime.iface" @reflect.Value.Type(%reflect.Value %5) + %47 = call %"github.com/goplus/llgo/runtime/internal/runtime.iface" @"__llgo_invoke.github.com/goplus/llgo/cl/_testgo/reflect.iface$M1QhMZ4ofNk-re2nO7vVZ4li1DQJvA-HUib82gANJRs$m8.Elem"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %46) + %48 = call %reflect.Value @reflect.New(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %47) + %49 = call %reflect.Value @reflect.Value.Elem(%reflect.Value %48) + %50 = call ptr @reflect.Value.MapRange(%reflect.Value %5) br label %_llgo_12 _llgo_10: ; preds = %_llgo_12 - call void @reflect.Value.SetIterKey(%reflect.Value %53, ptr %66) - call void @reflect.Value.SetIterValue(%reflect.Value %65, ptr %66) - %67 = call i64 @reflect.Value.Int(%reflect.Value %53) - %68 = call %reflect.Value @"reflect.(*MapIter).Key"(ptr %66) - %69 = call i64 @reflect.Value.Int(%reflect.Value %68) - %70 = icmp ne i64 %67, %69 - br i1 %70, label %_llgo_13, label %_llgo_14 + call void @reflect.Value.SetIterKey(%reflect.Value %45, ptr %50) + call void @reflect.Value.SetIterValue(%reflect.Value %49, ptr %50) + %51 = call i64 @reflect.Value.Int(%reflect.Value %45) + %52 = call %reflect.Value @"reflect.(*MapIter).Key"(ptr %50) + %53 = call i64 @reflect.Value.Int(%reflect.Value %52) + %54 = icmp ne i64 %51, %53 + br i1 %54, label %_llgo_13, label %_llgo_14 _llgo_11: ; preds = %_llgo_12 ret void _llgo_12: ; preds = %_llgo_14, %_llgo_9 - %71 = call i1 @"reflect.(*MapIter).Next"(ptr %66) - br i1 %71, label %_llgo_10, label %_llgo_11 + %55 = call i1 @"reflect.(*MapIter).Next"(ptr %50) + br i1 %55, label %_llgo_10, label %_llgo_11 _llgo_13: ; preds = %_llgo_14, %_llgo_10 - %72 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) - store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @44, i64 13 }, ptr %72, align 8 - %73 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %72, 1 - call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %73) + %56 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) + store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @44, i64 13 }, ptr %56, align 8 + %57 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %56, 1 + call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %57) unreachable _llgo_14: ; preds = %_llgo_10 - %74 = call %"github.com/goplus/llgo/runtime/internal/runtime.String" @reflect.Value.String(%reflect.Value %65) - %75 = call %reflect.Value @"reflect.(*MapIter).Value"(ptr %66) - %76 = call %"github.com/goplus/llgo/runtime/internal/runtime.String" @reflect.Value.String(%reflect.Value %75) - %77 = call i1 @"github.com/goplus/llgo/runtime/internal/runtime.StringEqual"(%"github.com/goplus/llgo/runtime/internal/runtime.String" %74, %"github.com/goplus/llgo/runtime/internal/runtime.String" %76) - %78 = xor i1 %77, true - br i1 %78, label %_llgo_13, label %_llgo_12 + %58 = call %"github.com/goplus/llgo/runtime/internal/runtime.String" @reflect.Value.String(%reflect.Value %49) + %59 = call %reflect.Value @"reflect.(*MapIter).Value"(ptr %50) + %60 = call %"github.com/goplus/llgo/runtime/internal/runtime.String" @reflect.Value.String(%reflect.Value %59) + %61 = call i1 @"github.com/goplus/llgo/runtime/internal/runtime.StringEqual"(%"github.com/goplus/llgo/runtime/internal/runtime.String" %58, %"github.com/goplus/llgo/runtime/internal/runtime.String" %60) + %62 = xor i1 %61, true + br i1 %62, label %_llgo_13, label %_llgo_12 } declare void @"github.com/goplus/llgo/runtime/internal/runtime.PrintString"(%"github.com/goplus/llgo/runtime/internal/runtime.String") @@ -1015,6 +951,20 @@ declare i64 @reflect.Value.Kind(%reflect.Value) declare %"github.com/goplus/llgo/runtime/internal/runtime.iface" @reflect.Value.Type(%reflect.Value) +define weak_odr %"github.com/goplus/llgo/runtime/internal/runtime.String" @"__llgo_invoke.github.com/goplus/llgo/cl/_testgo/reflect.iface$M1QhMZ4ofNk-re2nO7vVZ4li1DQJvA-HUib82gANJRs$m34.String"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) { +_llgo_0: + %1 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) + %2 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %0, 0 + %3 = getelementptr ptr, ptr %2, i64 37 + %4 = load ptr, ptr %3, align 8 + %5 = insertvalue { ptr, ptr } undef, ptr %4, 0 + %6 = insertvalue { ptr, ptr } %5, ptr %1, 1 + %7 = extractvalue { ptr, ptr } %6, 1 + %8 = extractvalue { ptr, ptr } %6, 0 + %9 = tail call %"github.com/goplus/llgo/runtime/internal/runtime.String" %8(ptr %7) + ret %"github.com/goplus/llgo/runtime/internal/runtime.String" %9 +} + declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface") declare void @"github.com/goplus/llgo/runtime/internal/runtime.PrintUint"(i64) @@ -1113,10 +1063,38 @@ declare void @reflect.Value.SetMapIndex(%reflect.Value, %reflect.Value, %reflect declare i1 @reflect.Value.IsValid(%reflect.Value) +define weak_odr %"github.com/goplus/llgo/runtime/internal/runtime.iface" @"__llgo_invoke.github.com/goplus/llgo/cl/_testgo/reflect.iface$M1QhMZ4ofNk-re2nO7vVZ4li1DQJvA-HUib82gANJRs$m17.Key"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) { +_llgo_0: + %1 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) + %2 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %0, 0 + %3 = getelementptr ptr, ptr %2, i64 20 + %4 = load ptr, ptr %3, align 8 + %5 = insertvalue { ptr, ptr } undef, ptr %4, 0 + %6 = insertvalue { ptr, ptr } %5, ptr %1, 1 + %7 = extractvalue { ptr, ptr } %6, 1 + %8 = extractvalue { ptr, ptr } %6, 0 + %9 = tail call %"github.com/goplus/llgo/runtime/internal/runtime.iface" %8(ptr %7) + ret %"github.com/goplus/llgo/runtime/internal/runtime.iface" %9 +} + declare %reflect.Value @reflect.New(%"github.com/goplus/llgo/runtime/internal/runtime.iface") declare %reflect.Value @reflect.Value.Elem(%reflect.Value) +define weak_odr %"github.com/goplus/llgo/runtime/internal/runtime.iface" @"__llgo_invoke.github.com/goplus/llgo/cl/_testgo/reflect.iface$M1QhMZ4ofNk-re2nO7vVZ4li1DQJvA-HUib82gANJRs$m8.Elem"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) { +_llgo_0: + %1 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) + %2 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %0, 0 + %3 = getelementptr ptr, ptr %2, i64 11 + %4 = load ptr, ptr %3, align 8 + %5 = insertvalue { ptr, ptr } undef, ptr %4, 0 + %6 = insertvalue { ptr, ptr } %5, ptr %1, 1 + %7 = extractvalue { ptr, ptr } %6, 1 + %8 = extractvalue { ptr, ptr } %6, 0 + %9 = tail call %"github.com/goplus/llgo/runtime/internal/runtime.iface" %8(ptr %7) + ret %"github.com/goplus/llgo/runtime/internal/runtime.iface" %9 +} + declare ptr @reflect.Value.MapRange(%reflect.Value) declare i1 @"reflect.(*MapIter).Next"(ptr) diff --git a/cl/_testgo/tpinst/out.ll b/cl/_testgo/tpinst/out.ll index 8918c8a929..10f77c57a9 100644 --- a/cl/_testgo/tpinst/out.ll +++ b/cl/_testgo/tpinst/out.ll @@ -71,88 +71,64 @@ _llgo_0: %2 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr @"_llgo_iface$Jvxc0PCI_drlfK7S5npMGdZkQLeRkQ_x2e2CifPE6w8", ptr @"*_llgo_github.com/goplus/llgo/cl/_testgo/tpinst.M[int]") %3 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %2, 0 %4 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %3, ptr %0, 1 - %5 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %4) - %6 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %4, 0 - %7 = getelementptr ptr, ptr %6, i64 3 - %8 = load ptr, ptr %7, align 8 - %9 = insertvalue { ptr, ptr } undef, ptr %8, 0 - %10 = insertvalue { ptr, ptr } %9, ptr %5, 1 - %11 = extractvalue { ptr, ptr } %10, 1 - %12 = extractvalue { ptr, ptr } %10, 0 - %13 = call i64 %12(ptr %11) - %14 = icmp ne i64 %13, 100 - br i1 %14, label %_llgo_1, label %_llgo_2 + %5 = call i64 @"__llgo_invoke._llgo_iface$Jvxc0PCI_drlfK7S5npMGdZkQLeRkQ_x2e2CifPE6w8$m0.Value"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %4) + %6 = icmp ne i64 %5, 100 + br i1 %6, label %_llgo_1, label %_llgo_2 _llgo_1: ; preds = %_llgo_0 - %15 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) - store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @9, i64 5 }, ptr %15, align 8 - %16 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %15, 1 - call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %16) + %7 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) + store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @9, i64 5 }, ptr %7, align 8 + %8 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %7, 1 + call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %8) unreachable _llgo_2: ; preds = %_llgo_0 - %17 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocZ"(i64 8) - %18 = getelementptr inbounds %"github.com/goplus/llgo/cl/_testgo/tpinst.M[float64]", ptr %17, i32 0, i32 0 - store double 1.001000e+02, ptr %18, align 8 - %19 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr @"_llgo_iface$2dxw6yZ6V86Spb7J0dTDIoWqg7ba7UDXlAlpJv3-HLk", ptr @"*_llgo_github.com/goplus/llgo/cl/_testgo/tpinst.M[float64]") - %20 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %19, 0 - %21 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %20, ptr %17, 1 - %22 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %21) - %23 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %21, 0 - %24 = getelementptr ptr, ptr %23, i64 3 - %25 = load ptr, ptr %24, align 8 - %26 = insertvalue { ptr, ptr } undef, ptr %25, 0 - %27 = insertvalue { ptr, ptr } %26, ptr %22, 1 - %28 = extractvalue { ptr, ptr } %27, 1 - %29 = extractvalue { ptr, ptr } %27, 0 - %30 = call double %29(ptr %28) - %31 = fcmp une double %30, 1.001000e+02 - br i1 %31, label %_llgo_3, label %_llgo_4 + %9 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocZ"(i64 8) + %10 = getelementptr inbounds %"github.com/goplus/llgo/cl/_testgo/tpinst.M[float64]", ptr %9, i32 0, i32 0 + store double 1.001000e+02, ptr %10, align 8 + %11 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr @"_llgo_iface$2dxw6yZ6V86Spb7J0dTDIoWqg7ba7UDXlAlpJv3-HLk", ptr @"*_llgo_github.com/goplus/llgo/cl/_testgo/tpinst.M[float64]") + %12 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %11, 0 + %13 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %12, ptr %9, 1 + %14 = call double @"__llgo_invoke._llgo_iface$2dxw6yZ6V86Spb7J0dTDIoWqg7ba7UDXlAlpJv3-HLk$m0.Value"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %13) + %15 = fcmp une double %14, 1.001000e+02 + br i1 %15, label %_llgo_3, label %_llgo_4 _llgo_3: ; preds = %_llgo_2 - %32 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) - store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @9, i64 5 }, ptr %32, align 8 - %33 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %32, 1 - call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %33) + %16 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) + store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @9, i64 5 }, ptr %16, align 8 + %17 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %16, 1 + call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %17) unreachable _llgo_4: ; preds = %_llgo_2 - %34 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfaceType"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %4) - %35 = call i1 @"github.com/goplus/llgo/runtime/internal/runtime.Implements"(ptr @"github.com/goplus/llgo/cl/_testgo/tpinst.iface$2sV9fFeqOv1SzesvwIdhTqCFzDT8ZX5buKUSAoHNSww", ptr %34) - br i1 %35, label %_llgo_7, label %_llgo_8 + %18 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfaceType"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %4) + %19 = call i1 @"github.com/goplus/llgo/runtime/internal/runtime.Implements"(ptr @"github.com/goplus/llgo/cl/_testgo/tpinst.iface$2sV9fFeqOv1SzesvwIdhTqCFzDT8ZX5buKUSAoHNSww", ptr %18) + br i1 %19, label %_llgo_7, label %_llgo_8 _llgo_5: ; preds = %_llgo_7 - %36 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) - store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @9, i64 5 }, ptr %36, align 8 - %37 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %36, 1 - call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %37) + %20 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) + store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @9, i64 5 }, ptr %20, align 8 + %21 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %20, 1 + call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %21) unreachable _llgo_6: ; preds = %_llgo_7 ret void _llgo_7: ; preds = %_llgo_4 - %38 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %4, 1 - %39 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr @"github.com/goplus/llgo/cl/_testgo/tpinst.iface$2sV9fFeqOv1SzesvwIdhTqCFzDT8ZX5buKUSAoHNSww", ptr %34) - %40 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %39, 0 - %41 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %40, ptr %38, 1 - %42 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %41) - %43 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %41, 0 - %44 = getelementptr ptr, ptr %43, i64 3 - %45 = load ptr, ptr %44, align 8 - %46 = insertvalue { ptr, ptr } undef, ptr %45, 0 - %47 = insertvalue { ptr, ptr } %46, ptr %42, 1 - %48 = extractvalue { ptr, ptr } %47, 1 - %49 = extractvalue { ptr, ptr } %47, 0 - %50 = call i64 %49(ptr %48) - %51 = icmp ne i64 %50, 100 - br i1 %51, label %_llgo_5, label %_llgo_6 + %22 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %4, 1 + %23 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr @"github.com/goplus/llgo/cl/_testgo/tpinst.iface$2sV9fFeqOv1SzesvwIdhTqCFzDT8ZX5buKUSAoHNSww", ptr %18) + %24 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %23, 0 + %25 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %24, ptr %22, 1 + %26 = call i64 @"__llgo_invoke.github.com/goplus/llgo/cl/_testgo/tpinst.iface$2sV9fFeqOv1SzesvwIdhTqCFzDT8ZX5buKUSAoHNSww$m0.value"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %25) + %27 = icmp ne i64 %26, 100 + br i1 %27, label %_llgo_5, label %_llgo_6 _llgo_8: ; preds = %_llgo_4 - %52 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) - store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @16, i64 95 }, ptr %52, align 8 - %53 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %52, 1 - call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %53) + %28 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) + store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @16, i64 95 }, ptr %28, align 8 + %29 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %28, 1 + call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %29) unreachable } @@ -219,6 +195,20 @@ _llgo_0: declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr, ptr) +define weak_odr i64 @"__llgo_invoke._llgo_iface$Jvxc0PCI_drlfK7S5npMGdZkQLeRkQ_x2e2CifPE6w8$m0.Value"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) { +_llgo_0: + %1 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) + %2 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %0, 0 + %3 = getelementptr ptr, ptr %2, i64 3 + %4 = load ptr, ptr %3, align 8 + %5 = insertvalue { ptr, ptr } undef, ptr %4, 0 + %6 = insertvalue { ptr, ptr } %5, ptr %1, 1 + %7 = extractvalue { ptr, ptr } %6, 1 + %8 = extractvalue { ptr, ptr } %6, 0 + %9 = tail call i64 %8(ptr %7) + ret i64 %9 +} + declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface") declare i1 @"github.com/goplus/llgo/runtime/internal/runtime.strequal"(ptr, ptr) @@ -255,6 +245,34 @@ _llgo_0: ret i1 %3 } +define weak_odr double @"__llgo_invoke._llgo_iface$2dxw6yZ6V86Spb7J0dTDIoWqg7ba7UDXlAlpJv3-HLk$m0.Value"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) { +_llgo_0: + %1 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) + %2 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %0, 0 + %3 = getelementptr ptr, ptr %2, i64 3 + %4 = load ptr, ptr %3, align 8 + %5 = insertvalue { ptr, ptr } undef, ptr %4, 0 + %6 = insertvalue { ptr, ptr } %5, ptr %1, 1 + %7 = extractvalue { ptr, ptr } %6, 1 + %8 = extractvalue { ptr, ptr } %6, 0 + %9 = tail call double %8(ptr %7) + ret double %9 +} + declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfaceType"(%"github.com/goplus/llgo/runtime/internal/runtime.iface") declare i1 @"github.com/goplus/llgo/runtime/internal/runtime.Implements"(ptr, ptr) + +define weak_odr i64 @"__llgo_invoke.github.com/goplus/llgo/cl/_testgo/tpinst.iface$2sV9fFeqOv1SzesvwIdhTqCFzDT8ZX5buKUSAoHNSww$m0.value"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) { +_llgo_0: + %1 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) + %2 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %0, 0 + %3 = getelementptr ptr, ptr %2, i64 3 + %4 = load ptr, ptr %3, align 8 + %5 = insertvalue { ptr, ptr } undef, ptr %4, 0 + %6 = insertvalue { ptr, ptr } %5, ptr %1, 1 + %7 = extractvalue { ptr, ptr } %6, 1 + %8 = extractvalue { ptr, ptr } %6, 0 + %9 = tail call i64 %8(ptr %7) + ret i64 %9 +} diff --git a/cl/_testrt/mapclosure/out.ll b/cl/_testrt/mapclosure/out.ll index 1882b4431c..60f4f50466 100644 --- a/cl/_testrt/mapclosure/out.ll +++ b/cl/_testrt/mapclosure/out.ll @@ -95,16 +95,8 @@ source_filename = "github.com/goplus/llgo/cl/_testrt/mapclosure" define %"github.com/goplus/llgo/runtime/internal/runtime.String" @"github.com/goplus/llgo/cl/_testrt/mapclosure.demo"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) { _llgo_0: - %1 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) - %2 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %0, 0 - %3 = getelementptr ptr, ptr %2, i64 3 - %4 = load ptr, ptr %3, align 8 - %5 = insertvalue { ptr, ptr } undef, ptr %4, 0 - %6 = insertvalue { ptr, ptr } %5, ptr %1, 1 - %7 = extractvalue { ptr, ptr } %6, 1 - %8 = extractvalue { ptr, ptr } %6, 0 - %9 = call %"github.com/goplus/llgo/runtime/internal/runtime.String" %8(ptr %7) - ret %"github.com/goplus/llgo/runtime/internal/runtime.String" %9 + %1 = call %"github.com/goplus/llgo/runtime/internal/runtime.String" @"__llgo_invoke._llgo_iface$O6rEVxIuA5O1E0KWpQBCgGx26X5gYhJ_nnJnHVL8_7U$m0.String"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) + ret %"github.com/goplus/llgo/runtime/internal/runtime.String" %1 } define void @"github.com/goplus/llgo/cl/_testrt/mapclosure.init"() { @@ -184,6 +176,20 @@ _llgo_0: ret %"github.com/goplus/llgo/runtime/internal/runtime.String" %2 } +define weak_odr %"github.com/goplus/llgo/runtime/internal/runtime.String" @"__llgo_invoke._llgo_iface$O6rEVxIuA5O1E0KWpQBCgGx26X5gYhJ_nnJnHVL8_7U$m0.String"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) { +_llgo_0: + %1 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) + %2 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %0, 0 + %3 = getelementptr ptr, ptr %2, i64 3 + %4 = load ptr, ptr %3, align 8 + %5 = insertvalue { ptr, ptr } undef, ptr %4, 0 + %6 = insertvalue { ptr, ptr } %5, ptr %1, 1 + %7 = extractvalue { ptr, ptr } %6, 1 + %8 = extractvalue { ptr, ptr } %6, 0 + %9 = tail call %"github.com/goplus/llgo/runtime/internal/runtime.String" %8(ptr %7) + ret %"github.com/goplus/llgo/runtime/internal/runtime.String" %9 +} + declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface") declare i1 @"github.com/goplus/llgo/runtime/internal/runtime.memequalptr"(ptr, ptr) diff --git a/cl/_testrt/tpabi/out.ll b/cl/_testrt/tpabi/out.ll index ddcefbf15f..a866e14ea4 100644 --- a/cl/_testrt/tpabi/out.ll +++ b/cl/_testrt/tpabi/out.ll @@ -86,37 +86,29 @@ _llgo_1: ; preds = %_llgo_0 %14 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr @"_llgo_iface$BP0p_lUsEd-IbbtJVukGmgrdQkqzcoYzSiwgUvgFvUs", ptr @"*_llgo_github.com/goplus/llgo/cl/_testrt/tpabi.T[string,int]") %15 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %14, 0 %16 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %15, ptr %11, 1 - %17 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %16) - %18 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %16, 0 - %19 = getelementptr ptr, ptr %18, i64 3 - %20 = load ptr, ptr %19, align 8 - %21 = insertvalue { ptr, ptr } undef, ptr %20, 0 - %22 = insertvalue { ptr, ptr } %21, ptr %17, 1 - %23 = extractvalue { ptr, ptr } %22, 1 - %24 = extractvalue { ptr, ptr } %22, 0 - call void %24(ptr %23) - %25 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocZ"(i64 32) - %26 = getelementptr inbounds i64, ptr %25, i64 0 - %27 = getelementptr inbounds i64, ptr %25, i64 1 - %28 = getelementptr inbounds i64, ptr %25, i64 2 - %29 = getelementptr inbounds i64, ptr %25, i64 3 - store i64 1, ptr %26, align 4 - store i64 2, ptr %27, align 4 - store i64 3, ptr %28, align 4 - store i64 4, ptr %29, align 4 - %30 = getelementptr [4 x i64], ptr %25, i64 1 - call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintPointer"(ptr %30) + call void @"__llgo_invoke._llgo_iface$BP0p_lUsEd-IbbtJVukGmgrdQkqzcoYzSiwgUvgFvUs$m0.Demo"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %16) + %17 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocZ"(i64 32) + %18 = getelementptr inbounds i64, ptr %17, i64 0 + %19 = getelementptr inbounds i64, ptr %17, i64 1 + %20 = getelementptr inbounds i64, ptr %17, i64 2 + %21 = getelementptr inbounds i64, ptr %17, i64 3 + store i64 1, ptr %18, align 4 + store i64 2, ptr %19, align 4 + store i64 3, ptr %20, align 4 + store i64 4, ptr %21, align 4 + %22 = getelementptr [4 x i64], ptr %17, i64 1 + call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintPointer"(ptr %22) call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8 10) - %31 = getelementptr [4 x i64], ptr %25, i64 1 - call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintPointer"(ptr %31) + %23 = getelementptr [4 x i64], ptr %17, i64 1 + call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintPointer"(ptr %23) call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8 10) ret void _llgo_2: ; preds = %_llgo_0 - %32 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) - store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @10, i64 83 }, ptr %32, align 8 - %33 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %32, 1 - call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %33) + %24 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 16) + store %"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @10, i64 83 }, ptr %24, align 8 + %25 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" { ptr @_llgo_string, ptr undef }, ptr %24, 1 + call void @"github.com/goplus/llgo/runtime/internal/runtime.Panic"(%"github.com/goplus/llgo/runtime/internal/runtime.eface" %25) unreachable } @@ -207,6 +199,20 @@ _llgo_0: declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr, ptr) +define weak_odr void @"__llgo_invoke._llgo_iface$BP0p_lUsEd-IbbtJVukGmgrdQkqzcoYzSiwgUvgFvUs$m0.Demo"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) { +_llgo_0: + %1 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) + %2 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %0, 0 + %3 = getelementptr ptr, ptr %2, i64 3 + %4 = load ptr, ptr %3, align 8 + %5 = insertvalue { ptr, ptr } undef, ptr %4, 0 + %6 = insertvalue { ptr, ptr } %5, ptr %1, 1 + %7 = extractvalue { ptr, ptr } %6, 1 + %8 = extractvalue { ptr, ptr } %6, 0 + tail call void %8(ptr %7) + ret void +} + declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface") declare void @"github.com/goplus/llgo/runtime/internal/runtime.PrintPointer"(ptr) diff --git a/cl/_testrt/tpmethod/out.ll b/cl/_testrt/tpmethod/out.ll index dafa1b61c9..7e4eb9fb54 100644 --- a/cl/_testrt/tpmethod/out.ll +++ b/cl/_testrt/tpmethod/out.ll @@ -108,15 +108,7 @@ _llgo_2: ; preds = %_llgo_1, %_llgo_0 define void @"github.com/goplus/llgo/cl/_testrt/tpmethod.main"() { _llgo_0: %0 = call %"github.com/goplus/llgo/runtime/internal/runtime.iface" @"github.com/goplus/llgo/cl/_testrt/tpmethod.ReadFile"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @0, i64 7 }) - %1 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) - %2 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %0, 0 - %3 = getelementptr ptr, ptr %2, i64 3 - %4 = load ptr, ptr %3, align 8 - %5 = insertvalue { ptr, ptr } undef, ptr %4, 0 - %6 = insertvalue { ptr, ptr } %5, ptr %1, 1 - %7 = extractvalue { ptr, ptr } %6, 1 - %8 = extractvalue { ptr, ptr } %6, 0 - call void %8(ptr %7, { ptr, ptr } { ptr @"__llgo_stub.github.com/goplus/llgo/cl/_testrt/tpmethod.main$1", ptr null }) + call void @"__llgo_invoke._llgo_iface$XcsCI4xRViVu44YvSfJySCCik7Xq487CpVScS6LGI70$m0.Then"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0, { ptr, ptr } { ptr @"__llgo_stub.github.com/goplus/llgo/cl/_testrt/tpmethod.main$1", ptr null }) ret void } @@ -148,6 +140,20 @@ _llgo_0: ; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write) declare void @llvm.memset(ptr nocapture writeonly, i8, i64, i1 immarg) #0 +define weak_odr void @"__llgo_invoke._llgo_iface$XcsCI4xRViVu44YvSfJySCCik7Xq487CpVScS6LGI70$m0.Then"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0, { ptr, ptr } %1) { +_llgo_0: + %2 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) + %3 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %0, 0 + %4 = getelementptr ptr, ptr %3, i64 3 + %5 = load ptr, ptr %4, align 8 + %6 = insertvalue { ptr, ptr } undef, ptr %5, 0 + %7 = insertvalue { ptr, ptr } %6, ptr %2, 1 + %8 = extractvalue { ptr, ptr } %7, 1 + %9 = extractvalue { ptr, ptr } %7, 0 + tail call void %9(ptr %8, { ptr, ptr } %1) + ret void +} + declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface") define linkonce void @"__llgo_stub.github.com/goplus/llgo/cl/_testrt/tpmethod.main$1"(ptr %0, %"github.com/goplus/llgo/cl/_testrt/tpmethod.Tuple[error]" %1) { diff --git a/cl/_testrt/vamethod/out.ll b/cl/_testrt/vamethod/out.ll index 4995830cc2..72c5d5d76b 100644 --- a/cl/_testrt/vamethod/out.ll +++ b/cl/_testrt/vamethod/out.ll @@ -132,43 +132,35 @@ _llgo_1: ; preds = %_llgo_5 unreachable _llgo_2: ; preds = %_llgo_5 - %13 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %37) - %14 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %37, 0 - %15 = getelementptr ptr, ptr %14, i64 4 + call void @"__llgo_invoke._llgo_iface$a85zs5wWQQoPIERm_en8plssh4spdIeeXZPC-E0TDh0$m1.SetFormat"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %29, ptr @18) + %13 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %29) + %14 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %29, 0 + %15 = getelementptr ptr, ptr %14, i64 3 %16 = load ptr, ptr %15, align 8 %17 = insertvalue { ptr, ptr } undef, ptr %16, 0 %18 = insertvalue { ptr, ptr } %17, ptr %13, 1 %19 = extractvalue { ptr, ptr } %18, 1 %20 = extractvalue { ptr, ptr } %18, 0 - call void %20(ptr %19, ptr @18) - %21 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %37) - %22 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %37, 0 - %23 = getelementptr ptr, ptr %22, i64 3 - %24 = load ptr, ptr %23, align 8 - %25 = insertvalue { ptr, ptr } undef, ptr %24, 0 - %26 = insertvalue { ptr, ptr } %25, ptr %21, 1 - %27 = extractvalue { ptr, ptr } %26, 1 - %28 = extractvalue { ptr, ptr } %26, 0 - %29 = call i32 (ptr, ...) %28(ptr %27, ptr @19, i64 100, i64 200) + %21 = call i32 (ptr, ...) %20(ptr %19, ptr @19, i64 100, i64 200) ret void _llgo_3: ; preds = %_llgo_0 - %30 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %8, 1 - %31 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr @"_llgo_iface$a85zs5wWQQoPIERm_en8plssh4spdIeeXZPC-E0TDh0", ptr %9) - %32 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %31, 0 - %33 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %32, ptr %30, 1 - %34 = insertvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } undef, %"github.com/goplus/llgo/runtime/internal/runtime.iface" %33, 0 - %35 = insertvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } %34, i1 true, 1 + %22 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.eface" %8, 1 + %23 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr @"_llgo_iface$a85zs5wWQQoPIERm_en8plssh4spdIeeXZPC-E0TDh0", ptr %9) + %24 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" undef, ptr %23, 0 + %25 = insertvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %24, ptr %22, 1 + %26 = insertvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } undef, %"github.com/goplus/llgo/runtime/internal/runtime.iface" %25, 0 + %27 = insertvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } %26, i1 true, 1 br label %_llgo_5 _llgo_4: ; preds = %_llgo_0 br label %_llgo_5 _llgo_5: ; preds = %_llgo_4, %_llgo_3 - %36 = phi { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } [ %35, %_llgo_3 ], [ zeroinitializer, %_llgo_4 ] - %37 = extractvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } %36, 0 - %38 = extractvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } %36, 1 - br i1 %38, label %_llgo_2, label %_llgo_1 + %28 = phi { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } [ %27, %_llgo_3 ], [ zeroinitializer, %_llgo_4 ] + %29 = extractvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } %28, 0 + %30 = extractvalue { %"github.com/goplus/llgo/runtime/internal/runtime.iface", i1 } %28, 1 + br i1 %30, label %_llgo_2, label %_llgo_1 } ; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write) @@ -224,6 +216,20 @@ declare i1 @"github.com/goplus/llgo/runtime/internal/runtime.Implements"(ptr, pt declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.NewItab"(ptr, ptr) +define weak_odr void @"__llgo_invoke._llgo_iface$a85zs5wWQQoPIERm_en8plssh4spdIeeXZPC-E0TDh0$m1.SetFormat"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0, ptr %1) { +_llgo_0: + %2 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface" %0) + %3 = extractvalue %"github.com/goplus/llgo/runtime/internal/runtime.iface" %0, 0 + %4 = getelementptr ptr, ptr %3, i64 4 + %5 = load ptr, ptr %4, align 8 + %6 = insertvalue { ptr, ptr } undef, ptr %5, 0 + %7 = insertvalue { ptr, ptr } %6, ptr %2, 1 + %8 = extractvalue { ptr, ptr } %7, 1 + %9 = extractvalue { ptr, ptr } %7, 0 + tail call void %9(ptr %8, ptr %1) + ret void +} + declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.IfacePtrData"(%"github.com/goplus/llgo/runtime/internal/runtime.iface") declare i1 @"github.com/goplus/llgo/runtime/internal/runtime.strequal"(ptr, ptr) diff --git a/cl/instr.go b/cl/instr.go index c772c67de7..5b86166aa7 100644 --- a/cl/instr.go +++ b/cl/instr.go @@ -679,12 +679,20 @@ func (p *context) call(b llssa.Builder, act llssa.DoAction, call *ssa.CallCommon cv := call.Value if mthd := call.Method; mthd != nil { o := p.compileValue(b, cv) - fn := b.Imethod(o, mthd) hasVArg := fnNormal if llssa.HasNameValist(call.Signature()) { hasVArg = fnHasVArg } args := p.compileValues(b, call.Args, hasVArg) + if hasVArg == fnHasVArg { + // Keep variadic invoke on the legacy closure path for now. + // The thunk split is currently for non-variadic invoke calls. + fn := b.Imethod(o, mthd) + ret = b.Do(act, fn, args...) + return + } + fn := b.InvokeThunk(o, mthd) + args = append([]llssa.Expr{o}, args...) ret = b.Do(act, fn, args...) return } diff --git a/ssa/interface.go b/ssa/interface.go index 934e13c7c8..b94b7b265f 100644 --- a/ssa/interface.go +++ b/ssa/interface.go @@ -18,8 +18,10 @@ package ssa import ( "go/constant" + "go/token" "go/types" "log" + "strconv" "github.com/goplus/llgo/ssa/abi" "github.com/goplus/llvm" @@ -63,10 +65,9 @@ func iMethodOf(rawIntf *types.Interface, name string) int { return -1 } -// Imethod returns closure of an interface method. -func (b Builder) Imethod(intf Expr, method *types.Func) Expr { - prog := b.Prog - rawIntf := intf.raw.Type.Underlying().(*types.Interface) +const invokeThunkPrefix = "__llgo_invoke." + +func invokeMethodSig(rawIntf *types.Interface, method *types.Func) *types.Signature { sig := method.Type().(*types.Signature) if sig.Recv() == nil && sig.Params().Len() > 0 { pt := types.Unalias(sig.Params().At(0).Type()) @@ -79,6 +80,59 @@ func (b Builder) Imethod(intf Expr, method *types.Func) Expr { sig = types.NewSignatureType(nil, nil, nil, types.NewTuple(vars...), sig.Results(), sig.Variadic()) } } + return sig +} + +func (p Package) invokeThunkName(rawIntf *types.Interface, methodName string, methodIdx int) string { + ifaceName, _ := p.abi.InterfaceName(rawIntf) + return invokeThunkPrefix + ifaceName + "$m" + strconv.Itoa(methodIdx) + "." + methodName +} + +func (p Package) invokeThunk(rawIntf *types.Interface, method *types.Func, sig *types.Signature) Function { + methodName := method.Name() + methodIdx := iMethodOf(rawIntf, methodName) + if methodIdx < 0 { + panic("invokeThunk: interface method not found: " + methodName) + } + name := p.invokeThunkName(rawIntf, methodName, methodIdx) + if thunk := p.FuncOf(name); thunk != nil { + return thunk + } + + n := sig.Params().Len() + vars := make([]*types.Var, 1, n+1) + vars[0] = types.NewParam(token.NoPos, nil, "", rawIntf) + for i := 0; i < n; i++ { + vars = append(vars, sig.Params().At(i)) + } + thunkSig := types.NewSignatureType(nil, nil, nil, types.NewTuple(vars...), sig.Results(), sig.Variadic()) + thunk := p.NewFunc(name, thunkSig, InGo) + thunk.impl.SetLinkage(llvm.WeakODRLinkage) + + b := thunk.MakeBody(1) + fn := b.Imethod(thunk.Param(0), method) + args := make([]Expr, n) + for i := 0; i < n; i++ { + args[i] = thunk.Param(i + 1) + } + ret := b.Call(fn, args...) + closureWrapReturn(b, sig, ret) + return thunk +} + +// InvokeThunk returns an invoke thunk function for an interface method call. +// The returned thunk has signature: func(interface, ...methodArgs) ...results. +func (b Builder) InvokeThunk(intf Expr, method *types.Func) Expr { + rawIntf := intf.raw.Type.Underlying().(*types.Interface) + sig := invokeMethodSig(rawIntf, method) + return b.Pkg.invokeThunk(rawIntf, method, sig).Expr +} + +// Imethod returns closure of an interface method. +func (b Builder) Imethod(intf Expr, method *types.Func) Expr { + prog := b.Prog + rawIntf := intf.raw.Type.Underlying().(*types.Interface) + sig := invokeMethodSig(rawIntf, method) tclosure := prog.Type(sig, InGo) i := iMethodOf(rawIntf, method.Name()) data := b.InlineCall(b.Pkg.rtFunc("IfacePtrData"), intf)