diff --git a/cl/_testgo/errors/out.ll b/cl/_testgo/errors/out.ll index 778341e3..85e7f553 100644 --- a/cl/_testgo/errors/out.ll +++ b/cl/_testgo/errors/out.ll @@ -178,6 +178,7 @@ _llgo_3: ; preds = %_llgo_2 store i64 1, ptr %45, align 4 %46 = load %"github.com/goplus/llgo/internal/runtime.Slice", ptr %42, align 8 %47 = call ptr @"github.com/goplus/llgo/internal/runtime.Func"(%"github.com/goplus/llgo/internal/runtime.Slice" %39, %"github.com/goplus/llgo/internal/runtime.Slice" %46, i1 false) + call void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr %47) store ptr %47, ptr @"_llgo_func$zNDVRsWTIpUPKouNUS805RGX--IV9qVK8B31IZbg5to", align 8 br label %_llgo_4 @@ -218,6 +219,7 @@ _llgo_4: ; preds = %_llgo_3, %_llgo_2 %69 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %66, align 8 call void @"github.com/goplus/llgo/internal/runtime.InitNamed"(ptr %0, %"github.com/goplus/llgo/internal/runtime.String" %65, %"github.com/goplus/llgo/internal/runtime.String" %69, ptr %23, { ptr, i64, i64 } zeroinitializer, %"github.com/goplus/llgo/internal/runtime.Slice" %61) %70 = call ptr @"github.com/goplus/llgo/internal/runtime.PointerTo"(ptr %0) + call void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr %70) store ptr %70, ptr @"*_llgo_main.errorString", align 8 %71 = load ptr, ptr @"_llgo_func$zNDVRsWTIpUPKouNUS805RGX--IV9qVK8B31IZbg5to", align 8 %72 = load ptr, ptr @"_llgo_iface$Fh8eUJ-Gw4e6TYuajcFIOSCuqSPKAt5nS4ow7xeGXEU", align 8 @@ -282,6 +284,8 @@ declare void @"github.com/goplus/llgo/internal/runtime.InitNamed"(ptr, %"github. declare ptr @"github.com/goplus/llgo/internal/runtime.Func"(%"github.com/goplus/llgo/internal/runtime.Slice", %"github.com/goplus/llgo/internal/runtime.Slice", i1) +declare void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr) + declare ptr @"github.com/goplus/llgo/internal/runtime.PointerTo"(ptr) declare ptr @"github.com/goplus/llgo/internal/runtime.Interface"(%"github.com/goplus/llgo/internal/runtime.String", %"github.com/goplus/llgo/internal/runtime.String", %"github.com/goplus/llgo/internal/runtime.Slice") diff --git a/cl/_testgo/ifaceconv/out.ll b/cl/_testgo/ifaceconv/out.ll index 1d6d6cdd..444d68c2 100644 --- a/cl/_testgo/ifaceconv/out.ll +++ b/cl/_testgo/ifaceconv/out.ll @@ -820,6 +820,7 @@ _llgo_5: ; preds = %_llgo_4 store i64 0, ptr %32, align 4 %33 = load %"github.com/goplus/llgo/internal/runtime.Slice", ptr %29, align 8 %34 = call ptr @"github.com/goplus/llgo/internal/runtime.Func"(%"github.com/goplus/llgo/internal/runtime.Slice" %27, %"github.com/goplus/llgo/internal/runtime.Slice" %33, i1 false) + call void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr %34) store ptr %34, ptr @"_llgo_func$2_iS07vIlF2_rZqWB5eU0IvP_9HviM4MYZNkXZDvbac", align 8 br label %_llgo_6 @@ -1271,6 +1272,8 @@ declare ptr @"github.com/goplus/llgo/internal/runtime.IfaceType"(%"github.com/go declare ptr @"github.com/goplus/llgo/internal/runtime.Func"(%"github.com/goplus/llgo/internal/runtime.Slice", %"github.com/goplus/llgo/internal/runtime.Slice", i1) +declare void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr) + declare ptr @"github.com/goplus/llgo/internal/runtime.NewItab"(ptr, ptr) declare ptr @"github.com/goplus/llgo/internal/runtime.NewNamed"(i64, i64, i64) diff --git a/cl/_testgo/ifaceprom/out.ll b/cl/_testgo/ifaceprom/out.ll index b284f78f..b201dbe5 100644 --- a/cl/_testgo/ifaceprom/out.ll +++ b/cl/_testgo/ifaceprom/out.ll @@ -696,6 +696,7 @@ _llgo_5: ; preds = %_llgo_4 store i64 1, ptr %43, align 4 %44 = load %"github.com/goplus/llgo/internal/runtime.Slice", ptr %40, align 8 %45 = call ptr @"github.com/goplus/llgo/internal/runtime.Func"(%"github.com/goplus/llgo/internal/runtime.Slice" %37, %"github.com/goplus/llgo/internal/runtime.Slice" %44, i1 false) + call void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr %45) store ptr %45, ptr @"_llgo_func$ETeB8WwW04JEq0ztcm-XPTJtuYvtpkjIsAc0-2NT9zA", align 8 br label %_llgo_6 @@ -770,6 +771,7 @@ _llgo_9: ; preds = %_llgo_8 store i64 1, ptr %84, align 4 %85 = load %"github.com/goplus/llgo/internal/runtime.Slice", ptr %81, align 8 %86 = call ptr @"github.com/goplus/llgo/internal/runtime.Func"(%"github.com/goplus/llgo/internal/runtime.Slice" %78, %"github.com/goplus/llgo/internal/runtime.Slice" %85, i1 false) + call void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr %86) store ptr %86, ptr @"_llgo_func$zNDVRsWTIpUPKouNUS805RGX--IV9qVK8B31IZbg5to", align 8 br label %_llgo_10 @@ -965,6 +967,8 @@ declare ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64) declare ptr @"github.com/goplus/llgo/internal/runtime.Func"(%"github.com/goplus/llgo/internal/runtime.Slice", %"github.com/goplus/llgo/internal/runtime.Slice", i1) +declare void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr) + declare ptr @"github.com/goplus/llgo/internal/runtime.Interface"(%"github.com/goplus/llgo/internal/runtime.String", %"github.com/goplus/llgo/internal/runtime.String", %"github.com/goplus/llgo/internal/runtime.Slice") declare ptr @"github.com/goplus/llgo/internal/runtime.NewItab"(ptr, ptr) diff --git a/cl/_testgo/interface/out.ll b/cl/_testgo/interface/out.ll index d01c3737..3df56320 100644 --- a/cl/_testgo/interface/out.ll +++ b/cl/_testgo/interface/out.ll @@ -343,6 +343,7 @@ _llgo_7: ; preds = %_llgo_5 store i64 0, ptr %47, align 4 %48 = load %"github.com/goplus/llgo/internal/runtime.Slice", ptr %44, align 8 %49 = call ptr @"github.com/goplus/llgo/internal/runtime.Func"(%"github.com/goplus/llgo/internal/runtime.Slice" %42, %"github.com/goplus/llgo/internal/runtime.Slice" %48, i1 false) + call void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr %49) store ptr %49, ptr @"_llgo_func$2_iS07vIlF2_rZqWB5eU0IvP_9HviM4MYZNkXZDvbac", align 8 br label %_llgo_8 @@ -432,6 +433,7 @@ _llgo_8: ; preds = %_llgo_7, %_llgo_5 _llgo_9: ; preds = %_llgo_6 %101 = call ptr @"github.com/goplus/llgo/internal/runtime.PointerTo"(ptr %2) + call void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr %101) store ptr %101, ptr @"*_llgo_main.Game1", align 8 br label %_llgo_10 @@ -531,6 +533,7 @@ _llgo_16: ; preds = %_llgo_15, %_llgo_14 _llgo_17: ; preds = %_llgo_16 %151 = call ptr @"github.com/goplus/llgo/internal/runtime.PointerTo"(ptr %104) + call void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr %151) store ptr %151, ptr @"*_llgo_main.Game2", align 8 br label %_llgo_18 diff --git a/cl/_testgo/invoke/in.go b/cl/_testgo/invoke/in.go index d4f9e93a..fd91b960 100644 --- a/cl/_testgo/invoke/in.go +++ b/cl/_testgo/invoke/in.go @@ -32,6 +32,29 @@ func (t *T3) Invoke() int { return 3 } +type T4 [1]int + +func (t T4) Invoke() int { + println("invoke4", t[0]) + return 4 +} + +type T5 struct { + n int +} + +func (t T5) Invoke() int { + println("invoke5", t.n) + return 5 +} + +// type T6 func() int + +// func (t T6) Invoke() int { +// println("invoke6", t()) +// return 6 +// } + type I interface { Invoke() int } @@ -41,6 +64,9 @@ func main() { var t1 = T1(100) var t2 = T2(100.1) var t3 = T3(127) + var t4 = T4{200} + var t5 = T5{300} + //var t6 = T6(func() int { return 400 }) invoke(t) invoke(&t) invoke(t1) @@ -48,6 +74,11 @@ func main() { invoke(t2) invoke(&t2) invoke(&t3) + invoke(t4) + invoke(&t4) + invoke(t5) + invoke(&t5) + //invoke(t6) var m M var i I = m println(i, m) diff --git a/cl/_testgo/invoke/out.ll b/cl/_testgo/invoke/out.ll index f88d5f27..19dcd996 100644 --- a/cl/_testgo/invoke/out.ll +++ b/cl/_testgo/invoke/out.ll @@ -3,6 +3,7 @@ source_filename = "main" %main.T = type { %"github.com/goplus/llgo/internal/runtime.String" } %"github.com/goplus/llgo/internal/runtime.String" = type { ptr, i64 } +%main.T5 = type { i64 } %"github.com/goplus/llgo/internal/runtime.iface" = type { ptr, ptr } %"github.com/goplus/llgo/internal/runtime.eface" = type { ptr, ptr } %"github.com/goplus/llgo/internal/abi.StructField" = type { %"github.com/goplus/llgo/internal/runtime.String", ptr, i64, %"github.com/goplus/llgo/internal/runtime.String", i1 } @@ -16,37 +17,48 @@ source_filename = "main" @1 = private unnamed_addr constant [7 x i8] c"invoke1", align 1 @2 = private unnamed_addr constant [7 x i8] c"invoke2", align 1 @3 = private unnamed_addr constant [7 x i8] c"invoke3", align 1 +@4 = private unnamed_addr constant [7 x i8] c"invoke4", align 1 +@5 = private unnamed_addr constant [7 x i8] c"invoke5", align 1 @__llgo_argc = global i32 0, align 4 @__llgo_argv = global ptr null, align 8 -@4 = private unnamed_addr constant [5 x i8] c"hello", align 1 +@6 = private unnamed_addr constant [5 x i8] c"hello", align 1 @_llgo_main.T = linkonce global ptr null, align 8 @"main.struct$QTufDJA9wEDzuzgkA-ZSrLqW-B6lWN8O25mTSglAoLQ" = global ptr null, align 8 -@5 = private unnamed_addr constant [1 x i8] c"s", align 1 -@6 = private unnamed_addr constant [4 x i8] c"main", align 1 -@7 = private unnamed_addr constant [6 x i8] c"Invoke", align 1 +@7 = private unnamed_addr constant [1 x i8] c"s", align 1 +@8 = private unnamed_addr constant [4 x i8] c"main", align 1 +@9 = private unnamed_addr constant [6 x i8] c"Invoke", align 1 @"_llgo_func$ETeB8WwW04JEq0ztcm-XPTJtuYvtpkjIsAc0-2NT9zA" = linkonce global ptr null, align 8 @_llgo_int = linkonce global ptr null, align 8 -@8 = private unnamed_addr constant [6 x i8] c"Method", align 1 +@10 = private unnamed_addr constant [6 x i8] c"Method", align 1 @"_llgo_func$2_iS07vIlF2_rZqWB5eU0IvP_9HviM4MYZNkXZDvbac" = linkonce global ptr null, align 8 -@9 = private unnamed_addr constant [1 x i8] c"T", align 1 +@11 = private unnamed_addr constant [1 x i8] c"T", align 1 @"_llgo_iface$uRUteI7wmSy7y7ODhGzk0FdDaxGKMhVSSu6HZEv9aa0" = linkonce global ptr null, align 8 @"*_llgo_main.T" = linkonce global ptr null, align 8 @_llgo_main.T1 = linkonce global ptr null, align 8 -@10 = private unnamed_addr constant [2 x i8] c"T1", align 1 +@12 = private unnamed_addr constant [2 x i8] c"T1", align 1 @"*_llgo_main.T1" = linkonce global ptr null, align 8 @_llgo_main.T2 = linkonce global ptr null, align 8 @_llgo_float64 = linkonce global ptr null, align 8 -@11 = private unnamed_addr constant [2 x i8] c"T2", align 1 +@13 = private unnamed_addr constant [2 x i8] c"T2", align 1 @"*_llgo_main.T2" = linkonce global ptr null, align 8 @_llgo_main.T3 = linkonce global ptr null, align 8 @_llgo_int8 = linkonce global ptr null, align 8 -@12 = private unnamed_addr constant [2 x i8] c"T3", align 1 +@14 = private unnamed_addr constant [2 x i8] c"T3", align 1 @"*_llgo_main.T3" = linkonce global ptr null, align 8 +@_llgo_main.T4 = linkonce global ptr null, align 8 +@"[1]_llgo_int" = linkonce global ptr null, align 8 +@15 = private unnamed_addr constant [2 x i8] c"T4", align 1 +@"*_llgo_main.T4" = linkonce global ptr null, align 8 +@_llgo_main.T5 = linkonce global ptr null, align 8 +@"main.struct$eovYmOhZg4X0zMSsuscSshndnbbAGvB2E3cyG8E7Y4U" = global ptr null, align 8 +@16 = private unnamed_addr constant [1 x i8] c"n", align 1 +@17 = private unnamed_addr constant [2 x i8] c"T5", align 1 +@"*_llgo_main.T5" = linkonce global ptr null, align 8 @"_llgo_iface$jwmSdgh1zvY_TDIgLzCkvkbiyrdwl9N806DH0JGcyMI" = linkonce global ptr null, align 8 -@13 = private unnamed_addr constant [5 x i8] c"world", align 1 +@18 = private unnamed_addr constant [5 x i8] c"world", align 1 @_llgo_main.I = linkonce global ptr null, align 8 -@14 = private unnamed_addr constant [6 x i8] c"main.I", align 1 -@15 = private unnamed_addr constant [21 x i8] c"type assertion failed", align 1 +@19 = private unnamed_addr constant [6 x i8] c"main.I", align 1 +@20 = private unnamed_addr constant [21 x i8] c"type assertion failed", align 1 @_llgo_string = linkonce global ptr null, align 8 @_llgo_any = linkonce global ptr null, align 8 @@ -143,6 +155,60 @@ _llgo_0: ret i64 3 } +define i64 @main.T4.Invoke([1 x i64] %0) { +_llgo_0: + %1 = alloca [1 x i64], align 8 + %2 = call ptr @"github.com/goplus/llgo/internal/runtime.Zeroinit"(ptr %1, i64 8) + store [1 x i64] %0, ptr %2, align 4 + %3 = getelementptr inbounds i64, ptr %2, i64 0 + %4 = load i64, ptr %3, align 4 + %5 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %6 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %5, i32 0, i32 0 + store ptr @4, ptr %6, align 8 + %7 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %5, i32 0, i32 1 + store i64 7, ptr %7, align 4 + %8 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %5, align 8 + call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %8) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) + call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %4) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 10) + ret i64 4 +} + +define i64 @"main.(*T4).Invoke"(ptr %0) { +_llgo_0: + %1 = load [1 x i64], ptr %0, align 4 + %2 = call i64 @main.T4.Invoke([1 x i64] %1) + ret i64 %2 +} + +define i64 @main.T5.Invoke(%main.T5 %0) { +_llgo_0: + %1 = alloca %main.T5, align 8 + %2 = call ptr @"github.com/goplus/llgo/internal/runtime.Zeroinit"(ptr %1, i64 8) + store %main.T5 %0, ptr %2, align 4 + %3 = getelementptr inbounds %main.T5, ptr %2, i32 0, i32 0 + %4 = load i64, ptr %3, align 4 + %5 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %6 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %5, i32 0, i32 0 + store ptr @5, ptr %6, align 8 + %7 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %5, i32 0, i32 1 + store i64 7, ptr %7, align 4 + %8 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %5, align 8 + call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %8) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) + call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %4) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 10) + ret i64 5 +} + +define i64 @"main.(*T5).Invoke"(ptr %0) { +_llgo_0: + %1 = load %main.T5, ptr %0, align 4 + %2 = call i64 @main.T5.Invoke(%main.T5 %1) + ret i64 %2 +} + define void @main.init() { _llgo_0: %0 = load i1, ptr @"main.init$guard", align 1 @@ -187,7 +253,7 @@ _llgo_0: %3 = getelementptr inbounds %main.T, ptr %2, i32 0, i32 0 %4 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 %5 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %4, i32 0, i32 0 - store ptr @4, ptr %5, align 8 + store ptr @6, ptr %5, align 8 %6 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %4, i32 0, i32 1 store i64 5, ptr %6, align 4 %7 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %4, align 8 @@ -198,213 +264,198 @@ _llgo_0: store double 1.001000e+02, ptr %9, align 8 %10 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocZ"(i64 1) store i8 127, ptr %10, align 1 - %11 = load %main.T, ptr %2, align 8 - %12 = load ptr, ptr @_llgo_main.T, align 8 - %13 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocU"(i64 16) - store %main.T %11, ptr %13, align 8 - %14 = load ptr, ptr @"_llgo_iface$uRUteI7wmSy7y7ODhGzk0FdDaxGKMhVSSu6HZEv9aa0", align 8 - %15 = call ptr @"github.com/goplus/llgo/internal/runtime.NewItab"(ptr %14, ptr %12) - %16 = alloca %"github.com/goplus/llgo/internal/runtime.iface", align 8 - %17 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %16, i32 0, i32 0 - store ptr %15, ptr %17, align 8 - %18 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %16, i32 0, i32 1 - store ptr %13, ptr %18, align 8 - %19 = load %"github.com/goplus/llgo/internal/runtime.iface", ptr %16, align 8 - call void @main.invoke(%"github.com/goplus/llgo/internal/runtime.iface" %19) - %20 = load ptr, ptr @"*_llgo_main.T", align 8 - %21 = load ptr, ptr @"_llgo_iface$uRUteI7wmSy7y7ODhGzk0FdDaxGKMhVSSu6HZEv9aa0", align 8 - %22 = call ptr @"github.com/goplus/llgo/internal/runtime.NewItab"(ptr %21, ptr %20) - %23 = alloca %"github.com/goplus/llgo/internal/runtime.iface", align 8 - %24 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %23, i32 0, i32 0 - store ptr %22, ptr %24, align 8 - %25 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %23, i32 0, i32 1 - store ptr %2, ptr %25, align 8 - %26 = load %"github.com/goplus/llgo/internal/runtime.iface", ptr %23, align 8 - call void @main.invoke(%"github.com/goplus/llgo/internal/runtime.iface" %26) - %27 = load i64, ptr %8, align 4 - %28 = load ptr, ptr @_llgo_main.T1, align 8 - %29 = inttoptr i64 %27 to ptr - %30 = load ptr, ptr @"_llgo_iface$uRUteI7wmSy7y7ODhGzk0FdDaxGKMhVSSu6HZEv9aa0", align 8 - %31 = call ptr @"github.com/goplus/llgo/internal/runtime.NewItab"(ptr %30, ptr %28) - %32 = alloca %"github.com/goplus/llgo/internal/runtime.iface", align 8 - %33 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %32, i32 0, i32 0 - store ptr %31, ptr %33, align 8 - %34 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %32, i32 0, i32 1 - store ptr %29, ptr %34, align 8 - %35 = load %"github.com/goplus/llgo/internal/runtime.iface", ptr %32, align 8 - call void @main.invoke(%"github.com/goplus/llgo/internal/runtime.iface" %35) - %36 = load ptr, ptr @"*_llgo_main.T1", align 8 - %37 = load ptr, ptr @"_llgo_iface$uRUteI7wmSy7y7ODhGzk0FdDaxGKMhVSSu6HZEv9aa0", align 8 - %38 = call ptr @"github.com/goplus/llgo/internal/runtime.NewItab"(ptr %37, ptr %36) - %39 = alloca %"github.com/goplus/llgo/internal/runtime.iface", align 8 - %40 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %39, i32 0, i32 0 - store ptr %38, ptr %40, align 8 - %41 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %39, i32 0, i32 1 - store ptr %8, ptr %41, align 8 - %42 = load %"github.com/goplus/llgo/internal/runtime.iface", ptr %39, align 8 - call void @main.invoke(%"github.com/goplus/llgo/internal/runtime.iface" %42) - %43 = load double, ptr %9, align 8 - %44 = load ptr, ptr @_llgo_main.T2, align 8 - %45 = bitcast double %43 to i64 - %46 = inttoptr i64 %45 to ptr - %47 = load ptr, ptr @"_llgo_iface$uRUteI7wmSy7y7ODhGzk0FdDaxGKMhVSSu6HZEv9aa0", align 8 - %48 = call ptr @"github.com/goplus/llgo/internal/runtime.NewItab"(ptr %47, ptr %44) - %49 = alloca %"github.com/goplus/llgo/internal/runtime.iface", align 8 - %50 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %49, i32 0, i32 0 - store ptr %48, ptr %50, align 8 - %51 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %49, i32 0, i32 1 - store ptr %46, ptr %51, align 8 - %52 = load %"github.com/goplus/llgo/internal/runtime.iface", ptr %49, align 8 - call void @main.invoke(%"github.com/goplus/llgo/internal/runtime.iface" %52) - %53 = load ptr, ptr @"*_llgo_main.T2", align 8 - %54 = load ptr, ptr @"_llgo_iface$uRUteI7wmSy7y7ODhGzk0FdDaxGKMhVSSu6HZEv9aa0", align 8 - %55 = call ptr @"github.com/goplus/llgo/internal/runtime.NewItab"(ptr %54, ptr %53) - %56 = alloca %"github.com/goplus/llgo/internal/runtime.iface", align 8 - %57 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %56, i32 0, i32 0 - store ptr %55, ptr %57, align 8 - %58 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %56, i32 0, i32 1 - store ptr %9, ptr %58, align 8 - %59 = load %"github.com/goplus/llgo/internal/runtime.iface", ptr %56, align 8 - call void @main.invoke(%"github.com/goplus/llgo/internal/runtime.iface" %59) - %60 = load ptr, ptr @"*_llgo_main.T3", align 8 - %61 = load ptr, ptr @"_llgo_iface$uRUteI7wmSy7y7ODhGzk0FdDaxGKMhVSSu6HZEv9aa0", align 8 - %62 = call ptr @"github.com/goplus/llgo/internal/runtime.NewItab"(ptr %61, ptr %60) - %63 = alloca %"github.com/goplus/llgo/internal/runtime.iface", align 8 - %64 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %63, i32 0, i32 0 - store ptr %62, ptr %64, align 8 - %65 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %63, i32 0, i32 1 - store ptr %10, ptr %65, align 8 - %66 = load %"github.com/goplus/llgo/internal/runtime.iface", ptr %63, align 8 - call void @main.invoke(%"github.com/goplus/llgo/internal/runtime.iface" %66) - %67 = call ptr @"github.com/goplus/llgo/internal/runtime.IfaceType"(%"github.com/goplus/llgo/internal/runtime.iface" zeroinitializer) - %68 = load ptr, ptr @"_llgo_iface$uRUteI7wmSy7y7ODhGzk0FdDaxGKMhVSSu6HZEv9aa0", align 8 - %69 = call ptr @"github.com/goplus/llgo/internal/runtime.NewItab"(ptr %68, ptr %67) - %70 = alloca %"github.com/goplus/llgo/internal/runtime.iface", align 8 - %71 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %70, i32 0, i32 0 - store ptr %69, ptr %71, align 8 - %72 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %70, i32 0, i32 1 - store ptr null, ptr %72, align 8 - %73 = load %"github.com/goplus/llgo/internal/runtime.iface", ptr %70, align 8 - call void @"github.com/goplus/llgo/internal/runtime.PrintIface"(%"github.com/goplus/llgo/internal/runtime.iface" %73) - call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) - call void @"github.com/goplus/llgo/internal/runtime.PrintIface"(%"github.com/goplus/llgo/internal/runtime.iface" zeroinitializer) - call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 10) - %74 = load ptr, ptr @"*_llgo_main.T", align 8 - %75 = load ptr, ptr @"_llgo_iface$jwmSdgh1zvY_TDIgLzCkvkbiyrdwl9N806DH0JGcyMI", align 8 - %76 = call ptr @"github.com/goplus/llgo/internal/runtime.NewItab"(ptr %75, ptr %74) + %11 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocZ"(i64 8) + %12 = getelementptr inbounds i64, ptr %11, i64 0 + store i64 200, ptr %12, align 4 + %13 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocZ"(i64 8) + %14 = getelementptr inbounds %main.T5, ptr %13, i32 0, i32 0 + store i64 300, ptr %14, align 4 + %15 = load %main.T, ptr %2, align 8 + %16 = load ptr, ptr @_llgo_main.T, align 8 + %17 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocU"(i64 16) + store %main.T %15, ptr %17, align 8 + %18 = load ptr, ptr @"_llgo_iface$uRUteI7wmSy7y7ODhGzk0FdDaxGKMhVSSu6HZEv9aa0", align 8 + %19 = call ptr @"github.com/goplus/llgo/internal/runtime.NewItab"(ptr %18, ptr %16) + %20 = alloca %"github.com/goplus/llgo/internal/runtime.iface", align 8 + %21 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %20, i32 0, i32 0 + store ptr %19, ptr %21, align 8 + %22 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %20, i32 0, i32 1 + store ptr %17, ptr %22, align 8 + %23 = load %"github.com/goplus/llgo/internal/runtime.iface", ptr %20, align 8 + call void @main.invoke(%"github.com/goplus/llgo/internal/runtime.iface" %23) + %24 = load ptr, ptr @"*_llgo_main.T", align 8 + %25 = load ptr, ptr @"_llgo_iface$uRUteI7wmSy7y7ODhGzk0FdDaxGKMhVSSu6HZEv9aa0", align 8 + %26 = call ptr @"github.com/goplus/llgo/internal/runtime.NewItab"(ptr %25, ptr %24) + %27 = alloca %"github.com/goplus/llgo/internal/runtime.iface", align 8 + %28 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %27, i32 0, i32 0 + store ptr %26, ptr %28, align 8 + %29 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %27, i32 0, i32 1 + store ptr %2, ptr %29, align 8 + %30 = load %"github.com/goplus/llgo/internal/runtime.iface", ptr %27, align 8 + call void @main.invoke(%"github.com/goplus/llgo/internal/runtime.iface" %30) + %31 = load i64, ptr %8, align 4 + %32 = load ptr, ptr @_llgo_main.T1, align 8 + %33 = inttoptr i64 %31 to ptr + %34 = load ptr, ptr @"_llgo_iface$uRUteI7wmSy7y7ODhGzk0FdDaxGKMhVSSu6HZEv9aa0", align 8 + %35 = call ptr @"github.com/goplus/llgo/internal/runtime.NewItab"(ptr %34, ptr %32) + %36 = alloca %"github.com/goplus/llgo/internal/runtime.iface", align 8 + %37 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %36, i32 0, i32 0 + store ptr %35, ptr %37, align 8 + %38 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %36, i32 0, i32 1 + store ptr %33, ptr %38, align 8 + %39 = load %"github.com/goplus/llgo/internal/runtime.iface", ptr %36, align 8 + call void @main.invoke(%"github.com/goplus/llgo/internal/runtime.iface" %39) + %40 = load ptr, ptr @"*_llgo_main.T1", align 8 + %41 = load ptr, ptr @"_llgo_iface$uRUteI7wmSy7y7ODhGzk0FdDaxGKMhVSSu6HZEv9aa0", align 8 + %42 = call ptr @"github.com/goplus/llgo/internal/runtime.NewItab"(ptr %41, ptr %40) + %43 = alloca %"github.com/goplus/llgo/internal/runtime.iface", align 8 + %44 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %43, i32 0, i32 0 + store ptr %42, ptr %44, align 8 + %45 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %43, i32 0, i32 1 + store ptr %8, ptr %45, align 8 + %46 = load %"github.com/goplus/llgo/internal/runtime.iface", ptr %43, align 8 + call void @main.invoke(%"github.com/goplus/llgo/internal/runtime.iface" %46) + %47 = load double, ptr %9, align 8 + %48 = load ptr, ptr @_llgo_main.T2, align 8 + %49 = bitcast double %47 to i64 + %50 = inttoptr i64 %49 to ptr + %51 = load ptr, ptr @"_llgo_iface$uRUteI7wmSy7y7ODhGzk0FdDaxGKMhVSSu6HZEv9aa0", align 8 + %52 = call ptr @"github.com/goplus/llgo/internal/runtime.NewItab"(ptr %51, ptr %48) + %53 = alloca %"github.com/goplus/llgo/internal/runtime.iface", align 8 + %54 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %53, i32 0, i32 0 + store ptr %52, ptr %54, align 8 + %55 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %53, i32 0, i32 1 + store ptr %50, ptr %55, align 8 + %56 = load %"github.com/goplus/llgo/internal/runtime.iface", ptr %53, align 8 + call void @main.invoke(%"github.com/goplus/llgo/internal/runtime.iface" %56) + %57 = load ptr, ptr @"*_llgo_main.T2", align 8 + %58 = load ptr, ptr @"_llgo_iface$uRUteI7wmSy7y7ODhGzk0FdDaxGKMhVSSu6HZEv9aa0", align 8 + %59 = call ptr @"github.com/goplus/llgo/internal/runtime.NewItab"(ptr %58, ptr %57) + %60 = alloca %"github.com/goplus/llgo/internal/runtime.iface", align 8 + %61 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %60, i32 0, i32 0 + store ptr %59, ptr %61, align 8 + %62 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %60, i32 0, i32 1 + store ptr %9, ptr %62, align 8 + %63 = load %"github.com/goplus/llgo/internal/runtime.iface", ptr %60, align 8 + call void @main.invoke(%"github.com/goplus/llgo/internal/runtime.iface" %63) + %64 = load ptr, ptr @"*_llgo_main.T3", align 8 + %65 = load ptr, ptr @"_llgo_iface$uRUteI7wmSy7y7ODhGzk0FdDaxGKMhVSSu6HZEv9aa0", align 8 + %66 = call ptr @"github.com/goplus/llgo/internal/runtime.NewItab"(ptr %65, ptr %64) + %67 = alloca %"github.com/goplus/llgo/internal/runtime.iface", align 8 + %68 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %67, i32 0, i32 0 + store ptr %66, ptr %68, align 8 + %69 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %67, i32 0, i32 1 + store ptr %10, ptr %69, align 8 + %70 = load %"github.com/goplus/llgo/internal/runtime.iface", ptr %67, align 8 + call void @main.invoke(%"github.com/goplus/llgo/internal/runtime.iface" %70) + %71 = load [1 x i64], ptr %11, align 4 + %72 = load ptr, ptr @_llgo_main.T4, align 8 + %73 = extractvalue [1 x i64] %71, 0 + %74 = inttoptr i64 %73 to ptr + %75 = load ptr, ptr @"_llgo_iface$uRUteI7wmSy7y7ODhGzk0FdDaxGKMhVSSu6HZEv9aa0", align 8 + %76 = call ptr @"github.com/goplus/llgo/internal/runtime.NewItab"(ptr %75, ptr %72) %77 = alloca %"github.com/goplus/llgo/internal/runtime.iface", align 8 %78 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %77, i32 0, i32 0 store ptr %76, ptr %78, align 8 %79 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %77, i32 0, i32 1 - store ptr %2, ptr %79, align 8 + store ptr %74, ptr %79, align 8 %80 = load %"github.com/goplus/llgo/internal/runtime.iface", ptr %77, align 8 - %81 = call ptr @"github.com/goplus/llgo/internal/runtime.IfaceType"(%"github.com/goplus/llgo/internal/runtime.iface" %80) - %82 = extractvalue %"github.com/goplus/llgo/internal/runtime.iface" %80, 1 - %83 = load ptr, ptr @"_llgo_iface$uRUteI7wmSy7y7ODhGzk0FdDaxGKMhVSSu6HZEv9aa0", align 8 - %84 = call ptr @"github.com/goplus/llgo/internal/runtime.NewItab"(ptr %83, ptr %81) - %85 = alloca %"github.com/goplus/llgo/internal/runtime.iface", align 8 - %86 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %85, i32 0, i32 0 - store ptr %84, ptr %86, align 8 - %87 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %85, i32 0, i32 1 - store ptr %82, ptr %87, align 8 - %88 = load %"github.com/goplus/llgo/internal/runtime.iface", ptr %85, align 8 - call void @main.invoke(%"github.com/goplus/llgo/internal/runtime.iface" %88) - %89 = alloca %main.T, align 8 - %90 = call ptr @"github.com/goplus/llgo/internal/runtime.Zeroinit"(ptr %89, i64 16) - %91 = getelementptr inbounds %main.T, ptr %90, i32 0, i32 0 - %92 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 - %93 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %92, i32 0, i32 0 - store ptr @13, ptr %93, align 8 - %94 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %92, i32 0, i32 1 - store i64 5, ptr %94, align 4 - %95 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %92, align 8 - store %"github.com/goplus/llgo/internal/runtime.String" %95, ptr %91, align 8 - %96 = load %main.T, ptr %90, align 8 - %97 = load ptr, ptr @_llgo_main.T, align 8 - %98 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocU"(i64 16) - store %main.T %96, ptr %98, align 8 - %99 = alloca %"github.com/goplus/llgo/internal/runtime.eface", align 8 - %100 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %99, i32 0, i32 0 - store ptr %97, ptr %100, align 8 - %101 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %99, i32 0, i32 1 - store ptr %98, ptr %101, align 8 - %102 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %99, align 8 - %103 = extractvalue %"github.com/goplus/llgo/internal/runtime.eface" %102, 0 - %104 = load ptr, ptr @_llgo_main.I, align 8 - %105 = call i1 @"github.com/goplus/llgo/internal/runtime.Implements"(ptr %104, ptr %103) - br i1 %105, label %_llgo_1, label %_llgo_2 + call void @main.invoke(%"github.com/goplus/llgo/internal/runtime.iface" %80) + %81 = load ptr, ptr @"*_llgo_main.T4", align 8 + %82 = load ptr, ptr @"_llgo_iface$uRUteI7wmSy7y7ODhGzk0FdDaxGKMhVSSu6HZEv9aa0", align 8 + %83 = call ptr @"github.com/goplus/llgo/internal/runtime.NewItab"(ptr %82, ptr %81) + %84 = alloca %"github.com/goplus/llgo/internal/runtime.iface", align 8 + %85 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %84, i32 0, i32 0 + store ptr %83, ptr %85, align 8 + %86 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %84, i32 0, i32 1 + store ptr %11, ptr %86, align 8 + %87 = load %"github.com/goplus/llgo/internal/runtime.iface", ptr %84, align 8 + call void @main.invoke(%"github.com/goplus/llgo/internal/runtime.iface" %87) + %88 = load %main.T5, ptr %13, align 4 + %89 = load ptr, ptr @_llgo_main.T5, align 8 + %90 = extractvalue %main.T5 %88, 0 + %91 = inttoptr i64 %90 to ptr + %92 = load ptr, ptr @"_llgo_iface$uRUteI7wmSy7y7ODhGzk0FdDaxGKMhVSSu6HZEv9aa0", align 8 + %93 = call ptr @"github.com/goplus/llgo/internal/runtime.NewItab"(ptr %92, ptr %89) + %94 = alloca %"github.com/goplus/llgo/internal/runtime.iface", align 8 + %95 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %94, i32 0, i32 0 + store ptr %93, ptr %95, align 8 + %96 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %94, i32 0, i32 1 + store ptr %91, ptr %96, align 8 + %97 = load %"github.com/goplus/llgo/internal/runtime.iface", ptr %94, align 8 + call void @main.invoke(%"github.com/goplus/llgo/internal/runtime.iface" %97) + %98 = load ptr, ptr @"*_llgo_main.T5", align 8 + %99 = load ptr, ptr @"_llgo_iface$uRUteI7wmSy7y7ODhGzk0FdDaxGKMhVSSu6HZEv9aa0", align 8 + %100 = call ptr @"github.com/goplus/llgo/internal/runtime.NewItab"(ptr %99, ptr %98) + %101 = alloca %"github.com/goplus/llgo/internal/runtime.iface", align 8 + %102 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %101, i32 0, i32 0 + store ptr %100, ptr %102, align 8 + %103 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %101, i32 0, i32 1 + store ptr %13, ptr %103, align 8 + %104 = load %"github.com/goplus/llgo/internal/runtime.iface", ptr %101, align 8 + call void @main.invoke(%"github.com/goplus/llgo/internal/runtime.iface" %104) + %105 = call ptr @"github.com/goplus/llgo/internal/runtime.IfaceType"(%"github.com/goplus/llgo/internal/runtime.iface" zeroinitializer) + %106 = load ptr, ptr @"_llgo_iface$uRUteI7wmSy7y7ODhGzk0FdDaxGKMhVSSu6HZEv9aa0", align 8 + %107 = call ptr @"github.com/goplus/llgo/internal/runtime.NewItab"(ptr %106, ptr %105) + %108 = alloca %"github.com/goplus/llgo/internal/runtime.iface", align 8 + %109 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %108, i32 0, i32 0 + store ptr %107, ptr %109, align 8 + %110 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %108, i32 0, i32 1 + store ptr null, ptr %110, align 8 + %111 = load %"github.com/goplus/llgo/internal/runtime.iface", ptr %108, align 8 + call void @"github.com/goplus/llgo/internal/runtime.PrintIface"(%"github.com/goplus/llgo/internal/runtime.iface" %111) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) + call void @"github.com/goplus/llgo/internal/runtime.PrintIface"(%"github.com/goplus/llgo/internal/runtime.iface" zeroinitializer) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 10) + %112 = load ptr, ptr @"*_llgo_main.T", align 8 + %113 = load ptr, ptr @"_llgo_iface$jwmSdgh1zvY_TDIgLzCkvkbiyrdwl9N806DH0JGcyMI", align 8 + %114 = call ptr @"github.com/goplus/llgo/internal/runtime.NewItab"(ptr %113, ptr %112) + %115 = alloca %"github.com/goplus/llgo/internal/runtime.iface", align 8 + %116 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %115, i32 0, i32 0 + store ptr %114, ptr %116, align 8 + %117 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %115, i32 0, i32 1 + store ptr %2, ptr %117, align 8 + %118 = load %"github.com/goplus/llgo/internal/runtime.iface", ptr %115, align 8 + %119 = call ptr @"github.com/goplus/llgo/internal/runtime.IfaceType"(%"github.com/goplus/llgo/internal/runtime.iface" %118) + %120 = extractvalue %"github.com/goplus/llgo/internal/runtime.iface" %118, 1 + %121 = load ptr, ptr @"_llgo_iface$uRUteI7wmSy7y7ODhGzk0FdDaxGKMhVSSu6HZEv9aa0", align 8 + %122 = call ptr @"github.com/goplus/llgo/internal/runtime.NewItab"(ptr %121, ptr %119) + %123 = alloca %"github.com/goplus/llgo/internal/runtime.iface", align 8 + %124 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %123, i32 0, i32 0 + store ptr %122, ptr %124, align 8 + %125 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %123, i32 0, i32 1 + store ptr %120, ptr %125, align 8 + %126 = load %"github.com/goplus/llgo/internal/runtime.iface", ptr %123, align 8 + call void @main.invoke(%"github.com/goplus/llgo/internal/runtime.iface" %126) + %127 = alloca %main.T, align 8 + %128 = call ptr @"github.com/goplus/llgo/internal/runtime.Zeroinit"(ptr %127, i64 16) + %129 = getelementptr inbounds %main.T, ptr %128, i32 0, i32 0 + %130 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %131 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %130, i32 0, i32 0 + store ptr @18, ptr %131, align 8 + %132 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %130, i32 0, i32 1 + store i64 5, ptr %132, align 4 + %133 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %130, align 8 + store %"github.com/goplus/llgo/internal/runtime.String" %133, ptr %129, align 8 + %134 = load %main.T, ptr %128, align 8 + %135 = load ptr, ptr @_llgo_main.T, align 8 + %136 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocU"(i64 16) + store %main.T %134, ptr %136, align 8 + %137 = alloca %"github.com/goplus/llgo/internal/runtime.eface", align 8 + %138 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %137, i32 0, i32 0 + store ptr %135, ptr %138, align 8 + %139 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %137, i32 0, i32 1 + store ptr %136, ptr %139, align 8 + %140 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %137, align 8 + %141 = extractvalue %"github.com/goplus/llgo/internal/runtime.eface" %140, 0 + %142 = load ptr, ptr @_llgo_main.I, align 8 + %143 = call i1 @"github.com/goplus/llgo/internal/runtime.Implements"(ptr %142, ptr %141) + br i1 %143, label %_llgo_1, label %_llgo_2 _llgo_1: ; preds = %_llgo_0 - %106 = extractvalue %"github.com/goplus/llgo/internal/runtime.eface" %102, 1 - %107 = load ptr, ptr @"_llgo_iface$uRUteI7wmSy7y7ODhGzk0FdDaxGKMhVSSu6HZEv9aa0", align 8 - %108 = call ptr @"github.com/goplus/llgo/internal/runtime.NewItab"(ptr %107, ptr %103) - %109 = alloca %"github.com/goplus/llgo/internal/runtime.iface", align 8 - %110 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %109, i32 0, i32 0 - store ptr %108, ptr %110, align 8 - %111 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %109, i32 0, i32 1 - store ptr %106, ptr %111, align 8 - %112 = load %"github.com/goplus/llgo/internal/runtime.iface", ptr %109, align 8 - call void @main.invoke(%"github.com/goplus/llgo/internal/runtime.iface" %112) - %113 = extractvalue %"github.com/goplus/llgo/internal/runtime.eface" %102, 0 - %114 = load ptr, ptr @_llgo_any, align 8 - %115 = call i1 @"github.com/goplus/llgo/internal/runtime.Implements"(ptr %114, ptr %113) - br i1 %115, label %_llgo_3, label %_llgo_4 - -_llgo_2: ; preds = %_llgo_0 - %116 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 - %117 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %116, i32 0, i32 0 - store ptr @15, ptr %117, align 8 - %118 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %116, i32 0, i32 1 - store i64 21, ptr %118, align 4 - %119 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %116, align 8 - %120 = load ptr, ptr @_llgo_string, align 8 - %121 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocU"(i64 16) - store %"github.com/goplus/llgo/internal/runtime.String" %119, ptr %121, align 8 - %122 = alloca %"github.com/goplus/llgo/internal/runtime.eface", align 8 - %123 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %122, i32 0, i32 0 - store ptr %120, ptr %123, align 8 - %124 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %122, i32 0, i32 1 - store ptr %121, ptr %124, align 8 - %125 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %122, align 8 - call void @"github.com/goplus/llgo/internal/runtime.Panic"(%"github.com/goplus/llgo/internal/runtime.eface" %125) - unreachable - -_llgo_3: ; preds = %_llgo_1 - %126 = extractvalue %"github.com/goplus/llgo/internal/runtime.eface" %102, 1 - %127 = alloca %"github.com/goplus/llgo/internal/runtime.eface", align 8 - %128 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %127, i32 0, i32 0 - store ptr %113, ptr %128, align 8 - %129 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %127, i32 0, i32 1 - store ptr %126, ptr %129, align 8 - %130 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %127, align 8 - %131 = extractvalue %"github.com/goplus/llgo/internal/runtime.eface" %130, 0 - %132 = load ptr, ptr @"_llgo_iface$uRUteI7wmSy7y7ODhGzk0FdDaxGKMhVSSu6HZEv9aa0", align 8 - %133 = call i1 @"github.com/goplus/llgo/internal/runtime.Implements"(ptr %132, ptr %131) - br i1 %133, label %_llgo_5, label %_llgo_6 - -_llgo_4: ; preds = %_llgo_1 - %134 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 - %135 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %134, i32 0, i32 0 - store ptr @15, ptr %135, align 8 - %136 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %134, i32 0, i32 1 - store i64 21, ptr %136, align 4 - %137 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %134, align 8 - %138 = load ptr, ptr @_llgo_string, align 8 - %139 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocU"(i64 16) - store %"github.com/goplus/llgo/internal/runtime.String" %137, ptr %139, align 8 - %140 = alloca %"github.com/goplus/llgo/internal/runtime.eface", align 8 - %141 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %140, i32 0, i32 0 - store ptr %138, ptr %141, align 8 - %142 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %140, i32 0, i32 1 - store ptr %139, ptr %142, align 8 - %143 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %140, align 8 - call void @"github.com/goplus/llgo/internal/runtime.Panic"(%"github.com/goplus/llgo/internal/runtime.eface" %143) - unreachable - -_llgo_5: ; preds = %_llgo_3 - %144 = extractvalue %"github.com/goplus/llgo/internal/runtime.eface" %130, 1 + %144 = extractvalue %"github.com/goplus/llgo/internal/runtime.eface" %140, 1 %145 = load ptr, ptr @"_llgo_iface$uRUteI7wmSy7y7ODhGzk0FdDaxGKMhVSSu6HZEv9aa0", align 8 - %146 = call ptr @"github.com/goplus/llgo/internal/runtime.NewItab"(ptr %145, ptr %131) + %146 = call ptr @"github.com/goplus/llgo/internal/runtime.NewItab"(ptr %145, ptr %141) %147 = alloca %"github.com/goplus/llgo/internal/runtime.iface", align 8 %148 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %147, i32 0, i32 0 store ptr %146, ptr %148, align 8 @@ -412,26 +463,93 @@ _llgo_5: ; preds = %_llgo_3 store ptr %144, ptr %149, align 8 %150 = load %"github.com/goplus/llgo/internal/runtime.iface", ptr %147, align 8 call void @main.invoke(%"github.com/goplus/llgo/internal/runtime.iface" %150) + %151 = extractvalue %"github.com/goplus/llgo/internal/runtime.eface" %140, 0 + %152 = load ptr, ptr @_llgo_any, align 8 + %153 = call i1 @"github.com/goplus/llgo/internal/runtime.Implements"(ptr %152, ptr %151) + br i1 %153, label %_llgo_3, label %_llgo_4 + +_llgo_2: ; preds = %_llgo_0 + %154 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %155 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %154, i32 0, i32 0 + store ptr @20, ptr %155, align 8 + %156 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %154, i32 0, i32 1 + store i64 21, ptr %156, align 4 + %157 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %154, align 8 + %158 = load ptr, ptr @_llgo_string, align 8 + %159 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocU"(i64 16) + store %"github.com/goplus/llgo/internal/runtime.String" %157, ptr %159, align 8 + %160 = alloca %"github.com/goplus/llgo/internal/runtime.eface", align 8 + %161 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %160, i32 0, i32 0 + store ptr %158, ptr %161, align 8 + %162 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %160, i32 0, i32 1 + store ptr %159, ptr %162, align 8 + %163 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %160, align 8 + call void @"github.com/goplus/llgo/internal/runtime.Panic"(%"github.com/goplus/llgo/internal/runtime.eface" %163) + unreachable + +_llgo_3: ; preds = %_llgo_1 + %164 = extractvalue %"github.com/goplus/llgo/internal/runtime.eface" %140, 1 + %165 = alloca %"github.com/goplus/llgo/internal/runtime.eface", align 8 + %166 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %165, i32 0, i32 0 + store ptr %151, ptr %166, align 8 + %167 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %165, i32 0, i32 1 + store ptr %164, ptr %167, align 8 + %168 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %165, align 8 + %169 = extractvalue %"github.com/goplus/llgo/internal/runtime.eface" %168, 0 + %170 = load ptr, ptr @"_llgo_iface$uRUteI7wmSy7y7ODhGzk0FdDaxGKMhVSSu6HZEv9aa0", align 8 + %171 = call i1 @"github.com/goplus/llgo/internal/runtime.Implements"(ptr %170, ptr %169) + br i1 %171, label %_llgo_5, label %_llgo_6 + +_llgo_4: ; preds = %_llgo_1 + %172 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %173 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %172, i32 0, i32 0 + store ptr @20, ptr %173, align 8 + %174 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %172, i32 0, i32 1 + store i64 21, ptr %174, align 4 + %175 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %172, align 8 + %176 = load ptr, ptr @_llgo_string, align 8 + %177 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocU"(i64 16) + store %"github.com/goplus/llgo/internal/runtime.String" %175, ptr %177, align 8 + %178 = alloca %"github.com/goplus/llgo/internal/runtime.eface", align 8 + %179 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %178, i32 0, i32 0 + store ptr %176, ptr %179, align 8 + %180 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %178, i32 0, i32 1 + store ptr %177, ptr %180, align 8 + %181 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %178, align 8 + call void @"github.com/goplus/llgo/internal/runtime.Panic"(%"github.com/goplus/llgo/internal/runtime.eface" %181) + unreachable + +_llgo_5: ; preds = %_llgo_3 + %182 = extractvalue %"github.com/goplus/llgo/internal/runtime.eface" %168, 1 + %183 = load ptr, ptr @"_llgo_iface$uRUteI7wmSy7y7ODhGzk0FdDaxGKMhVSSu6HZEv9aa0", align 8 + %184 = call ptr @"github.com/goplus/llgo/internal/runtime.NewItab"(ptr %183, ptr %169) + %185 = alloca %"github.com/goplus/llgo/internal/runtime.iface", align 8 + %186 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %185, i32 0, i32 0 + store ptr %184, ptr %186, align 8 + %187 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %185, i32 0, i32 1 + store ptr %182, ptr %187, align 8 + %188 = load %"github.com/goplus/llgo/internal/runtime.iface", ptr %185, align 8 + call void @main.invoke(%"github.com/goplus/llgo/internal/runtime.iface" %188) call void @main.invoke(%"github.com/goplus/llgo/internal/runtime.iface" zeroinitializer) ret i32 0 _llgo_6: ; preds = %_llgo_3 - %151 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 - %152 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %151, i32 0, i32 0 - store ptr @15, ptr %152, align 8 - %153 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %151, i32 0, i32 1 - store i64 21, ptr %153, align 4 - %154 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %151, align 8 - %155 = load ptr, ptr @_llgo_string, align 8 - %156 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocU"(i64 16) - store %"github.com/goplus/llgo/internal/runtime.String" %154, ptr %156, align 8 - %157 = alloca %"github.com/goplus/llgo/internal/runtime.eface", align 8 - %158 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %157, i32 0, i32 0 - store ptr %155, ptr %158, align 8 - %159 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %157, i32 0, i32 1 - store ptr %156, ptr %159, align 8 - %160 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %157, align 8 - call void @"github.com/goplus/llgo/internal/runtime.Panic"(%"github.com/goplus/llgo/internal/runtime.eface" %160) + %189 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %190 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %189, i32 0, i32 0 + store ptr @20, ptr %190, align 8 + %191 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %189, i32 0, i32 1 + store i64 21, ptr %191, align 4 + %192 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %189, align 8 + %193 = load ptr, ptr @_llgo_string, align 8 + %194 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocU"(i64 16) + store %"github.com/goplus/llgo/internal/runtime.String" %192, ptr %194, align 8 + %195 = alloca %"github.com/goplus/llgo/internal/runtime.eface", align 8 + %196 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %195, i32 0, i32 0 + store ptr %193, ptr %196, align 8 + %197 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %195, i32 0, i32 1 + store ptr %194, ptr %197, align 8 + %198 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %195, align 8 + call void @"github.com/goplus/llgo/internal/runtime.Panic"(%"github.com/goplus/llgo/internal/runtime.eface" %198) unreachable } @@ -465,7 +583,7 @@ _llgo_1: ; preds = %_llgo_0 _llgo_2: ; preds = %_llgo_1, %_llgo_0 %3 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 %4 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %3, i32 0, i32 0 - store ptr @5, ptr %4, align 8 + store ptr @7, ptr %4, align 8 %5 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %3, i32 0, i32 1 store i64 1, ptr %5, align 4 %6 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %3, align 8 @@ -479,7 +597,7 @@ _llgo_2: ; preds = %_llgo_1, %_llgo_0 %12 = call %"github.com/goplus/llgo/internal/abi.StructField" @"github.com/goplus/llgo/internal/runtime.StructField"(%"github.com/goplus/llgo/internal/runtime.String" %6, ptr %11, i64 0, %"github.com/goplus/llgo/internal/runtime.String" %10, i1 false) %13 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 %14 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %13, i32 0, i32 0 - store ptr @6, ptr %14, align 8 + store ptr @8, ptr %14, align 8 %15 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %13, i32 0, i32 1 store i64 4, ptr %15, align 4 %16 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %13, align 8 @@ -502,7 +620,7 @@ _llgo_2: ; preds = %_llgo_1, %_llgo_0 _llgo_3: ; preds = %_llgo_2 %26 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 %27 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %26, i32 0, i32 0 - store ptr @7, ptr %27, align 8 + store ptr @9, ptr %27, align 8 %28 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %26, i32 0, i32 1 store i64 6, ptr %28, align 4 %29 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %26, align 8 @@ -553,6 +671,7 @@ _llgo_7: ; preds = %_llgo_6 store i64 1, ptr %53, align 4 %54 = load %"github.com/goplus/llgo/internal/runtime.Slice", ptr %50, align 8 %55 = call ptr @"github.com/goplus/llgo/internal/runtime.Func"(%"github.com/goplus/llgo/internal/runtime.Slice" %47, %"github.com/goplus/llgo/internal/runtime.Slice" %54, i1 false) + call void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr %55) store ptr %55, ptr @"_llgo_func$ETeB8WwW04JEq0ztcm-XPTJtuYvtpkjIsAc0-2NT9zA", align 8 br label %_llgo_8 @@ -580,7 +699,7 @@ _llgo_8: ; preds = %_llgo_7, %_llgo_6 %68 = load %"github.com/goplus/llgo/internal/abi.Method", ptr %63, align 8 %69 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 %70 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %69, i32 0, i32 0 - store ptr @8, ptr %70, align 8 + store ptr @10, ptr %70, align 8 %71 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %69, i32 0, i32 1 store i64 6, ptr %71, align 4 %72 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %69, align 8 @@ -608,6 +727,7 @@ _llgo_9: ; preds = %_llgo_8 store i64 0, ptr %85, align 4 %86 = load %"github.com/goplus/llgo/internal/runtime.Slice", ptr %82, align 8 %87 = call ptr @"github.com/goplus/llgo/internal/runtime.Func"(%"github.com/goplus/llgo/internal/runtime.Slice" %80, %"github.com/goplus/llgo/internal/runtime.Slice" %86, i1 false) + call void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr %87) store ptr %87, ptr @"_llgo_func$2_iS07vIlF2_rZqWB5eU0IvP_9HviM4MYZNkXZDvbac", align 8 br label %_llgo_10 @@ -649,13 +769,13 @@ _llgo_10: ; preds = %_llgo_9, %_llgo_8 %109 = load %"github.com/goplus/llgo/internal/runtime.Slice", ptr %105, align 8 %110 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 %111 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %110, i32 0, i32 0 - store ptr @6, ptr %111, align 8 + store ptr @8, ptr %111, align 8 %112 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %110, i32 0, i32 1 store i64 4, ptr %112, align 4 %113 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %110, align 8 %114 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 %115 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %114, i32 0, i32 0 - store ptr @9, ptr %115, align 8 + store ptr @11, ptr %115, align 8 %116 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %114, i32 0, i32 1 store i64 1, ptr %116, align 4 %117 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %114, align 8 @@ -665,7 +785,7 @@ _llgo_10: ; preds = %_llgo_9, %_llgo_8 _llgo_11: ; preds = %_llgo_4 %118 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 %119 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %118, i32 0, i32 0 - store ptr @7, ptr %119, align 8 + store ptr @9, ptr %119, align 8 %120 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %118, i32 0, i32 1 store i64 6, ptr %120, align 4 %121 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %118, align 8 @@ -688,7 +808,7 @@ _llgo_11: ; preds = %_llgo_4 %132 = load %"github.com/goplus/llgo/internal/runtime.Slice", ptr %128, align 8 %133 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 %134 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %133, i32 0, i32 0 - store ptr @6, ptr %134, align 8 + store ptr @8, ptr %134, align 8 %135 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %133, i32 0, i32 1 store i64 4, ptr %135, align 4 %136 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %133, align 8 @@ -709,6 +829,7 @@ _llgo_12: ; preds = %_llgo_11, %_llgo_4 _llgo_13: ; preds = %_llgo_12 %144 = call ptr @"github.com/goplus/llgo/internal/runtime.PointerTo"(ptr %2) + call void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr %144) store ptr %144, ptr @"*_llgo_main.T", align 8 br label %_llgo_14 @@ -733,7 +854,7 @@ _llgo_16: ; preds = %_llgo_15, %_llgo_14 _llgo_17: ; preds = %_llgo_16 %152 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 %153 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %152, i32 0, i32 0 - store ptr @7, ptr %153, align 8 + store ptr @9, ptr %153, align 8 %154 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %152, i32 0, i32 1 store i64 6, ptr %154, align 4 %155 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %152, align 8 @@ -782,13 +903,13 @@ _llgo_17: ; preds = %_llgo_16 %182 = load %"github.com/goplus/llgo/internal/runtime.Slice", ptr %178, align 8 %183 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 %184 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %183, i32 0, i32 0 - store ptr @6, ptr %184, align 8 + store ptr @8, ptr %184, align 8 %185 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %183, i32 0, i32 1 store i64 4, ptr %185, align 4 %186 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %183, align 8 %187 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 %188 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %187, i32 0, i32 0 - store ptr @10, ptr %188, align 8 + store ptr @12, ptr %188, align 8 %189 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %187, i32 0, i32 1 store i64 2, ptr %189, align 4 %190 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %187, align 8 @@ -802,6 +923,7 @@ _llgo_18: ; preds = %_llgo_17, %_llgo_16 _llgo_19: ; preds = %_llgo_18 %193 = call ptr @"github.com/goplus/llgo/internal/runtime.PointerTo"(ptr %147) + call void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr %193) store ptr %193, ptr @"*_llgo_main.T1", align 8 br label %_llgo_20 @@ -840,7 +962,7 @@ _llgo_24: ; preds = %_llgo_23, %_llgo_22 _llgo_25: ; preds = %_llgo_24 %207 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 %208 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %207, i32 0, i32 0 - store ptr @7, ptr %208, align 8 + store ptr @9, ptr %208, align 8 %209 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %207, i32 0, i32 1 store i64 6, ptr %209, align 4 %210 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %207, align 8 @@ -889,13 +1011,13 @@ _llgo_25: ; preds = %_llgo_24 %237 = load %"github.com/goplus/llgo/internal/runtime.Slice", ptr %233, align 8 %238 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 %239 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %238, i32 0, i32 0 - store ptr @6, ptr %239, align 8 + store ptr @8, ptr %239, align 8 %240 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %238, i32 0, i32 1 store i64 4, ptr %240, align 4 %241 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %238, align 8 %242 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 %243 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %242, i32 0, i32 0 - store ptr @11, ptr %243, align 8 + store ptr @13, ptr %243, align 8 %244 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %242, i32 0, i32 1 store i64 2, ptr %244, align 4 %245 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %242, align 8 @@ -909,6 +1031,7 @@ _llgo_26: ; preds = %_llgo_25, %_llgo_24 _llgo_27: ; preds = %_llgo_26 %248 = call ptr @"github.com/goplus/llgo/internal/runtime.PointerTo"(ptr %196) + call void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr %248) store ptr %248, ptr @"*_llgo_main.T2", align 8 br label %_llgo_28 @@ -947,7 +1070,7 @@ _llgo_32: ; preds = %_llgo_31, %_llgo_30 _llgo_33: ; preds = %_llgo_32 %262 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 %263 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %262, i32 0, i32 0 - store ptr @7, ptr %263, align 8 + store ptr @9, ptr %263, align 8 %264 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %262, i32 0, i32 1 store i64 6, ptr %264, align 4 %265 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %262, align 8 @@ -975,13 +1098,13 @@ _llgo_33: ; preds = %_llgo_32 %279 = load %"github.com/goplus/llgo/internal/runtime.Slice", ptr %275, align 8 %280 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 %281 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %280, i32 0, i32 0 - store ptr @6, ptr %281, align 8 + store ptr @8, ptr %281, align 8 %282 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %280, i32 0, i32 1 store i64 4, ptr %282, align 4 %283 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %280, align 8 %284 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 %285 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %284, i32 0, i32 0 - store ptr @12, ptr %285, align 8 + store ptr @14, ptr %285, align 8 %286 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %284, i32 0, i32 1 store i64 2, ptr %286, align 4 %287 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %284, align 8 @@ -995,158 +1118,400 @@ _llgo_34: ; preds = %_llgo_33, %_llgo_32 _llgo_35: ; preds = %_llgo_34 %290 = call ptr @"github.com/goplus/llgo/internal/runtime.PointerTo"(ptr %251) + call void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr %290) store ptr %290, ptr @"*_llgo_main.T3", align 8 br label %_llgo_36 _llgo_36: ; preds = %_llgo_35, %_llgo_34 - %291 = load ptr, ptr @"_llgo_func$ETeB8WwW04JEq0ztcm-XPTJtuYvtpkjIsAc0-2NT9zA", align 8 - %292 = load ptr, ptr @"_llgo_func$2_iS07vIlF2_rZqWB5eU0IvP_9HviM4MYZNkXZDvbac", align 8 - %293 = load ptr, ptr @"_llgo_iface$jwmSdgh1zvY_TDIgLzCkvkbiyrdwl9N806DH0JGcyMI", align 8 - %294 = icmp eq ptr %293, null - br i1 %294, label %_llgo_37, label %_llgo_38 + %291 = load ptr, ptr @_llgo_main.T4, align 8 + %292 = icmp eq ptr %291, null + br i1 %292, label %_llgo_37, label %_llgo_38 _llgo_37: ; preds = %_llgo_36 - %295 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 - %296 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %295, i32 0, i32 0 - store ptr @7, ptr %296, align 8 - %297 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %295, i32 0, i32 1 - store i64 6, ptr %297, align 4 - %298 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %295, align 8 - %299 = alloca %"github.com/goplus/llgo/internal/abi.Imethod", align 8 - %300 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.Imethod", ptr %299, i32 0, i32 0 - store %"github.com/goplus/llgo/internal/runtime.String" %298, ptr %300, align 8 - %301 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.Imethod", ptr %299, i32 0, i32 1 - store ptr %291, ptr %301, align 8 - %302 = load %"github.com/goplus/llgo/internal/abi.Imethod", ptr %299, align 8 - %303 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 - %304 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %303, i32 0, i32 0 - store ptr @8, ptr %304, align 8 - %305 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %303, i32 0, i32 1 - store i64 6, ptr %305, align 4 - %306 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %303, align 8 - %307 = alloca %"github.com/goplus/llgo/internal/abi.Imethod", align 8 - %308 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.Imethod", ptr %307, i32 0, i32 0 - store %"github.com/goplus/llgo/internal/runtime.String" %306, ptr %308, align 8 - %309 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.Imethod", ptr %307, i32 0, i32 1 - store ptr %292, ptr %309, align 8 - %310 = load %"github.com/goplus/llgo/internal/abi.Imethod", ptr %307, align 8 - %311 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocU"(i64 48) - %312 = getelementptr %"github.com/goplus/llgo/internal/abi.Imethod", ptr %311, i64 0 - store %"github.com/goplus/llgo/internal/abi.Imethod" %302, ptr %312, align 8 - %313 = getelementptr %"github.com/goplus/llgo/internal/abi.Imethod", ptr %311, i64 1 - store %"github.com/goplus/llgo/internal/abi.Imethod" %310, ptr %313, align 8 - %314 = alloca %"github.com/goplus/llgo/internal/runtime.Slice", align 8 - %315 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %314, i32 0, i32 0 - store ptr %311, ptr %315, align 8 - %316 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %314, i32 0, i32 1 - store i64 2, ptr %316, align 4 - %317 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %314, i32 0, i32 2 - store i64 2, ptr %317, align 4 - %318 = load %"github.com/goplus/llgo/internal/runtime.Slice", ptr %314, align 8 - %319 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 - %320 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %319, i32 0, i32 0 - store ptr @6, ptr %320, align 8 - %321 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %319, i32 0, i32 1 - store i64 4, ptr %321, align 4 - %322 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %319, align 8 - %323 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 - %324 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %323, i32 0, i32 0 - store ptr null, ptr %324, align 8 - %325 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %323, i32 0, i32 1 - store i64 0, ptr %325, align 4 - %326 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %323, align 8 - %327 = call ptr @"github.com/goplus/llgo/internal/runtime.Interface"(%"github.com/goplus/llgo/internal/runtime.String" %322, %"github.com/goplus/llgo/internal/runtime.String" %326, %"github.com/goplus/llgo/internal/runtime.Slice" %318) - store ptr %327, ptr @"_llgo_iface$jwmSdgh1zvY_TDIgLzCkvkbiyrdwl9N806DH0JGcyMI", align 8 + %293 = call ptr @"github.com/goplus/llgo/internal/runtime.NewNamed"(i64 17, i64 1, i64 1) + %294 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.Type", ptr %293, i32 0, i32 6 + %295 = load i8, ptr %294, align 1 + %296 = or i8 %295, 32 + store i8 %296, ptr %294, align 1 + store ptr %293, ptr @_llgo_main.T4, align 8 br label %_llgo_38 _llgo_38: ; preds = %_llgo_37, %_llgo_36 - %328 = load ptr, ptr @"_llgo_func$ETeB8WwW04JEq0ztcm-XPTJtuYvtpkjIsAc0-2NT9zA", align 8 - %329 = load ptr, ptr @_llgo_main.I, align 8 - %330 = icmp eq ptr %329, null - br i1 %330, label %_llgo_39, label %_llgo_40 + %297 = load ptr, ptr @_llgo_int, align 8 + %298 = load ptr, ptr @"[1]_llgo_int", align 8 + %299 = icmp eq ptr %298, null + br i1 %299, label %_llgo_39, label %_llgo_40 _llgo_39: ; preds = %_llgo_38 - %331 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 - %332 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %331, i32 0, i32 0 - store ptr @7, ptr %332, align 8 - %333 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %331, i32 0, i32 1 - store i64 6, ptr %333, align 4 - %334 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %331, align 8 - %335 = alloca %"github.com/goplus/llgo/internal/abi.Imethod", align 8 - %336 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.Imethod", ptr %335, i32 0, i32 0 - store %"github.com/goplus/llgo/internal/runtime.String" %334, ptr %336, align 8 - %337 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.Imethod", ptr %335, i32 0, i32 1 - store ptr %328, ptr %337, align 8 - %338 = load %"github.com/goplus/llgo/internal/abi.Imethod", ptr %335, align 8 - %339 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocU"(i64 24) - %340 = getelementptr %"github.com/goplus/llgo/internal/abi.Imethod", ptr %339, i64 0 - store %"github.com/goplus/llgo/internal/abi.Imethod" %338, ptr %340, align 8 - %341 = alloca %"github.com/goplus/llgo/internal/runtime.Slice", align 8 - %342 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %341, i32 0, i32 0 - store ptr %339, ptr %342, align 8 - %343 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %341, i32 0, i32 1 - store i64 1, ptr %343, align 4 - %344 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %341, i32 0, i32 2 - store i64 1, ptr %344, align 4 - %345 = load %"github.com/goplus/llgo/internal/runtime.Slice", ptr %341, align 8 - %346 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 - %347 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %346, i32 0, i32 0 - store ptr @6, ptr %347, align 8 - %348 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %346, i32 0, i32 1 - store i64 4, ptr %348, align 4 - %349 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %346, align 8 - %350 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 - %351 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %350, i32 0, i32 0 - store ptr @14, ptr %351, align 8 - %352 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %350, i32 0, i32 1 - store i64 6, ptr %352, align 4 - %353 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %350, align 8 - %354 = call ptr @"github.com/goplus/llgo/internal/runtime.Interface"(%"github.com/goplus/llgo/internal/runtime.String" %349, %"github.com/goplus/llgo/internal/runtime.String" %353, %"github.com/goplus/llgo/internal/runtime.Slice" %345) - store ptr %354, ptr @_llgo_main.I, align 8 + %300 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 2) + %301 = call ptr @"github.com/goplus/llgo/internal/runtime.ArrayOf"(i64 1, ptr %300) + %302 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.Type", ptr %301, i32 0, i32 6 + %303 = load i8, ptr %302, align 1 + %304 = or i8 %303, 32 + store i8 %304, ptr %302, align 1 + store ptr %301, ptr @"[1]_llgo_int", align 8 br label %_llgo_40 _llgo_40: ; preds = %_llgo_39, %_llgo_38 - %355 = load ptr, ptr @_llgo_string, align 8 - %356 = icmp eq ptr %355, null - br i1 %356, label %_llgo_41, label %_llgo_42 + %305 = load ptr, ptr @"[1]_llgo_int", align 8 + br i1 %292, label %_llgo_41, label %_llgo_42 _llgo_41: ; preds = %_llgo_40 - %357 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 24) - store ptr %357, ptr @_llgo_string, align 8 + %306 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %307 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %306, i32 0, i32 0 + store ptr @9, ptr %307, align 8 + %308 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %306, i32 0, i32 1 + store i64 6, ptr %308, align 4 + %309 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %306, align 8 + %310 = load ptr, ptr @"_llgo_func$ETeB8WwW04JEq0ztcm-XPTJtuYvtpkjIsAc0-2NT9zA", align 8 + %311 = alloca %"github.com/goplus/llgo/internal/abi.Method", align 8 + %312 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.Method", ptr %311, i32 0, i32 0 + store %"github.com/goplus/llgo/internal/runtime.String" %309, ptr %312, align 8 + %313 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.Method", ptr %311, i32 0, i32 1 + store ptr %310, ptr %313, align 8 + %314 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.Method", ptr %311, i32 0, i32 2 + store ptr @"main.(*T4).Invoke", ptr %314, align 8 + %315 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.Method", ptr %311, i32 0, i32 3 + store ptr @"main.(*T4).Invoke", ptr %315, align 8 + %316 = load %"github.com/goplus/llgo/internal/abi.Method", ptr %311, align 8 + %317 = alloca %"github.com/goplus/llgo/internal/abi.Method", align 8 + %318 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.Method", ptr %317, i32 0, i32 0 + store %"github.com/goplus/llgo/internal/runtime.String" %309, ptr %318, align 8 + %319 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.Method", ptr %317, i32 0, i32 1 + store ptr %310, ptr %319, align 8 + %320 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.Method", ptr %317, i32 0, i32 2 + store ptr @"main.(*T4).Invoke", ptr %320, align 8 + %321 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.Method", ptr %317, i32 0, i32 3 + store ptr @main.T4.Invoke, ptr %321, align 8 + %322 = load %"github.com/goplus/llgo/internal/abi.Method", ptr %317, align 8 + %323 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocU"(i64 40) + %324 = getelementptr %"github.com/goplus/llgo/internal/abi.Method", ptr %323, i64 0 + store %"github.com/goplus/llgo/internal/abi.Method" %322, ptr %324, align 8 + %325 = alloca %"github.com/goplus/llgo/internal/runtime.Slice", align 8 + %326 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %325, i32 0, i32 0 + store ptr %323, ptr %326, align 8 + %327 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %325, i32 0, i32 1 + store i64 1, ptr %327, align 4 + %328 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %325, i32 0, i32 2 + store i64 1, ptr %328, align 4 + %329 = load %"github.com/goplus/llgo/internal/runtime.Slice", ptr %325, align 8 + %330 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocU"(i64 40) + %331 = getelementptr %"github.com/goplus/llgo/internal/abi.Method", ptr %330, i64 0 + store %"github.com/goplus/llgo/internal/abi.Method" %316, ptr %331, align 8 + %332 = alloca %"github.com/goplus/llgo/internal/runtime.Slice", align 8 + %333 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %332, i32 0, i32 0 + store ptr %330, ptr %333, align 8 + %334 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %332, i32 0, i32 1 + store i64 1, ptr %334, align 4 + %335 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %332, i32 0, i32 2 + store i64 1, ptr %335, align 4 + %336 = load %"github.com/goplus/llgo/internal/runtime.Slice", ptr %332, align 8 + %337 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %338 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %337, i32 0, i32 0 + store ptr @8, ptr %338, align 8 + %339 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %337, i32 0, i32 1 + store i64 4, ptr %339, align 4 + %340 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %337, align 8 + %341 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %342 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %341, i32 0, i32 0 + store ptr @15, ptr %342, align 8 + %343 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %341, i32 0, i32 1 + store i64 2, ptr %343, align 4 + %344 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %341, align 8 + call void @"github.com/goplus/llgo/internal/runtime.InitNamed"(ptr %293, %"github.com/goplus/llgo/internal/runtime.String" %340, %"github.com/goplus/llgo/internal/runtime.String" %344, ptr %305, %"github.com/goplus/llgo/internal/runtime.Slice" %329, %"github.com/goplus/llgo/internal/runtime.Slice" %336) br label %_llgo_42 _llgo_42: ; preds = %_llgo_41, %_llgo_40 - %358 = load ptr, ptr @_llgo_any, align 8 - %359 = icmp eq ptr %358, null - br i1 %359, label %_llgo_43, label %_llgo_44 + %345 = load ptr, ptr @"*_llgo_main.T4", align 8 + %346 = icmp eq ptr %345, null + br i1 %346, label %_llgo_43, label %_llgo_44 _llgo_43: ; preds = %_llgo_42 - %360 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocU"(i64 0) - %361 = alloca %"github.com/goplus/llgo/internal/runtime.Slice", align 8 - %362 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %361, i32 0, i32 0 - store ptr %360, ptr %362, align 8 - %363 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %361, i32 0, i32 1 - store i64 0, ptr %363, align 4 - %364 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %361, i32 0, i32 2 - store i64 0, ptr %364, align 4 - %365 = load %"github.com/goplus/llgo/internal/runtime.Slice", ptr %361, align 8 - %366 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 - %367 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %366, i32 0, i32 0 - store ptr @6, ptr %367, align 8 - %368 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %366, i32 0, i32 1 - store i64 4, ptr %368, align 4 - %369 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %366, align 8 - %370 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 - %371 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %370, i32 0, i32 0 - store ptr null, ptr %371, align 8 - %372 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %370, i32 0, i32 1 - store i64 0, ptr %372, align 4 - %373 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %370, align 8 - %374 = call ptr @"github.com/goplus/llgo/internal/runtime.Interface"(%"github.com/goplus/llgo/internal/runtime.String" %369, %"github.com/goplus/llgo/internal/runtime.String" %373, %"github.com/goplus/llgo/internal/runtime.Slice" %365) - store ptr %374, ptr @_llgo_any, align 8 + %347 = call ptr @"github.com/goplus/llgo/internal/runtime.PointerTo"(ptr %293) + call void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr %347) + store ptr %347, ptr @"*_llgo_main.T4", align 8 br label %_llgo_44 _llgo_44: ; preds = %_llgo_43, %_llgo_42 + %348 = load ptr, ptr @_llgo_main.T5, align 8 + %349 = icmp eq ptr %348, null + br i1 %349, label %_llgo_45, label %_llgo_46 + +_llgo_45: ; preds = %_llgo_44 + %350 = call ptr @"github.com/goplus/llgo/internal/runtime.NewNamed"(i64 25, i64 1, i64 1) + %351 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.Type", ptr %350, i32 0, i32 6 + %352 = load i8, ptr %351, align 1 + %353 = or i8 %352, 32 + store i8 %353, ptr %351, align 1 + store ptr %350, ptr @_llgo_main.T5, align 8 + br label %_llgo_46 + +_llgo_46: ; preds = %_llgo_45, %_llgo_44 + %354 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %355 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %354, i32 0, i32 0 + store ptr @16, ptr %355, align 8 + %356 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %354, i32 0, i32 1 + store i64 1, ptr %356, align 4 + %357 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %354, align 8 + %358 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %359 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %358, i32 0, i32 0 + store ptr null, ptr %359, align 8 + %360 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %358, i32 0, i32 1 + store i64 0, ptr %360, align 4 + %361 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %358, align 8 + %362 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 2) + %363 = call %"github.com/goplus/llgo/internal/abi.StructField" @"github.com/goplus/llgo/internal/runtime.StructField"(%"github.com/goplus/llgo/internal/runtime.String" %357, ptr %362, i64 0, %"github.com/goplus/llgo/internal/runtime.String" %361, i1 false) + %364 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %365 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %364, i32 0, i32 0 + store ptr @8, ptr %365, align 8 + %366 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %364, i32 0, i32 1 + store i64 4, ptr %366, align 4 + %367 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %364, align 8 + %368 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocU"(i64 56) + %369 = getelementptr %"github.com/goplus/llgo/internal/abi.StructField", ptr %368, i64 0 + store %"github.com/goplus/llgo/internal/abi.StructField" %363, ptr %369, align 8 + %370 = alloca %"github.com/goplus/llgo/internal/runtime.Slice", align 8 + %371 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %370, i32 0, i32 0 + store ptr %368, ptr %371, align 8 + %372 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %370, i32 0, i32 1 + store i64 1, ptr %372, align 4 + %373 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %370, i32 0, i32 2 + store i64 1, ptr %373, align 4 + %374 = load %"github.com/goplus/llgo/internal/runtime.Slice", ptr %370, align 8 + %375 = call ptr @"github.com/goplus/llgo/internal/runtime.Struct"(%"github.com/goplus/llgo/internal/runtime.String" %367, i64 8, %"github.com/goplus/llgo/internal/runtime.Slice" %374) + %376 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.Type", ptr %375, i32 0, i32 6 + %377 = load i8, ptr %376, align 1 + %378 = or i8 %377, 32 + store i8 %378, ptr %376, align 1 + store ptr %375, ptr @"main.struct$eovYmOhZg4X0zMSsuscSshndnbbAGvB2E3cyG8E7Y4U", align 8 + %379 = load ptr, ptr @"main.struct$eovYmOhZg4X0zMSsuscSshndnbbAGvB2E3cyG8E7Y4U", align 8 + br i1 %349, label %_llgo_47, label %_llgo_48 + +_llgo_47: ; preds = %_llgo_46 + %380 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %381 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %380, i32 0, i32 0 + store ptr @9, ptr %381, align 8 + %382 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %380, i32 0, i32 1 + store i64 6, ptr %382, align 4 + %383 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %380, align 8 + %384 = load ptr, ptr @"_llgo_func$ETeB8WwW04JEq0ztcm-XPTJtuYvtpkjIsAc0-2NT9zA", align 8 + %385 = alloca %"github.com/goplus/llgo/internal/abi.Method", align 8 + %386 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.Method", ptr %385, i32 0, i32 0 + store %"github.com/goplus/llgo/internal/runtime.String" %383, ptr %386, align 8 + %387 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.Method", ptr %385, i32 0, i32 1 + store ptr %384, ptr %387, align 8 + %388 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.Method", ptr %385, i32 0, i32 2 + store ptr @"main.(*T5).Invoke", ptr %388, align 8 + %389 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.Method", ptr %385, i32 0, i32 3 + store ptr @"main.(*T5).Invoke", ptr %389, align 8 + %390 = load %"github.com/goplus/llgo/internal/abi.Method", ptr %385, align 8 + %391 = alloca %"github.com/goplus/llgo/internal/abi.Method", align 8 + %392 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.Method", ptr %391, i32 0, i32 0 + store %"github.com/goplus/llgo/internal/runtime.String" %383, ptr %392, align 8 + %393 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.Method", ptr %391, i32 0, i32 1 + store ptr %384, ptr %393, align 8 + %394 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.Method", ptr %391, i32 0, i32 2 + store ptr @"main.(*T5).Invoke", ptr %394, align 8 + %395 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.Method", ptr %391, i32 0, i32 3 + store ptr @main.T5.Invoke, ptr %395, align 8 + %396 = load %"github.com/goplus/llgo/internal/abi.Method", ptr %391, align 8 + %397 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocU"(i64 40) + %398 = getelementptr %"github.com/goplus/llgo/internal/abi.Method", ptr %397, i64 0 + store %"github.com/goplus/llgo/internal/abi.Method" %396, ptr %398, align 8 + %399 = alloca %"github.com/goplus/llgo/internal/runtime.Slice", align 8 + %400 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %399, i32 0, i32 0 + store ptr %397, ptr %400, align 8 + %401 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %399, i32 0, i32 1 + store i64 1, ptr %401, align 4 + %402 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %399, i32 0, i32 2 + store i64 1, ptr %402, align 4 + %403 = load %"github.com/goplus/llgo/internal/runtime.Slice", ptr %399, align 8 + %404 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocU"(i64 40) + %405 = getelementptr %"github.com/goplus/llgo/internal/abi.Method", ptr %404, i64 0 + store %"github.com/goplus/llgo/internal/abi.Method" %390, ptr %405, align 8 + %406 = alloca %"github.com/goplus/llgo/internal/runtime.Slice", align 8 + %407 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %406, i32 0, i32 0 + store ptr %404, ptr %407, align 8 + %408 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %406, i32 0, i32 1 + store i64 1, ptr %408, align 4 + %409 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %406, i32 0, i32 2 + store i64 1, ptr %409, align 4 + %410 = load %"github.com/goplus/llgo/internal/runtime.Slice", ptr %406, align 8 + %411 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %412 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %411, i32 0, i32 0 + store ptr @8, ptr %412, align 8 + %413 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %411, i32 0, i32 1 + store i64 4, ptr %413, align 4 + %414 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %411, align 8 + %415 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %416 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %415, i32 0, i32 0 + store ptr @17, ptr %416, align 8 + %417 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %415, i32 0, i32 1 + store i64 2, ptr %417, align 4 + %418 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %415, align 8 + call void @"github.com/goplus/llgo/internal/runtime.InitNamed"(ptr %350, %"github.com/goplus/llgo/internal/runtime.String" %414, %"github.com/goplus/llgo/internal/runtime.String" %418, ptr %379, %"github.com/goplus/llgo/internal/runtime.Slice" %403, %"github.com/goplus/llgo/internal/runtime.Slice" %410) + br label %_llgo_48 + +_llgo_48: ; preds = %_llgo_47, %_llgo_46 + %419 = load ptr, ptr @"*_llgo_main.T5", align 8 + %420 = icmp eq ptr %419, null + br i1 %420, label %_llgo_49, label %_llgo_50 + +_llgo_49: ; preds = %_llgo_48 + %421 = call ptr @"github.com/goplus/llgo/internal/runtime.PointerTo"(ptr %350) + call void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr %421) + store ptr %421, ptr @"*_llgo_main.T5", align 8 + br label %_llgo_50 + +_llgo_50: ; preds = %_llgo_49, %_llgo_48 + %422 = load ptr, ptr @"_llgo_func$ETeB8WwW04JEq0ztcm-XPTJtuYvtpkjIsAc0-2NT9zA", align 8 + %423 = load ptr, ptr @"_llgo_func$2_iS07vIlF2_rZqWB5eU0IvP_9HviM4MYZNkXZDvbac", align 8 + %424 = load ptr, ptr @"_llgo_iface$jwmSdgh1zvY_TDIgLzCkvkbiyrdwl9N806DH0JGcyMI", align 8 + %425 = icmp eq ptr %424, null + br i1 %425, label %_llgo_51, label %_llgo_52 + +_llgo_51: ; preds = %_llgo_50 + %426 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %427 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %426, i32 0, i32 0 + store ptr @9, ptr %427, align 8 + %428 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %426, i32 0, i32 1 + store i64 6, ptr %428, align 4 + %429 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %426, align 8 + %430 = alloca %"github.com/goplus/llgo/internal/abi.Imethod", align 8 + %431 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.Imethod", ptr %430, i32 0, i32 0 + store %"github.com/goplus/llgo/internal/runtime.String" %429, ptr %431, align 8 + %432 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.Imethod", ptr %430, i32 0, i32 1 + store ptr %422, ptr %432, align 8 + %433 = load %"github.com/goplus/llgo/internal/abi.Imethod", ptr %430, align 8 + %434 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %435 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %434, i32 0, i32 0 + store ptr @10, ptr %435, align 8 + %436 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %434, i32 0, i32 1 + store i64 6, ptr %436, align 4 + %437 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %434, align 8 + %438 = alloca %"github.com/goplus/llgo/internal/abi.Imethod", align 8 + %439 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.Imethod", ptr %438, i32 0, i32 0 + store %"github.com/goplus/llgo/internal/runtime.String" %437, ptr %439, align 8 + %440 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.Imethod", ptr %438, i32 0, i32 1 + store ptr %423, ptr %440, align 8 + %441 = load %"github.com/goplus/llgo/internal/abi.Imethod", ptr %438, align 8 + %442 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocU"(i64 48) + %443 = getelementptr %"github.com/goplus/llgo/internal/abi.Imethod", ptr %442, i64 0 + store %"github.com/goplus/llgo/internal/abi.Imethod" %433, ptr %443, align 8 + %444 = getelementptr %"github.com/goplus/llgo/internal/abi.Imethod", ptr %442, i64 1 + store %"github.com/goplus/llgo/internal/abi.Imethod" %441, ptr %444, align 8 + %445 = alloca %"github.com/goplus/llgo/internal/runtime.Slice", align 8 + %446 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %445, i32 0, i32 0 + store ptr %442, ptr %446, align 8 + %447 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %445, i32 0, i32 1 + store i64 2, ptr %447, align 4 + %448 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %445, i32 0, i32 2 + store i64 2, ptr %448, align 4 + %449 = load %"github.com/goplus/llgo/internal/runtime.Slice", ptr %445, align 8 + %450 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %451 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %450, i32 0, i32 0 + store ptr @8, ptr %451, align 8 + %452 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %450, i32 0, i32 1 + store i64 4, ptr %452, align 4 + %453 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %450, align 8 + %454 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %455 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %454, i32 0, i32 0 + store ptr null, ptr %455, align 8 + %456 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %454, i32 0, i32 1 + store i64 0, ptr %456, align 4 + %457 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %454, align 8 + %458 = call ptr @"github.com/goplus/llgo/internal/runtime.Interface"(%"github.com/goplus/llgo/internal/runtime.String" %453, %"github.com/goplus/llgo/internal/runtime.String" %457, %"github.com/goplus/llgo/internal/runtime.Slice" %449) + store ptr %458, ptr @"_llgo_iface$jwmSdgh1zvY_TDIgLzCkvkbiyrdwl9N806DH0JGcyMI", align 8 + br label %_llgo_52 + +_llgo_52: ; preds = %_llgo_51, %_llgo_50 + %459 = load ptr, ptr @"_llgo_func$ETeB8WwW04JEq0ztcm-XPTJtuYvtpkjIsAc0-2NT9zA", align 8 + %460 = load ptr, ptr @_llgo_main.I, align 8 + %461 = icmp eq ptr %460, null + br i1 %461, label %_llgo_53, label %_llgo_54 + +_llgo_53: ; preds = %_llgo_52 + %462 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %463 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %462, i32 0, i32 0 + store ptr @9, ptr %463, align 8 + %464 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %462, i32 0, i32 1 + store i64 6, ptr %464, align 4 + %465 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %462, align 8 + %466 = alloca %"github.com/goplus/llgo/internal/abi.Imethod", align 8 + %467 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.Imethod", ptr %466, i32 0, i32 0 + store %"github.com/goplus/llgo/internal/runtime.String" %465, ptr %467, align 8 + %468 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.Imethod", ptr %466, i32 0, i32 1 + store ptr %459, ptr %468, align 8 + %469 = load %"github.com/goplus/llgo/internal/abi.Imethod", ptr %466, align 8 + %470 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocU"(i64 24) + %471 = getelementptr %"github.com/goplus/llgo/internal/abi.Imethod", ptr %470, i64 0 + store %"github.com/goplus/llgo/internal/abi.Imethod" %469, ptr %471, align 8 + %472 = alloca %"github.com/goplus/llgo/internal/runtime.Slice", align 8 + %473 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %472, i32 0, i32 0 + store ptr %470, ptr %473, align 8 + %474 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %472, i32 0, i32 1 + store i64 1, ptr %474, align 4 + %475 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %472, i32 0, i32 2 + store i64 1, ptr %475, align 4 + %476 = load %"github.com/goplus/llgo/internal/runtime.Slice", ptr %472, align 8 + %477 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %478 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %477, i32 0, i32 0 + store ptr @8, ptr %478, align 8 + %479 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %477, i32 0, i32 1 + store i64 4, ptr %479, align 4 + %480 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %477, align 8 + %481 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %482 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %481, i32 0, i32 0 + store ptr @19, ptr %482, align 8 + %483 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %481, i32 0, i32 1 + store i64 6, ptr %483, align 4 + %484 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %481, align 8 + %485 = call ptr @"github.com/goplus/llgo/internal/runtime.Interface"(%"github.com/goplus/llgo/internal/runtime.String" %480, %"github.com/goplus/llgo/internal/runtime.String" %484, %"github.com/goplus/llgo/internal/runtime.Slice" %476) + store ptr %485, ptr @_llgo_main.I, align 8 + br label %_llgo_54 + +_llgo_54: ; preds = %_llgo_53, %_llgo_52 + %486 = load ptr, ptr @_llgo_string, align 8 + %487 = icmp eq ptr %486, null + br i1 %487, label %_llgo_55, label %_llgo_56 + +_llgo_55: ; preds = %_llgo_54 + %488 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 24) + store ptr %488, ptr @_llgo_string, align 8 + br label %_llgo_56 + +_llgo_56: ; preds = %_llgo_55, %_llgo_54 + %489 = load ptr, ptr @_llgo_any, align 8 + %490 = icmp eq ptr %489, null + br i1 %490, label %_llgo_57, label %_llgo_58 + +_llgo_57: ; preds = %_llgo_56 + %491 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocU"(i64 0) + %492 = alloca %"github.com/goplus/llgo/internal/runtime.Slice", align 8 + %493 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %492, i32 0, i32 0 + store ptr %491, ptr %493, align 8 + %494 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %492, i32 0, i32 1 + store i64 0, ptr %494, align 4 + %495 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %492, i32 0, i32 2 + store i64 0, ptr %495, align 4 + %496 = load %"github.com/goplus/llgo/internal/runtime.Slice", ptr %492, align 8 + %497 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %498 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %497, i32 0, i32 0 + store ptr @8, ptr %498, align 8 + %499 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %497, i32 0, i32 1 + store i64 4, ptr %499, align 4 + %500 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %497, align 8 + %501 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %502 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %501, i32 0, i32 0 + store ptr null, ptr %502, align 8 + %503 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %501, i32 0, i32 1 + store i64 0, ptr %503, align 4 + %504 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %501, align 8 + %505 = call ptr @"github.com/goplus/llgo/internal/runtime.Interface"(%"github.com/goplus/llgo/internal/runtime.String" %500, %"github.com/goplus/llgo/internal/runtime.String" %504, %"github.com/goplus/llgo/internal/runtime.Slice" %496) + store ptr %505, ptr @_llgo_any, align 8 + br label %_llgo_58 + +_llgo_58: ; preds = %_llgo_57, %_llgo_56 ret void } @@ -1164,12 +1529,16 @@ declare void @"github.com/goplus/llgo/internal/runtime.InitNamed"(ptr, %"github. declare ptr @"github.com/goplus/llgo/internal/runtime.Func"(%"github.com/goplus/llgo/internal/runtime.Slice", %"github.com/goplus/llgo/internal/runtime.Slice", i1) +declare void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr) + declare ptr @"github.com/goplus/llgo/internal/runtime.Interface"(%"github.com/goplus/llgo/internal/runtime.String", %"github.com/goplus/llgo/internal/runtime.String", %"github.com/goplus/llgo/internal/runtime.Slice") declare ptr @"github.com/goplus/llgo/internal/runtime.NewItab"(ptr, ptr) declare ptr @"github.com/goplus/llgo/internal/runtime.PointerTo"(ptr) +declare ptr @"github.com/goplus/llgo/internal/runtime.ArrayOf"(i64, ptr) + declare ptr @"github.com/goplus/llgo/internal/runtime.IfaceType"(%"github.com/goplus/llgo/internal/runtime.iface") declare void @"github.com/goplus/llgo/internal/runtime.PrintIface"(%"github.com/goplus/llgo/internal/runtime.iface") diff --git a/cl/_testgo/reader/out.ll b/cl/_testgo/reader/out.ll index 429257de..bc915e1f 100644 --- a/cl/_testgo/reader/out.ll +++ b/cl/_testgo/reader/out.ll @@ -1175,6 +1175,7 @@ _llgo_7: ; preds = %_llgo_6 store i64 1, ptr %29, align 4 %30 = load %"github.com/goplus/llgo/internal/runtime.Slice", ptr %26, align 8 %31 = call ptr @"github.com/goplus/llgo/internal/runtime.Func"(%"github.com/goplus/llgo/internal/runtime.Slice" %23, %"github.com/goplus/llgo/internal/runtime.Slice" %30, i1 false) + call void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr %31) store ptr %31, ptr @"_llgo_func$zNDVRsWTIpUPKouNUS805RGX--IV9qVK8B31IZbg5to", align 8 br label %_llgo_8 @@ -1256,6 +1257,7 @@ _llgo_11: ; preds = %_llgo_10 store i64 2, ptr %75, align 4 %76 = load %"github.com/goplus/llgo/internal/runtime.Slice", ptr %72, align 8 %77 = call ptr @"github.com/goplus/llgo/internal/runtime.Func"(%"github.com/goplus/llgo/internal/runtime.Slice" %68, %"github.com/goplus/llgo/internal/runtime.Slice" %76, i1 false) + call void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr %77) store ptr %77, ptr @"_llgo_func$06yPPin-fnDnxFKkLLcJ1GEUhIobjPimde7T_Id_hmY", align 8 br label %_llgo_12 @@ -1353,6 +1355,7 @@ _llgo_17: ; preds = %_llgo_16 store i64 2, ptr %129, align 4 %130 = load %"github.com/goplus/llgo/internal/runtime.Slice", ptr %126, align 8 %131 = call ptr @"github.com/goplus/llgo/internal/runtime.Func"(%"github.com/goplus/llgo/internal/runtime.Slice" %122, %"github.com/goplus/llgo/internal/runtime.Slice" %130, i1 false) + call void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr %131) store ptr %131, ptr @"_llgo_func$MrYxYl10p_I07B55pBsGw9la9zbzU2vGDPLWrT714Uk", align 8 br label %_llgo_18 @@ -1562,6 +1565,7 @@ _llgo_25: ; preds = %_llgo_24 store i64 1, ptr %254, align 4 %255 = load %"github.com/goplus/llgo/internal/runtime.Slice", ptr %251, align 8 %256 = call ptr @"github.com/goplus/llgo/internal/runtime.Func"(%"github.com/goplus/llgo/internal/runtime.Slice" %248, %"github.com/goplus/llgo/internal/runtime.Slice" %255, i1 false) + call void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr %256) store ptr %256, ptr @"_llgo_func$8rsrSd_r3UHd_2DiYTyaOKR7BYkei4zw5ysG35KF38w", align 8 br label %_llgo_26 @@ -1874,6 +1878,7 @@ _llgo_29: ; preds = %_llgo_28 store i64 2, ptr %445, align 4 %446 = load %"github.com/goplus/llgo/internal/runtime.Slice", ptr %442, align 8 %447 = call ptr @"github.com/goplus/llgo/internal/runtime.Func"(%"github.com/goplus/llgo/internal/runtime.Slice" %438, %"github.com/goplus/llgo/internal/runtime.Slice" %446, i1 false) + call void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr %447) store ptr %447, ptr @"_llgo_func$thH5FBpdXzJNnCpSfiLU5ItTntFU6LWp0RJhDm2XJjw", align 8 br label %_llgo_30 @@ -2071,6 +2076,7 @@ _llgo_35: ; preds = %_llgo_34 store i64 1, ptr %566, align 4 %567 = load %"github.com/goplus/llgo/internal/runtime.Slice", ptr %563, align 8 %568 = call ptr @"github.com/goplus/llgo/internal/runtime.Func"(%"github.com/goplus/llgo/internal/runtime.Slice" %560, %"github.com/goplus/llgo/internal/runtime.Slice" %567, i1 false) + call void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr %568) store ptr %568, ptr @"_llgo_func$ETeB8WwW04JEq0ztcm-XPTJtuYvtpkjIsAc0-2NT9zA", align 8 br label %_llgo_36 @@ -2145,6 +2151,7 @@ _llgo_37: ; preds = %_llgo_36 store i64 2, ptr %611, align 4 %612 = load %"github.com/goplus/llgo/internal/runtime.Slice", ptr %608, align 8 %613 = call ptr @"github.com/goplus/llgo/internal/runtime.Func"(%"github.com/goplus/llgo/internal/runtime.Slice" %604, %"github.com/goplus/llgo/internal/runtime.Slice" %612, i1 false) + call void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr %613) store ptr %613, ptr @"_llgo_func$TY5Etv7VBKM_-2um1BDEeQEE2lP06Pt6G54EuKiNC3c", align 8 br label %_llgo_38 @@ -2210,6 +2217,7 @@ _llgo_41: ; preds = %_llgo_40 store i64 2, ptr %647, align 4 %648 = load %"github.com/goplus/llgo/internal/runtime.Slice", ptr %644, align 8 %649 = call ptr @"github.com/goplus/llgo/internal/runtime.Func"(%"github.com/goplus/llgo/internal/runtime.Slice" %640, %"github.com/goplus/llgo/internal/runtime.Slice" %648, i1 false) + call void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr %649) store ptr %649, ptr @"_llgo_func$6bvVpCcGPUc3z_EmsQTHB0AVT1hP5-NNLVRgm43teCM", align 8 br label %_llgo_42 @@ -2278,6 +2286,7 @@ _llgo_45: ; preds = %_llgo_44 store i64 3, ptr %685, align 4 %686 = load %"github.com/goplus/llgo/internal/runtime.Slice", ptr %682, align 8 %687 = call ptr @"github.com/goplus/llgo/internal/runtime.Func"(%"github.com/goplus/llgo/internal/runtime.Slice" %677, %"github.com/goplus/llgo/internal/runtime.Slice" %686, i1 false) + call void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr %687) store ptr %687, ptr @"_llgo_func$CB0CO6hV_feSzhi4pz1P4omza2fKNK930wvOR1T33fU", align 8 br label %_llgo_46 @@ -2335,6 +2344,7 @@ _llgo_47: ; preds = %_llgo_46 store i64 2, ptr %719, align 4 %720 = load %"github.com/goplus/llgo/internal/runtime.Slice", ptr %716, align 8 %721 = call ptr @"github.com/goplus/llgo/internal/runtime.Func"(%"github.com/goplus/llgo/internal/runtime.Slice" %712, %"github.com/goplus/llgo/internal/runtime.Slice" %720, i1 false) + call void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr %721) store ptr %721, ptr @"_llgo_func$HE7H49xPa1uXmrkMDpqB3RCRGf3qzhLGrxKCEXOYjms", align 8 br label %_llgo_48 @@ -2383,6 +2393,7 @@ _llgo_49: ; preds = %_llgo_48 store i64 1, ptr %747, align 4 %748 = load %"github.com/goplus/llgo/internal/runtime.Slice", ptr %744, align 8 %749 = call ptr @"github.com/goplus/llgo/internal/runtime.Func"(%"github.com/goplus/llgo/internal/runtime.Slice" %741, %"github.com/goplus/llgo/internal/runtime.Slice" %748, i1 false) + call void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr %749) store ptr %749, ptr @"_llgo_func$Eoig9xhJM5GShHH5aNPxTZZXp1IZxprRl4zPuv2hkug", align 8 br label %_llgo_50 @@ -2492,6 +2503,7 @@ _llgo_50: ; preds = %_llgo_49, %_llgo_48 %813 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %810, align 8 call void @"github.com/goplus/llgo/internal/runtime.InitNamed"(ptr %502, %"github.com/goplus/llgo/internal/runtime.String" %809, %"github.com/goplus/llgo/internal/runtime.String" %813, ptr %547, { ptr, i64, i64 } zeroinitializer, %"github.com/goplus/llgo/internal/runtime.Slice" %805) %814 = call ptr @"github.com/goplus/llgo/internal/runtime.PointerTo"(ptr %502) + call void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr %814) store ptr %814, ptr @"*_llgo_main.stringReader", align 8 %815 = load ptr, ptr @"_llgo_func$06yPPin-fnDnxFKkLLcJ1GEUhIobjPimde7T_Id_hmY", align 8 %816 = load ptr, ptr @"_llgo_iface$OFO8Us9n8ajWCabGedeuoJ-Za2zAMk4Jh0FunAcUCFE", align 8 @@ -2617,6 +2629,7 @@ _llgo_52: ; preds = %_llgo_51, %_llgo_50 %891 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %888, align 8 call void @"github.com/goplus/llgo/internal/runtime.InitNamed"(ptr %842, %"github.com/goplus/llgo/internal/runtime.String" %887, %"github.com/goplus/llgo/internal/runtime.String" %891, ptr %865, { ptr, i64, i64 } zeroinitializer, %"github.com/goplus/llgo/internal/runtime.Slice" %883) %892 = call ptr @"github.com/goplus/llgo/internal/runtime.PointerTo"(ptr %842) + call void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr %892) store ptr %892, ptr @"*_llgo_main.errorString", align 8 %893 = load ptr, ptr @"_llgo_func$zNDVRsWTIpUPKouNUS805RGX--IV9qVK8B31IZbg5to", align 8 %894 = load ptr, ptr @"_llgo_iface$Fh8eUJ-Gw4e6TYuajcFIOSCuqSPKAt5nS4ow7xeGXEU", align 8 @@ -2675,6 +2688,8 @@ declare ptr @"github.com/goplus/llgo/internal/runtime.Func"(%"github.com/goplus/ declare ptr @"github.com/goplus/llgo/internal/runtime.AllocU"(i64) +declare void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr) + declare ptr @"github.com/goplus/llgo/internal/runtime.Interface"(%"github.com/goplus/llgo/internal/runtime.String", %"github.com/goplus/llgo/internal/runtime.String", %"github.com/goplus/llgo/internal/runtime.Slice") declare i1 @"github.com/goplus/llgo/internal/runtime.Implements"(ptr, ptr) diff --git a/cl/_testgo/struczero/out.ll b/cl/_testgo/struczero/out.ll index 081ead9d..4573163a 100644 --- a/cl/_testgo/struczero/out.ll +++ b/cl/_testgo/struczero/out.ll @@ -340,6 +340,7 @@ _llgo_6: ; preds = %_llgo_5, %_llgo_3 _llgo_7: ; preds = %_llgo_6 %94 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 8) %95 = call ptr @"github.com/goplus/llgo/internal/runtime.PointerTo"(ptr %94) + call void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr %95) store ptr %95, ptr @"*_llgo_byte", align 8 br label %_llgo_8 @@ -371,6 +372,7 @@ _llgo_9: ; preds = %_llgo_8 store i64 1, ptr %110, align 4 %111 = load %"github.com/goplus/llgo/internal/runtime.Slice", ptr %107, align 8 %112 = call ptr @"github.com/goplus/llgo/internal/runtime.Func"(%"github.com/goplus/llgo/internal/runtime.Slice" %104, %"github.com/goplus/llgo/internal/runtime.Slice" %111, i1 false) + call void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr %112) store ptr %112, ptr @"_llgo_func$NfGSLZ1QiKRoFkKeqYSXE5hUU5bpeteSJKrbMNUzYRE", align 8 br label %_llgo_10 @@ -448,6 +450,8 @@ declare ptr @"github.com/goplus/llgo/internal/runtime.AllocU"(i64) declare void @"github.com/goplus/llgo/internal/runtime.InitNamed"(ptr, %"github.com/goplus/llgo/internal/runtime.String", %"github.com/goplus/llgo/internal/runtime.String", ptr, %"github.com/goplus/llgo/internal/runtime.Slice", %"github.com/goplus/llgo/internal/runtime.Slice") +declare void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr) + declare ptr @"github.com/goplus/llgo/internal/runtime.Func"(%"github.com/goplus/llgo/internal/runtime.Slice", %"github.com/goplus/llgo/internal/runtime.Slice", i1) declare ptr @"github.com/goplus/llgo/cl/internal/foo.(*Foo).Pb"(ptr) diff --git a/cl/_testrt/abinamed/out.ll b/cl/_testrt/abinamed/out.ll index 586b87b0..fa0bd4b7 100644 --- a/cl/_testrt/abinamed/out.ll +++ b/cl/_testrt/abinamed/out.ll @@ -567,6 +567,7 @@ _llgo_6: ; preds = %_llgo_5, %_llgo_4 _llgo_7: ; preds = %_llgo_6 %72 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 26) + call void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr %72) store ptr %72, ptr @_llgo_Pointer, align 8 br label %_llgo_8 @@ -918,6 +919,7 @@ _llgo_17: ; preds = %_llgo_16 store i64 1, ptr %291, align 4 %292 = load %"github.com/goplus/llgo/internal/runtime.Slice", ptr %288, align 8 %293 = call ptr @"github.com/goplus/llgo/internal/runtime.Func"(%"github.com/goplus/llgo/internal/runtime.Slice" %285, %"github.com/goplus/llgo/internal/runtime.Slice" %292, i1 false) + call void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr %293) store ptr %293, ptr @"_llgo_func$ETeB8WwW04JEq0ztcm-XPTJtuYvtpkjIsAc0-2NT9zA", align 8 br label %_llgo_18 @@ -1092,6 +1094,7 @@ _llgo_24: ; preds = %_llgo_100, %_llgo_2 _llgo_25: ; preds = %_llgo_23 %395 = call ptr @"github.com/goplus/llgo/internal/runtime.PointerTo"(ptr %21) + call void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr %395) store ptr %395, ptr @"*_llgo_github.com/goplus/llgo/internal/abi.Type", align 8 br label %_llgo_26 @@ -1123,6 +1126,7 @@ _llgo_27: ; preds = %_llgo_26 store i64 1, ptr %410, align 4 %411 = load %"github.com/goplus/llgo/internal/runtime.Slice", ptr %407, align 8 %412 = call ptr @"github.com/goplus/llgo/internal/runtime.Func"(%"github.com/goplus/llgo/internal/runtime.Slice" %404, %"github.com/goplus/llgo/internal/runtime.Slice" %411, i1 false) + call void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr %412) store ptr %412, ptr @"_llgo_func$4-mqItKfDlL0CgVKnUxoresYgh6zW1WSlZYZSsVzLRo", align 8 br label %_llgo_28 @@ -1389,6 +1393,7 @@ _llgo_35: ; preds = %_llgo_33 store i64 1, ptr %572, align 4 %573 = load %"github.com/goplus/llgo/internal/runtime.Slice", ptr %569, align 8 %574 = call ptr @"github.com/goplus/llgo/internal/runtime.Func"(%"github.com/goplus/llgo/internal/runtime.Slice" %566, %"github.com/goplus/llgo/internal/runtime.Slice" %573, i1 false) + call void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr %574) store ptr %574, ptr @"_llgo_func$YHeRw3AOvQtzv982-ZO3Yn8vh3Fx89RM3VvI8E4iKVk", align 8 br label %_llgo_36 @@ -1776,6 +1781,7 @@ _llgo_51: ; preds = %_llgo_50 store i64 1, ptr %800, align 4 %801 = load %"github.com/goplus/llgo/internal/runtime.Slice", ptr %797, align 8 %802 = call ptr @"github.com/goplus/llgo/internal/runtime.Func"(%"github.com/goplus/llgo/internal/runtime.Slice" %794, %"github.com/goplus/llgo/internal/runtime.Slice" %801, i1 false) + call void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr %802) store ptr %802, ptr @"_llgo_func$zNDVRsWTIpUPKouNUS805RGX--IV9qVK8B31IZbg5to", align 8 br label %_llgo_52 @@ -1860,6 +1866,7 @@ _llgo_53: ; preds = %_llgo_48 store i64 1, ptr %849, align 4 %850 = load %"github.com/goplus/llgo/internal/runtime.Slice", ptr %846, align 8 %851 = call ptr @"github.com/goplus/llgo/internal/runtime.Func"(%"github.com/goplus/llgo/internal/runtime.Slice" %843, %"github.com/goplus/llgo/internal/runtime.Slice" %850, i1 false) + call void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr %851) store ptr %851, ptr @"_llgo_func$ntUE0UmVAWPS2O7GpCCGszSn-XnjHJntZZ2jYtwbFXI", align 8 br label %_llgo_54 @@ -2515,6 +2522,7 @@ _llgo_63: ; preds = %_llgo_61 store i64 1, ptr %1265, align 4 %1266 = load %"github.com/goplus/llgo/internal/runtime.Slice", ptr %1262, align 8 %1267 = call ptr @"github.com/goplus/llgo/internal/runtime.Func"(%"github.com/goplus/llgo/internal/runtime.Slice" %1259, %"github.com/goplus/llgo/internal/runtime.Slice" %1266, i1 false) + call void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr %1267) store ptr %1267, ptr @"_llgo_func$1kITCsyu7hFLMxHLR7kDlvu4SOra_HtrtdFUQH9P13s", align 8 br label %_llgo_64 @@ -3092,6 +3100,7 @@ _llgo_79: ; preds = %_llgo_78 store i64 1, ptr %1618, align 4 %1619 = load %"github.com/goplus/llgo/internal/runtime.Slice", ptr %1615, align 8 %1620 = call ptr @"github.com/goplus/llgo/internal/runtime.Func"(%"github.com/goplus/llgo/internal/runtime.Slice" %1612, %"github.com/goplus/llgo/internal/runtime.Slice" %1619, i1 false) + call void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr %1620) store ptr %1620, ptr @"_llgo_func$r0w3aCNVheLGqjxncuxitGhNtWJagb9gZLqOSrNI7dg", align 8 br label %_llgo_80 @@ -3154,6 +3163,7 @@ _llgo_80: ; preds = %_llgo_79, %_llgo_78 _llgo_81: ; preds = %_llgo_76 %1655 = call ptr @"github.com/goplus/llgo/internal/runtime.PointerTo"(ptr %1535) + call void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr %1655) store ptr %1655, ptr @"*_llgo_github.com/goplus/llgo/internal/abi.UncommonType", align 8 br label %_llgo_82 @@ -3185,6 +3195,7 @@ _llgo_83: ; preds = %_llgo_82 store i64 1, ptr %1670, align 4 %1671 = load %"github.com/goplus/llgo/internal/runtime.Slice", ptr %1667, align 8 %1672 = call ptr @"github.com/goplus/llgo/internal/runtime.Func"(%"github.com/goplus/llgo/internal/runtime.Slice" %1664, %"github.com/goplus/llgo/internal/runtime.Slice" %1671, i1 false) + call void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr %1672) store ptr %1672, ptr @"_llgo_func$DbD4nZv_bjE4tH8hh-VfAjMXMpNfIsMlLJJJPKupp34", align 8 br label %_llgo_84 @@ -3262,6 +3273,7 @@ _llgo_84: ; preds = %_llgo_83, %_llgo_82 _llgo_85: ; preds = %_llgo_70 %1712 = call ptr @"github.com/goplus/llgo/internal/runtime.PointerTo"(ptr %1292) + call void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr %1712) store ptr %1712, ptr @"*_llgo_github.com/goplus/llgo/internal/abi.StructType", align 8 br label %_llgo_86 @@ -3293,6 +3305,7 @@ _llgo_87: ; preds = %_llgo_86 store i64 1, ptr %1727, align 4 %1728 = load %"github.com/goplus/llgo/internal/runtime.Slice", ptr %1724, align 8 %1729 = call ptr @"github.com/goplus/llgo/internal/runtime.Func"(%"github.com/goplus/llgo/internal/runtime.Slice" %1721, %"github.com/goplus/llgo/internal/runtime.Slice" %1728, i1 false) + call void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr %1729) store ptr %1729, ptr @"_llgo_func$qiNnn6Cbm3GtDp4gDI4U_DRV3h8zlz91s9jrfOXC--U", align 8 br label %_llgo_88 @@ -3395,6 +3408,7 @@ _llgo_88: ; preds = %_llgo_87, %_llgo_86 _llgo_89: ; preds = %_llgo_62 %1784 = call ptr @"github.com/goplus/llgo/internal/runtime.PointerTo"(ptr %876) + call void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr %1784) store ptr %1784, ptr @"*_llgo_github.com/goplus/llgo/internal/abi.MapType", align 8 br label %_llgo_90 @@ -3426,6 +3440,7 @@ _llgo_91: ; preds = %_llgo_90 store i64 1, ptr %1799, align 4 %1800 = load %"github.com/goplus/llgo/internal/runtime.Slice", ptr %1796, align 8 %1801 = call ptr @"github.com/goplus/llgo/internal/runtime.Func"(%"github.com/goplus/llgo/internal/runtime.Slice" %1793, %"github.com/goplus/llgo/internal/runtime.Slice" %1800, i1 false) + call void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr %1801) store ptr %1801, ptr @"_llgo_func$d-NlqnjcQnaMjsBQY7qh2SWQmHb0XIigoceXdiJ8YT4", align 8 br label %_llgo_92 @@ -3588,6 +3603,7 @@ _llgo_92: ; preds = %_llgo_91, %_llgo_90 _llgo_93: ; preds = %_llgo_42 %1896 = call ptr @"github.com/goplus/llgo/internal/runtime.PointerTo"(ptr %599) + call void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr %1896) store ptr %1896, ptr @"*_llgo_github.com/goplus/llgo/internal/abi.InterfaceType", align 8 br label %_llgo_94 @@ -3619,6 +3635,7 @@ _llgo_95: ; preds = %_llgo_94 store i64 1, ptr %1911, align 4 %1912 = load %"github.com/goplus/llgo/internal/runtime.Slice", ptr %1908, align 8 %1913 = call ptr @"github.com/goplus/llgo/internal/runtime.Func"(%"github.com/goplus/llgo/internal/runtime.Slice" %1905, %"github.com/goplus/llgo/internal/runtime.Slice" %1912, i1 false) + call void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr %1913) store ptr %1913, ptr @"_llgo_func$1QmforOaCy2fBAssC2y1FWCCT6fpq9RKwP2j2HIASY8", align 8 br label %_llgo_96 @@ -3868,6 +3885,7 @@ _llgo_96: ; preds = %_llgo_95, %_llgo_94 _llgo_97: ; preds = %_llgo_34 %2064 = call ptr @"github.com/goplus/llgo/internal/runtime.PointerTo"(ptr %437) + call void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr %2064) store ptr %2064, ptr @"*_llgo_github.com/goplus/llgo/internal/abi.FuncType", align 8 br label %_llgo_98 @@ -3899,6 +3917,7 @@ _llgo_99: ; preds = %_llgo_98 store i64 1, ptr %2079, align 4 %2080 = load %"github.com/goplus/llgo/internal/runtime.Slice", ptr %2076, align 8 %2081 = call ptr @"github.com/goplus/llgo/internal/runtime.Func"(%"github.com/goplus/llgo/internal/runtime.Slice" %2073, %"github.com/goplus/llgo/internal/runtime.Slice" %2080, i1 false) + call void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr %2081) store ptr %2081, ptr @"_llgo_func$DsoxgOnxqV7tLvokF3AA14v1gtHsHaThoC8Q_XGcQww", align 8 br label %_llgo_100 @@ -4159,6 +4178,7 @@ _llgo_100: ; preds = %_llgo_99, %_llgo_98 _llgo_101: ; preds = %_llgo_24 %2240 = call ptr @"github.com/goplus/llgo/internal/runtime.PointerTo"(ptr %307) + call void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr %2240) store ptr %2240, ptr @"*_llgo_github.com/goplus/llgo/internal/abi.ArrayType", align 8 br label %_llgo_102 @@ -4190,6 +4210,7 @@ _llgo_103: ; preds = %_llgo_102 store i64 1, ptr %2255, align 4 %2256 = load %"github.com/goplus/llgo/internal/runtime.Slice", ptr %2252, align 8 %2257 = call ptr @"github.com/goplus/llgo/internal/runtime.Func"(%"github.com/goplus/llgo/internal/runtime.Slice" %2249, %"github.com/goplus/llgo/internal/runtime.Slice" %2256, i1 false) + call void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr %2257) store ptr %2257, ptr @"_llgo_func$CsVqlCxhoEcIvPD5BSBukfSiD9C7Ic5_Gf32MLbCWB4", align 8 br label %_llgo_104 @@ -4554,6 +4575,8 @@ declare ptr @"github.com/goplus/llgo/internal/runtime.AllocU"(i64) declare void @"github.com/goplus/llgo/internal/runtime.InitNamed"(ptr, %"github.com/goplus/llgo/internal/runtime.String", %"github.com/goplus/llgo/internal/runtime.String", ptr, %"github.com/goplus/llgo/internal/runtime.Slice", %"github.com/goplus/llgo/internal/runtime.Slice") +declare void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr) + declare ptr @"github.com/goplus/llgo/internal/runtime.Func"(%"github.com/goplus/llgo/internal/runtime.Slice", %"github.com/goplus/llgo/internal/runtime.Slice", i1) declare i64 @"github.com/goplus/llgo/internal/abi.(*Type).Align"(ptr) diff --git a/cl/_testrt/any/out.ll b/cl/_testrt/any/out.ll index fd857bcc..832af34c 100644 --- a/cl/_testrt/any/out.ll +++ b/cl/_testrt/any/out.ll @@ -143,6 +143,7 @@ _llgo_2: ; preds = %_llgo_1, %_llgo_0 _llgo_3: ; preds = %_llgo_2 %8 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 3) %9 = call ptr @"github.com/goplus/llgo/internal/runtime.PointerTo"(ptr %8) + call void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr %9) store ptr %9, ptr @"*_llgo_int8", align 8 br label %_llgo_4 @@ -178,6 +179,8 @@ declare ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64) declare ptr @"github.com/goplus/llgo/internal/runtime.PointerTo"(ptr) +declare void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr) + declare ptr @"github.com/goplus/llgo/internal/runtime.AllocU"(i64) declare void @"github.com/goplus/llgo/internal/runtime.Panic"(%"github.com/goplus/llgo/internal/runtime.eface") diff --git a/cl/_testrt/eface/out.ll b/cl/_testrt/eface/out.ll index 48716f68..26a60cc2 100644 --- a/cl/_testrt/eface/out.ll +++ b/cl/_testrt/eface/out.ll @@ -668,6 +668,7 @@ _llgo_31: ; preds = %_llgo_30 store i64 0, ptr %100, align 4 %101 = load %"github.com/goplus/llgo/internal/runtime.Slice", ptr %97, align 8 %102 = call ptr @"github.com/goplus/llgo/internal/runtime.Func"(%"github.com/goplus/llgo/internal/runtime.Slice" %95, %"github.com/goplus/llgo/internal/runtime.Slice" %101, i1 false) + call void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr %102) store ptr %102, ptr @"_llgo_func$2_iS07vIlF2_rZqWB5eU0IvP_9HviM4MYZNkXZDvbac", align 8 br label %_llgo_32 @@ -679,6 +680,7 @@ _llgo_32: ; preds = %_llgo_31, %_llgo_30 _llgo_33: ; preds = %_llgo_32 %105 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 2) %106 = call ptr @"github.com/goplus/llgo/internal/runtime.PointerTo"(ptr %105) + call void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr %106) store ptr %106, ptr @"*_llgo_int", align 8 br label %_llgo_34 @@ -838,6 +840,8 @@ declare ptr @"github.com/goplus/llgo/internal/runtime.AllocU"(i64) declare ptr @"github.com/goplus/llgo/internal/runtime.Func"(%"github.com/goplus/llgo/internal/runtime.Slice", %"github.com/goplus/llgo/internal/runtime.Slice", i1) +declare void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr) + declare ptr @"github.com/goplus/llgo/internal/runtime.PointerTo"(ptr) declare ptr @"github.com/goplus/llgo/internal/runtime.SliceOf"(ptr) diff --git a/cl/_testrt/makemap/in.go b/cl/_testrt/makemap/in.go index 2d43a0da..4cf5ce72 100644 --- a/cl/_testrt/makemap/in.go +++ b/cl/_testrt/makemap/in.go @@ -5,6 +5,7 @@ func main() { make2() make3() make4() + make5() } func make1() { @@ -87,3 +88,16 @@ func make4() { println(k.(K2)[0].n1, v) } } + +func make5() { + ch := make(chan int) + var a any = ch + var b any = ch + println(a == b) + m := make(map[chan int]int) + m[ch] = 100 + m[ch] = 200 + for k, v := range m { + println(k, v) + } +} diff --git a/cl/_testrt/makemap/out.ll b/cl/_testrt/makemap/out.ll index 4cbe40c9..f1ba787e 100644 --- a/cl/_testrt/makemap/out.ll +++ b/cl/_testrt/makemap/out.ll @@ -44,6 +44,9 @@ source_filename = "main" @"*_llgo_main.N" = linkonce global ptr null, align 8 @"[1]*_llgo_main.N" = linkonce global ptr null, align 8 @18 = private unnamed_addr constant [2 x i8] c"K2", align 1 +@"chan _llgo_int" = linkonce global ptr null, align 8 +@19 = private unnamed_addr constant [4 x i8] c"chan", align 1 +@"map[chan _llgo_int]_llgo_int" = linkonce global ptr null, align 8 define void @main.init() { _llgo_0: @@ -69,6 +72,7 @@ _llgo_0: call void @main.make2() call void @main.make3() call void @main.make4() + call void @main.make5() ret i32 0 } @@ -908,6 +912,91 @@ _llgo_8: ; preds = %_llgo_2 unreachable } +define void @main.make5() { +_llgo_0: + %0 = call ptr @"github.com/goplus/llgo/internal/runtime.NewChan"(i64 8, i64 0) + %1 = load ptr, ptr @"chan _llgo_int", align 8 + %2 = alloca %"github.com/goplus/llgo/internal/runtime.eface", align 8 + %3 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %2, i32 0, i32 0 + store ptr %1, ptr %3, align 8 + %4 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %2, i32 0, i32 1 + store ptr %0, ptr %4, align 8 + %5 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %2, align 8 + %6 = load ptr, ptr @"chan _llgo_int", align 8 + %7 = alloca %"github.com/goplus/llgo/internal/runtime.eface", align 8 + %8 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %7, i32 0, i32 0 + store ptr %6, ptr %8, align 8 + %9 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %7, i32 0, i32 1 + store ptr %0, ptr %9, align 8 + %10 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %7, align 8 + %11 = call i1 @"github.com/goplus/llgo/internal/runtime.EfaceEqual"(%"github.com/goplus/llgo/internal/runtime.eface" %5, %"github.com/goplus/llgo/internal/runtime.eface" %10) + call void @"github.com/goplus/llgo/internal/runtime.PrintBool"(i1 %11) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 10) + %12 = load ptr, ptr @"map[chan _llgo_int]_llgo_int", align 8 + %13 = call ptr @"github.com/goplus/llgo/internal/runtime.MakeMap"(ptr %12, i64 0) + %14 = load ptr, ptr @"map[chan _llgo_int]_llgo_int", align 8 + %15 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocU"(i64 8) + store ptr %0, ptr %15, align 8 + %16 = call ptr @"github.com/goplus/llgo/internal/runtime.MapAssign"(ptr %14, ptr %13, ptr %15) + store i64 100, ptr %16, align 4 + %17 = load ptr, ptr @"map[chan _llgo_int]_llgo_int", align 8 + %18 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocU"(i64 8) + store ptr %0, ptr %18, align 8 + %19 = call ptr @"github.com/goplus/llgo/internal/runtime.MapAssign"(ptr %17, ptr %13, ptr %18) + store i64 200, ptr %19, align 4 + %20 = load ptr, ptr @"map[chan _llgo_int]_llgo_int", align 8 + %21 = call ptr @"github.com/goplus/llgo/internal/runtime.NewMapIter"(ptr %20, ptr %13) + br label %_llgo_1 + +_llgo_1: ; preds = %_llgo_2, %_llgo_0 + %22 = call { i1, ptr, ptr } @"github.com/goplus/llgo/internal/runtime.MapIterNext"(ptr %21) + %23 = extractvalue { i1, ptr, ptr } %22, 0 + br i1 %23, label %_llgo_4, label %_llgo_5 + +_llgo_2: ; preds = %_llgo_6 + %24 = extractvalue { i1, ptr, i64 } %40, 1 + %25 = extractvalue { i1, ptr, i64 } %40, 2 + call void @"github.com/goplus/llgo/internal/runtime.PrintPointer"(ptr %24) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) + call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %25) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 10) + br label %_llgo_1 + +_llgo_3: ; preds = %_llgo_6 + ret void + +_llgo_4: ; preds = %_llgo_1 + %26 = extractvalue { i1, ptr, ptr } %22, 1 + %27 = extractvalue { i1, ptr, ptr } %22, 2 + %28 = load ptr, ptr %26, align 8 + %29 = load i64, ptr %27, align 4 + %30 = alloca { i1, ptr, i64 }, align 8 + %31 = getelementptr inbounds { i1, ptr, i64 }, ptr %30, i32 0, i32 0 + store i1 true, ptr %31, align 1 + %32 = getelementptr inbounds { i1, ptr, i64 }, ptr %30, i32 0, i32 1 + store ptr %28, ptr %32, align 8 + %33 = getelementptr inbounds { i1, ptr, i64 }, ptr %30, i32 0, i32 2 + store i64 %29, ptr %33, align 4 + %34 = load { i1, ptr, i64 }, ptr %30, align 8 + br label %_llgo_6 + +_llgo_5: ; preds = %_llgo_1 + %35 = alloca { i1, ptr, i64 }, align 8 + %36 = getelementptr inbounds { i1, ptr, i64 }, ptr %35, i32 0, i32 0 + store i1 false, ptr %36, align 1 + %37 = getelementptr inbounds { i1, ptr, i64 }, ptr %35, i32 0, i32 1 + store ptr null, ptr %37, align 8 + %38 = getelementptr inbounds { i1, ptr, i64 }, ptr %35, i32 0, i32 2 + store i64 0, ptr %38, align 4 + %39 = load { i1, ptr, i64 }, ptr %35, align 8 + br label %_llgo_6 + +_llgo_6: ; preds = %_llgo_5, %_llgo_4 + %40 = phi { i1, ptr, i64 } [ %34, %_llgo_4 ], [ %39, %_llgo_5 ] + %41 = extractvalue { i1, ptr, i64 } %40, 0 + br i1 %41, label %_llgo_2, label %_llgo_3 +} + declare void @"github.com/goplus/llgo/internal/runtime.init"() define void @"main.init$after"() { @@ -1003,6 +1092,7 @@ _llgo_1: ; preds = %_llgo_0 %60 = load %"github.com/goplus/llgo/internal/runtime.Slice", ptr %56, align 8 %61 = call ptr @"github.com/goplus/llgo/internal/runtime.Struct"(%"github.com/goplus/llgo/internal/runtime.String" %50, i64 208, %"github.com/goplus/llgo/internal/runtime.Slice" %60) %62 = call ptr @"github.com/goplus/llgo/internal/runtime.MapOf"(ptr %2, ptr %3, ptr %61, i64 4) + call void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr %62) store ptr %62, ptr @"map[_llgo_int]_llgo_string", align 8 br label %_llgo_2 @@ -1098,6 +1188,7 @@ _llgo_3: ; preds = %_llgo_2 %123 = load %"github.com/goplus/llgo/internal/runtime.Slice", ptr %119, align 8 %124 = call ptr @"github.com/goplus/llgo/internal/runtime.Struct"(%"github.com/goplus/llgo/internal/runtime.String" %113, i64 208, %"github.com/goplus/llgo/internal/runtime.Slice" %123) %125 = call ptr @"github.com/goplus/llgo/internal/runtime.MapOf"(ptr %65, ptr %66, ptr %124, i64 12) + call void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr %125) store ptr %125, ptr @"map[_llgo_string]_llgo_int", align 8 br label %_llgo_4 @@ -1245,6 +1336,7 @@ _llgo_7: ; preds = %_llgo_6 %217 = load %"github.com/goplus/llgo/internal/runtime.Slice", ptr %213, align 8 %218 = call ptr @"github.com/goplus/llgo/internal/runtime.Struct"(%"github.com/goplus/llgo/internal/runtime.String" %207, i64 208, %"github.com/goplus/llgo/internal/runtime.Slice" %217) %219 = call ptr @"github.com/goplus/llgo/internal/runtime.MapOf"(ptr %145, ptr %146, ptr %218, i64 24) + call void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr %219) store ptr %219, ptr @"map[_llgo_any]_llgo_int", align 8 br label %_llgo_8 @@ -1450,6 +1542,7 @@ _llgo_28: ; preds = %_llgo_27, %_llgo_26 _llgo_29: ; preds = %_llgo_28 %315 = call ptr @"github.com/goplus/llgo/internal/runtime.PointerTo"(ptr %254) + call void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr %315) store ptr %315, ptr @"*_llgo_main.N", align 8 br label %_llgo_30 @@ -1487,6 +1580,134 @@ _llgo_33: ; preds = %_llgo_32 br label %_llgo_34 _llgo_34: ; preds = %_llgo_33, %_llgo_32 + %330 = load ptr, ptr @"chan _llgo_int", align 8 + %331 = icmp eq ptr %330, null + br i1 %331, label %_llgo_35, label %_llgo_36 + +_llgo_35: ; preds = %_llgo_34 + %332 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %333 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %332, i32 0, i32 0 + store ptr @19, ptr %333, align 8 + %334 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %332, i32 0, i32 1 + store i64 4, ptr %334, align 4 + %335 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %332, align 8 + %336 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 2) + %337 = call ptr @"github.com/goplus/llgo/internal/runtime.ChanOf"(i64 3, %"github.com/goplus/llgo/internal/runtime.String" %335, ptr %336) + call void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr %337) + store ptr %337, ptr @"chan _llgo_int", align 8 + br label %_llgo_36 + +_llgo_36: ; preds = %_llgo_35, %_llgo_34 + %338 = load ptr, ptr @"map[chan _llgo_int]_llgo_int", align 8 + %339 = icmp eq ptr %338, null + br i1 %339, label %_llgo_37, label %_llgo_38 + +_llgo_37: ; preds = %_llgo_36 + %340 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %341 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %340, i32 0, i32 0 + store ptr @19, ptr %341, align 8 + %342 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %340, i32 0, i32 1 + store i64 4, ptr %342, align 4 + %343 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %340, align 8 + %344 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 2) + %345 = call ptr @"github.com/goplus/llgo/internal/runtime.ChanOf"(i64 3, %"github.com/goplus/llgo/internal/runtime.String" %343, ptr %344) + %346 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 2) + %347 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %348 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %347, i32 0, i32 0 + store ptr @0, ptr %348, align 8 + %349 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %347, i32 0, i32 1 + store i64 7, ptr %349, align 4 + %350 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %347, align 8 + %351 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %352 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %351, i32 0, i32 0 + store ptr null, ptr %352, align 8 + %353 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %351, i32 0, i32 1 + store i64 0, ptr %353, align 4 + %354 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %351, align 8 + %355 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 8) + %356 = call ptr @"github.com/goplus/llgo/internal/runtime.ArrayOf"(i64 8, ptr %355) + %357 = call %"github.com/goplus/llgo/internal/abi.StructField" @"github.com/goplus/llgo/internal/runtime.StructField"(%"github.com/goplus/llgo/internal/runtime.String" %350, ptr %356, i64 0, %"github.com/goplus/llgo/internal/runtime.String" %354, i1 false) + %358 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %359 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %358, i32 0, i32 0 + store ptr @1, ptr %359, align 8 + %360 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %358, i32 0, i32 1 + store i64 4, ptr %360, align 4 + %361 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %358, align 8 + %362 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %363 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %362, i32 0, i32 0 + store ptr null, ptr %363, align 8 + %364 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %362, i32 0, i32 1 + store i64 0, ptr %364, align 4 + %365 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %362, align 8 + %366 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %367 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %366, i32 0, i32 0 + store ptr @19, ptr %367, align 8 + %368 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %366, i32 0, i32 1 + store i64 4, ptr %368, align 4 + %369 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %366, align 8 + %370 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 2) + %371 = call ptr @"github.com/goplus/llgo/internal/runtime.ChanOf"(i64 3, %"github.com/goplus/llgo/internal/runtime.String" %369, ptr %370) + %372 = call ptr @"github.com/goplus/llgo/internal/runtime.ArrayOf"(i64 8, ptr %371) + %373 = call %"github.com/goplus/llgo/internal/abi.StructField" @"github.com/goplus/llgo/internal/runtime.StructField"(%"github.com/goplus/llgo/internal/runtime.String" %361, ptr %372, i64 8, %"github.com/goplus/llgo/internal/runtime.String" %365, i1 false) + %374 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %375 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %374, i32 0, i32 0 + store ptr @2, ptr %375, align 8 + %376 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %374, i32 0, i32 1 + store i64 5, ptr %376, align 4 + %377 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %374, align 8 + %378 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %379 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %378, i32 0, i32 0 + store ptr null, ptr %379, align 8 + %380 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %378, i32 0, i32 1 + store i64 0, ptr %380, align 4 + %381 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %378, align 8 + %382 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 2) + %383 = call ptr @"github.com/goplus/llgo/internal/runtime.ArrayOf"(i64 8, ptr %382) + %384 = call %"github.com/goplus/llgo/internal/abi.StructField" @"github.com/goplus/llgo/internal/runtime.StructField"(%"github.com/goplus/llgo/internal/runtime.String" %377, ptr %383, i64 72, %"github.com/goplus/llgo/internal/runtime.String" %381, i1 false) + %385 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %386 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %385, i32 0, i32 0 + store ptr @3, ptr %386, align 8 + %387 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %385, i32 0, i32 1 + store i64 8, ptr %387, align 4 + %388 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %385, align 8 + %389 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %390 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %389, i32 0, i32 0 + store ptr null, ptr %390, align 8 + %391 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %389, i32 0, i32 1 + store i64 0, ptr %391, align 4 + %392 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %389, align 8 + %393 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 26) + %394 = call %"github.com/goplus/llgo/internal/abi.StructField" @"github.com/goplus/llgo/internal/runtime.StructField"(%"github.com/goplus/llgo/internal/runtime.String" %388, ptr %393, i64 136, %"github.com/goplus/llgo/internal/runtime.String" %392, i1 false) + %395 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %396 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %395, i32 0, i32 0 + store ptr @4, ptr %396, align 8 + %397 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %395, i32 0, i32 1 + store i64 4, ptr %397, align 4 + %398 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %395, align 8 + %399 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocU"(i64 224) + %400 = getelementptr %"github.com/goplus/llgo/internal/abi.StructField", ptr %399, i64 0 + store %"github.com/goplus/llgo/internal/abi.StructField" %357, ptr %400, align 8 + %401 = getelementptr %"github.com/goplus/llgo/internal/abi.StructField", ptr %399, i64 1 + store %"github.com/goplus/llgo/internal/abi.StructField" %373, ptr %401, align 8 + %402 = getelementptr %"github.com/goplus/llgo/internal/abi.StructField", ptr %399, i64 2 + store %"github.com/goplus/llgo/internal/abi.StructField" %384, ptr %402, align 8 + %403 = getelementptr %"github.com/goplus/llgo/internal/abi.StructField", ptr %399, i64 3 + store %"github.com/goplus/llgo/internal/abi.StructField" %394, ptr %403, align 8 + %404 = alloca %"github.com/goplus/llgo/internal/runtime.Slice", align 8 + %405 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %404, i32 0, i32 0 + store ptr %399, ptr %405, align 8 + %406 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %404, i32 0, i32 1 + store i64 4, ptr %406, align 4 + %407 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %404, i32 0, i32 2 + store i64 4, ptr %407, align 4 + %408 = load %"github.com/goplus/llgo/internal/runtime.Slice", ptr %404, align 8 + %409 = call ptr @"github.com/goplus/llgo/internal/runtime.Struct"(%"github.com/goplus/llgo/internal/runtime.String" %398, i64 144, %"github.com/goplus/llgo/internal/runtime.Slice" %408) + %410 = call ptr @"github.com/goplus/llgo/internal/runtime.MapOf"(ptr %345, ptr %346, ptr %409, i64 4) + call void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr %410) + store ptr %410, ptr @"map[chan _llgo_int]_llgo_int", align 8 + br label %_llgo_38 + +_llgo_38: ; preds = %_llgo_37, %_llgo_36 ret void } @@ -1502,6 +1723,8 @@ declare ptr @"github.com/goplus/llgo/internal/runtime.ArrayOf"(i64, ptr) declare ptr @"github.com/goplus/llgo/internal/runtime.AllocU"(i64) +declare void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr) + declare ptr @"github.com/goplus/llgo/internal/runtime.MakeMap"(ptr, i64) declare ptr @"github.com/goplus/llgo/internal/runtime.MapAssign"(ptr, ptr, ptr) @@ -1540,6 +1763,8 @@ declare i1 @"github.com/goplus/llgo/internal/runtime.EfaceEqual"(%"github.com/go declare ptr @"github.com/goplus/llgo/internal/runtime.AllocZ"(i64) -declare void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr) - declare ptr @"github.com/goplus/llgo/internal/runtime.PointerTo"(ptr) + +declare ptr @"github.com/goplus/llgo/internal/runtime.NewChan"(i64, i64) + +declare ptr @"github.com/goplus/llgo/internal/runtime.ChanOf"(i64, %"github.com/goplus/llgo/internal/runtime.String", ptr) diff --git a/cl/_testrt/map/out.ll b/cl/_testrt/map/out.ll index f1a5665c..717588e6 100644 --- a/cl/_testrt/map/out.ll +++ b/cl/_testrt/map/out.ll @@ -152,6 +152,7 @@ _llgo_1: ; preds = %_llgo_0 %60 = load %"github.com/goplus/llgo/internal/runtime.Slice", ptr %56, align 8 %61 = call ptr @"github.com/goplus/llgo/internal/runtime.Struct"(%"github.com/goplus/llgo/internal/runtime.String" %50, i64 144, %"github.com/goplus/llgo/internal/runtime.Slice" %60) %62 = call ptr @"github.com/goplus/llgo/internal/runtime.MapOf"(ptr %2, ptr %3, ptr %61, i64 4) + call void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr %62) store ptr %62, ptr @"map[_llgo_int]_llgo_int", align 8 br label %_llgo_2 @@ -171,6 +172,8 @@ declare ptr @"github.com/goplus/llgo/internal/runtime.ArrayOf"(i64, ptr) declare ptr @"github.com/goplus/llgo/internal/runtime.AllocU"(i64) +declare void @"github.com/goplus/llgo/internal/runtime.SetDirectIface"(ptr) + declare ptr @"github.com/goplus/llgo/internal/runtime.MakeMap"(ptr, i64) declare ptr @"github.com/goplus/llgo/internal/runtime.MapAssign"(ptr, ptr, ptr) diff --git a/internal/runtime/alg.go b/internal/runtime/alg.go index 411da783..de785704 100644 --- a/internal/runtime/alg.go +++ b/internal/runtime/alg.go @@ -179,6 +179,8 @@ func typehash(t *_type, p unsafe.Pointer, h uintptr) uintptr { h = typehash(a.Elem, add(p, i*a.Elem.Size_), h) } return h + case abi.Chan: + return typehash(t.Elem(), p, h) case abi.Struct: s := (*structtype)(unsafe.Pointer(t)) for _, f := range s.Fields { @@ -195,8 +197,8 @@ func typehash(t *_type, p unsafe.Pointer, h uintptr) uintptr { } } -func ptrequal(p, q unsafe.Pointer) bool { - return p == q +func memequalptr(p, q unsafe.Pointer) bool { + return *(*uintptr)(p) == *(*uintptr)(q) } func memequal0(p, q unsafe.Pointer) bool { return true diff --git a/internal/runtime/z_face.go b/internal/runtime/z_face.go index 58cad4d7..7783ee54 100644 --- a/internal/runtime/z_face.go +++ b/internal/runtime/z_face.go @@ -291,8 +291,13 @@ func IfacePtrData(i iface) unsafe.Pointer { if i.tab == nil { panic(errorString("invalid memory address or nil pointer dereference").Error()) } - if i.tab._type.Kind_&abi.KindDirectIface != 0 { - return unsafe.Pointer(&i.data) + switch i.tab._type.Kind() { + case abi.Bool, abi.Int, abi.Int8, abi.Int16, abi.Int32, abi.Int64, + abi.Uint, abi.Uint8, abi.Uint16, abi.Uint32, abi.Uint64, abi.Uintptr, + abi.Float32, abi.Float64, abi.Array, abi.Struct: + if isDirectIface(i.tab._type) { + return unsafe.Pointer(&i.data) + } } return i.data } diff --git a/internal/runtime/z_type.go b/internal/runtime/z_type.go index 684362d3..a0d3d319 100644 --- a/internal/runtime/z_type.go +++ b/internal/runtime/z_type.go @@ -55,7 +55,7 @@ func basicEqual(kind Kind, size uintptr) func(a, b unsafe.Pointer) bool { case abi.String: return strequal case abi.UnsafePointer: - return ptrequal + return memequalptr } panic("unreachable") } @@ -195,7 +195,7 @@ func newPointer(elem *Type) *Type { Align_: pointerAlign, FieldAlign_: pointerAlign, Kind_: uint8(abi.Pointer), - Equal: ptrequal, + Equal: memequalptr, }, Elem: elem, } @@ -266,11 +266,13 @@ func ChanOf(dir int, strChan string, elem *Type) *Type { Align_: pointerAlign, FieldAlign_: pointerAlign, Kind_: uint8(abi.Chan), + Equal: memequalptr, Str_: strChan + " " + elem.String(), }, Elem: elem, Dir: abi.ChanDir(dir), } + return &ret.Type } diff --git a/ssa/abitype.go b/ssa/abitype.go index 655a2e7d..126c3716 100644 --- a/ssa/abitype.go +++ b/ssa/abitype.go @@ -361,7 +361,7 @@ func (p Package) abiTypeInit(g Global, t types.Type, pub bool) { } vexpr := tabi() prog := p.Prog - kind, _, lvl := abi.DataKindOf(t, 0, prog.is32Bits) + kind, _, _ := abi.DataKindOf(t, 0, prog.is32Bits) switch kind { case abi.Integer, abi.BitCast: // abi.Type.Kind_ |= abi.KindDirectIface @@ -369,9 +369,7 @@ func (p Package) abiTypeInit(g Global, t types.Type, pub bool) { pkind := b.FieldAddr(vexpr, 6) b.Store(pkind, b.BinOp(token.OR, b.Load(pkind), Expr{prog.IntVal(kindDirectIface, prog.Byte()).impl, prog.Byte()})) case abi.Pointer: - if lvl > 0 { - b.InlineCall(b.Pkg.rtFunc("SetDirectIface"), vexpr) - } + b.InlineCall(b.Pkg.rtFunc("SetDirectIface"), vexpr) } b.Store(expr, vexpr) if pub { diff --git a/ssa/expr.go b/ssa/expr.go index a7c9e838..270f7324 100644 --- a/ssa/expr.go +++ b/ssa/expr.go @@ -550,7 +550,7 @@ func (b Builder) BinOp(op token.Token, x, y Expr) Expr { x = b.Field(x, 0) y = b.Field(y, 0) fallthrough - case vkFuncPtr, vkFuncDecl: + case vkFuncPtr, vkFuncDecl, vkChan: switch op { case token.EQL: return Expr{llvm.CreateICmp(b.impl, llvm.IntEQ, x.impl, y.impl), tret}