From 1a4ca389cdee71cb9af2c281e3576367dd8608cf Mon Sep 17 00:00:00 2001 From: visualfc Date: Mon, 20 May 2024 12:42:37 +0800 Subject: [PATCH] ssa: fix builtin print --- cl/_testdata/utf8/out.ll | 32 +- cl/_testrt/builtin/in.go | 12 + cl/_testrt/builtin/out.ll | 541 ++++++++++++++---------------- cl/_testrt/mask/out.ll | 90 ++--- internal/runtime/llgo_autogen.lla | Bin 6919 -> 6951 bytes internal/runtime/print.go | 4 + ssa/expr.go | 34 +- 7 files changed, 333 insertions(+), 380 deletions(-) diff --git a/cl/_testdata/utf8/out.ll b/cl/_testdata/utf8/out.ll index c9aebbfd..0264fee4 100644 --- a/cl/_testdata/utf8/out.ll +++ b/cl/_testdata/utf8/out.ll @@ -8,9 +8,7 @@ source_filename = "main" @__llgo_argc = global ptr null @__llgo_argv = global ptr null @0 = private unnamed_addr constant [8 x i8] c"\E4\B8\ADabcd\00", align 1 -@1 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1 -@2 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1 -@3 = private unnamed_addr constant [8 x i8] c"\E4\B8\ADabcd\00", align 1 +@1 = private unnamed_addr constant [8 x i8] c"\E4\B8\ADabcd\00", align 1 define i8 @main.index(i8 %0) { _llgo_0: @@ -55,31 +53,29 @@ _llgo_0: _llgo_1: ; preds = %_llgo_3 %2 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @0, i64 7) %3 = extractvalue %"github.com/goplus/llgo/internal/runtime.String" %2, 1 - %4 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewStringSlice"(%"github.com/goplus/llgo/internal/runtime.String" %2, i64 %14, i64 %3) + %4 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewStringSlice"(%"github.com/goplus/llgo/internal/runtime.String" %2, i64 %12, i64 %3) %5 = call { i32, i64 } @"unicode/utf8.DecodeRuneInString"(%"github.com/goplus/llgo/internal/runtime.String" %4) %6 = extractvalue { i32, i64 } %5, 0 %7 = extractvalue { i32, i64 } %5, 1 - %8 = add i64 %14, %7 + %8 = add i64 %12, %7 %9 = sext i32 %6 to i64 call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %9) - %10 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @1, i64 1) - call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %10) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 10) br label %_llgo_3 _llgo_2: ; preds = %_llgo_3 - %11 = call i8 @main.index(i8 2) - %12 = icmp eq i8 %11, 3 - call void @"github.com/goplus/llgo/internal/runtime.PrintBool"(i1 %12) - %13 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @2, i64 1) - call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %13) + %10 = call i8 @main.index(i8 2) + %11 = icmp eq i8 %10, 3 + call void @"github.com/goplus/llgo/internal/runtime.PrintBool"(i1 %11) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 10) ret i32 0 _llgo_3: ; preds = %_llgo_1, %_llgo_0 - %14 = phi i64 [ 0, %_llgo_0 ], [ %8, %_llgo_1 ] - %15 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @3, i64 7) - %16 = extractvalue %"github.com/goplus/llgo/internal/runtime.String" %15, 1 - %17 = icmp slt i64 %14, %16 - br i1 %17, label %_llgo_1, label %_llgo_2 + %12 = phi i64 [ 0, %_llgo_0 ], [ %8, %_llgo_1 ] + %13 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @1, i64 7) + %14 = extractvalue %"github.com/goplus/llgo/internal/runtime.String" %13, 1 + %15 = icmp slt i64 %12, %14 + br i1 %15, label %_llgo_1, label %_llgo_2 } declare void @"github.com/goplus/llgo/internal/runtime.AssertIndexRange"(i1) @@ -96,6 +92,6 @@ declare { i32, i64 } @"unicode/utf8.DecodeRuneInString"(%"github.com/goplus/llgo declare void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64) -declare void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String") +declare void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8) declare void @"github.com/goplus/llgo/internal/runtime.PrintBool"(i1) diff --git a/cl/_testrt/builtin/in.go b/cl/_testrt/builtin/in.go index 25582553..b06eec85 100644 --- a/cl/_testrt/builtin/in.go +++ b/cl/_testrt/builtin/in.go @@ -31,4 +31,16 @@ func main() { println(n, dst[0], dst[1], dst[2]) n = copy(dst[1:], "ABCD") println(n, dst[0], dst[1], dst[2]) + + fn1 := demo + fn2 := func() { + println("fn") + } + fn3 := func() { + println(n) + } + println(demo, fn1, fn2, fn3) +} + +func demo() { } diff --git a/cl/_testrt/builtin/out.ll b/cl/_testrt/builtin/out.ll index 39388613..1f205311 100644 --- a/cl/_testrt/builtin/out.ll +++ b/cl/_testrt/builtin/out.ll @@ -11,59 +11,18 @@ source_filename = "main" @main.n = global ptr null @__llgo_argc = global ptr null @__llgo_argv = global ptr null -@0 = private unnamed_addr constant [2 x i8] c" \00", align 1 -@1 = private unnamed_addr constant [2 x i8] c" \00", align 1 -@2 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1 -@3 = private unnamed_addr constant [2 x i8] c" \00", align 1 -@4 = private unnamed_addr constant [2 x i8] c" \00", align 1 -@5 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1 -@6 = private unnamed_addr constant [2 x i8] c" \00", align 1 -@7 = private unnamed_addr constant [2 x i8] c" \00", align 1 -@8 = private unnamed_addr constant [2 x i8] c" \00", align 1 -@9 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1 -@10 = private unnamed_addr constant [2 x i8] c" \00", align 1 -@11 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1 -@12 = private unnamed_addr constant [2 x i8] c" \00", align 1 -@13 = private unnamed_addr constant [2 x i8] c" \00", align 1 -@14 = private unnamed_addr constant [2 x i8] c" \00", align 1 -@15 = private unnamed_addr constant [2 x i8] c" \00", align 1 -@16 = private unnamed_addr constant [2 x i8] c" \00", align 1 -@17 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1 -@18 = private unnamed_addr constant [2 x i8] c" \00", align 1 -@19 = private unnamed_addr constant [2 x i8] c" \00", align 1 -@20 = private unnamed_addr constant [2 x i8] c" \00", align 1 -@21 = private unnamed_addr constant [2 x i8] c" \00", align 1 -@22 = private unnamed_addr constant [2 x i8] c" \00", align 1 -@23 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1 -@24 = private unnamed_addr constant [6 x i8] c"hello\00", align 1 -@25 = private unnamed_addr constant [6 x i8] c"hello\00", align 1 -@26 = private unnamed_addr constant [6 x i8] c"hello\00", align 1 -@27 = private unnamed_addr constant [6 x i8] c"hello\00", align 1 -@28 = private unnamed_addr constant [2 x i8] c" \00", align 1 -@29 = private unnamed_addr constant [2 x i8] c" \00", align 1 -@30 = private unnamed_addr constant [2 x i8] c" \00", align 1 -@31 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1 -@32 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1 -@33 = private unnamed_addr constant [4 x i8] c"def\00", align 1 -@34 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1 -@35 = private unnamed_addr constant [2 x i8] c" \00", align 1 -@36 = private unnamed_addr constant [2 x i8] c" \00", align 1 -@37 = private unnamed_addr constant [2 x i8] c" \00", align 1 -@38 = private unnamed_addr constant [2 x i8] c" \00", align 1 -@39 = private unnamed_addr constant [2 x i8] c" \00", align 1 -@40 = private unnamed_addr constant [2 x i8] c" \00", align 1 -@41 = private unnamed_addr constant [2 x i8] c" \00", align 1 -@42 = private unnamed_addr constant [2 x i8] c" \00", align 1 -@43 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1 -@44 = private unnamed_addr constant [2 x i8] c" \00", align 1 -@45 = private unnamed_addr constant [2 x i8] c" \00", align 1 -@46 = private unnamed_addr constant [2 x i8] c" \00", align 1 -@47 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1 -@48 = private unnamed_addr constant [5 x i8] c"ABCD\00", align 1 -@49 = private unnamed_addr constant [2 x i8] c" \00", align 1 -@50 = private unnamed_addr constant [2 x i8] c" \00", align 1 -@51 = private unnamed_addr constant [2 x i8] c" \00", align 1 -@52 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1 +@0 = private unnamed_addr constant [6 x i8] c"hello\00", align 1 +@1 = private unnamed_addr constant [6 x i8] c"hello\00", align 1 +@2 = private unnamed_addr constant [6 x i8] c"hello\00", align 1 +@3 = private unnamed_addr constant [6 x i8] c"hello\00", align 1 +@4 = private unnamed_addr constant [4 x i8] c"def\00", align 1 +@5 = private unnamed_addr constant [5 x i8] c"ABCD\00", align 1 +@6 = private unnamed_addr constant [3 x i8] c"fn\00", align 1 + +define void @main.demo() { +_llgo_0: + ret void +} define void @main.init() { _llgo_0: @@ -111,266 +70,242 @@ _llgo_0: %15 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %7, 1 %16 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %7, 2 call void @"github.com/goplus/llgo/internal/runtime.PrintSlice"(%"github.com/goplus/llgo/internal/runtime.Slice" %7) - %17 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @0, i64 1) - call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %17) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %15) - %18 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @1, i64 1) - call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %18) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %16) - %19 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @2, i64 1) - call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %19) - %20 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %14, 1 - %21 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %14, 2 + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 10) + %17 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %14, 1 + %18 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %14, 2 call void @"github.com/goplus/llgo/internal/runtime.PrintSlice"(%"github.com/goplus/llgo/internal/runtime.Slice" %14) - %22 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @3, i64 1) - call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %22) - call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %20) - %23 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @4, i64 1) - call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %23) - call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %21) - %24 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @5, i64 1) - call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %24) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) + call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %17) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) + call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %18) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 10) call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 4) - %25 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @6, i64 1) - call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %25) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 4) - %26 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @7, i64 1) - call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %26) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 4) - %27 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @8, i64 1) - call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %27) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 4) - %28 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @9, i64 1) - call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %28) - %29 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocZ"(i64 32) - %30 = getelementptr inbounds i64, ptr %29, i64 0 - store i64 1, ptr %30, align 4 - %31 = getelementptr inbounds i64, ptr %29, i64 1 - store i64 2, ptr %31, align 4 - %32 = getelementptr inbounds i64, ptr %29, i64 2 - store i64 3, ptr %32, align 4 - %33 = getelementptr inbounds i64, ptr %29, i64 3 - store i64 4, ptr %33, align 4 - %34 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %29, i64 8, i64 4, i64 0, i64 4, i64 4) - %35 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %34, 1 - call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %35) - %36 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @10, i64 1) - call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %36) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 10) + %19 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocZ"(i64 32) + %20 = getelementptr inbounds i64, ptr %19, i64 0 + store i64 1, ptr %20, align 4 + %21 = getelementptr inbounds i64, ptr %19, i64 1 + store i64 2, ptr %21, align 4 + %22 = getelementptr inbounds i64, ptr %19, i64 2 + store i64 3, ptr %22, align 4 + %23 = getelementptr inbounds i64, ptr %19, i64 3 + store i64 4, ptr %23, align 4 + %24 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %19, i64 8, i64 4, i64 0, i64 4, i64 4) + %25 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %24, 1 + call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %25) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 4) - %37 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @11, i64 1) - call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %37) - %38 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %7, 2 - %39 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %7, 2 - %40 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %7, 0 - %41 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %40, i64 8, i64 %38, i64 1, i64 %39, i64 %38) - %42 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %41, 1 - %43 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %7, 2 + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 10) + %26 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %7, 2 + %27 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %7, 2 + %28 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %7, 0 + %29 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %28, i64 8, i64 %26, i64 1, i64 %27, i64 %26) + %30 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %29, 1 + %31 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %7, 2 + %32 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %7, 2 + %33 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %7, 0 + %34 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %33, i64 8, i64 %31, i64 1, i64 %32, i64 %31) + %35 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %34, 2 + %36 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %7, 2 + %37 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %7, 0 + %38 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %37, i64 8, i64 %36, i64 1, i64 2, i64 %36) + %39 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %38, 1 + %40 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %7, 2 + %41 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %7, 0 + %42 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %41, i64 8, i64 %40, i64 1, i64 2, i64 %40) + %43 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %42, 2 %44 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %7, 2 %45 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %7, 0 - %46 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %45, i64 8, i64 %43, i64 1, i64 %44, i64 %43) - %47 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %46, 2 + %46 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %45, i64 8, i64 %44, i64 1, i64 2, i64 2) + %47 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %46, 1 %48 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %7, 2 %49 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %7, 0 - %50 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %49, i64 8, i64 %48, i64 1, i64 2, i64 %48) - %51 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %50, 1 - %52 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %7, 2 - %53 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %7, 0 - %54 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %53, i64 8, i64 %52, i64 1, i64 2, i64 %52) - %55 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %54, 2 - %56 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %7, 2 - %57 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %7, 0 - %58 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %57, i64 8, i64 %56, i64 1, i64 2, i64 2) - %59 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %58, 1 - %60 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %7, 2 - %61 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %7, 0 - %62 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %61, i64 8, i64 %60, i64 1, i64 2, i64 2) - %63 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %62, 2 - call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %42) - %64 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @12, i64 1) - call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %64) + %50 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %49, i64 8, i64 %48, i64 1, i64 2, i64 2) + %51 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %50, 2 + call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %30) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) + call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %35) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) + call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %39) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) + call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %43) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %47) - %65 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @13, i64 1) - call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %65) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %51) - %66 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @14, i64 1) - call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %66) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 10) + %52 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %8, i64 8, i64 4, i64 1, i64 4, i64 4) + %53 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %52, 1 + %54 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %8, i64 8, i64 4, i64 1, i64 4, i64 4) + %55 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %54, 2 + %56 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %8, i64 8, i64 4, i64 1, i64 2, i64 4) + %57 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %56, 1 + %58 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %8, i64 8, i64 4, i64 1, i64 2, i64 4) + %59 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %58, 2 + %60 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %8, i64 8, i64 4, i64 1, i64 2, i64 2) + %61 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %60, 1 + %62 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %8, i64 8, i64 4, i64 1, i64 2, i64 2) + %63 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %62, 2 + call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %53) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %55) - %67 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @15, i64 1) - call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %67) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) + call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %57) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %59) - %68 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @16, i64 1) - call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %68) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) + call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %61) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %63) - %69 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @17, i64 1) - call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %69) - %70 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %8, i64 8, i64 4, i64 1, i64 4, i64 4) - %71 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %70, 1 - %72 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %8, i64 8, i64 4, i64 1, i64 4, i64 4) - %73 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %72, 2 - %74 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %8, i64 8, i64 4, i64 1, i64 2, i64 4) - %75 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %74, 1 - %76 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %8, i64 8, i64 4, i64 1, i64 2, i64 4) - %77 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %76, 2 - %78 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %8, i64 8, i64 4, i64 1, i64 2, i64 2) - %79 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %78, 1 - %80 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %8, i64 8, i64 4, i64 1, i64 2, i64 2) - %81 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %80, 2 - call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %71) - %82 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @18, i64 1) - call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %82) - call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %73) - %83 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @19, i64 1) - call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %83) - call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %75) - %84 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @20, i64 1) - call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %84) - call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %77) - %85 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @21, i64 1) - call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %85) - call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %79) - %86 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @22, i64 1) - call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %86) - call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %81) - %87 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @23, i64 1) - call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %87) - %88 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @24, i64 5) - %89 = extractvalue %"github.com/goplus/llgo/internal/runtime.String" %88, 1 - %90 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewStringSlice"(%"github.com/goplus/llgo/internal/runtime.String" %88, i64 1, i64 %89) - %91 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @25, i64 5) - %92 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewStringSlice"(%"github.com/goplus/llgo/internal/runtime.String" %91, i64 1, i64 2) - %93 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @26, i64 5) - %94 = extractvalue %"github.com/goplus/llgo/internal/runtime.String" %93, 1 - %95 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewStringSlice"(%"github.com/goplus/llgo/internal/runtime.String" %93, i64 5, i64 %94) - %96 = extractvalue %"github.com/goplus/llgo/internal/runtime.String" %95, 1 - %97 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @27, i64 5) - call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %97) - %98 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @28, i64 1) - call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %98) - call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %90) - %99 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @29, i64 1) - call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %99) - call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %92) - %100 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @30, i64 1) - call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %100) - call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %96) - %101 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @31, i64 1) - call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %101) - %102 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocZ"(i64 32) - %103 = getelementptr inbounds i64, ptr %102, i64 0 - store i64 5, ptr %103, align 4 - %104 = getelementptr inbounds i64, ptr %102, i64 1 - store i64 6, ptr %104, align 4 - %105 = getelementptr inbounds i64, ptr %102, i64 2 - store i64 7, ptr %105, align 4 - %106 = getelementptr inbounds i64, ptr %102, i64 3 - store i64 8, ptr %106, align 4 - %107 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %102, i64 8, i64 4, i64 0, i64 4, i64 4) - %108 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %107, 0 - %109 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %107, 1 - %110 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.SliceAppend"(%"github.com/goplus/llgo/internal/runtime.Slice" %7, ptr %108, i64 %109, i64 8) - call void @"github.com/goplus/llgo/internal/runtime.PrintSlice"(%"github.com/goplus/llgo/internal/runtime.Slice" %110) - %111 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @32, i64 1) - call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %111) - %112 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocZ"(i64 3) - %113 = getelementptr inbounds i8, ptr %112, i64 0 - store i8 97, ptr %113, align 1 - %114 = getelementptr inbounds i8, ptr %112, i64 1 - store i8 98, ptr %114, align 1 - %115 = getelementptr inbounds i8, ptr %112, i64 2 - store i8 99, ptr %115, align 1 - %116 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %112, i64 1, i64 3, i64 0, i64 3, i64 3) - %117 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @33, i64 3) - %118 = extractvalue %"github.com/goplus/llgo/internal/runtime.String" %117, 0 - %119 = extractvalue %"github.com/goplus/llgo/internal/runtime.String" %117, 1 - %120 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.SliceAppend"(%"github.com/goplus/llgo/internal/runtime.Slice" %116, ptr %118, i64 %119, i64 1) - call void @"github.com/goplus/llgo/internal/runtime.PrintSlice"(%"github.com/goplus/llgo/internal/runtime.Slice" %120) - %121 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @34, i64 1) - call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %121) - %122 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocZ"(i64 16) - %123 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 2) - %124 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyIntptr"(ptr %123, i64 100) - store %"github.com/goplus/llgo/internal/runtime.iface" %124, ptr %122, align 8 - %125 = load %"github.com/goplus/llgo/internal/runtime.iface", ptr %122, align 8 - %126 = ptrtoint ptr %122 to i64 + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 10) + %64 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @0, i64 5) + %65 = extractvalue %"github.com/goplus/llgo/internal/runtime.String" %64, 1 + %66 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewStringSlice"(%"github.com/goplus/llgo/internal/runtime.String" %64, i64 1, i64 %65) + %67 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @1, i64 5) + %68 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewStringSlice"(%"github.com/goplus/llgo/internal/runtime.String" %67, i64 1, i64 2) + %69 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @2, i64 5) + %70 = extractvalue %"github.com/goplus/llgo/internal/runtime.String" %69, 1 + %71 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewStringSlice"(%"github.com/goplus/llgo/internal/runtime.String" %69, i64 5, i64 %70) + %72 = extractvalue %"github.com/goplus/llgo/internal/runtime.String" %71, 1 + %73 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @3, i64 5) + call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %73) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) + call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %66) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) + call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %68) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) + call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %72) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 10) + %74 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocZ"(i64 32) + %75 = getelementptr inbounds i64, ptr %74, i64 0 + store i64 5, ptr %75, align 4 + %76 = getelementptr inbounds i64, ptr %74, i64 1 + store i64 6, ptr %76, align 4 + %77 = getelementptr inbounds i64, ptr %74, i64 2 + store i64 7, ptr %77, align 4 + %78 = getelementptr inbounds i64, ptr %74, i64 3 + store i64 8, ptr %78, align 4 + %79 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %74, i64 8, i64 4, i64 0, i64 4, i64 4) + %80 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %79, 0 + %81 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %79, 1 + %82 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.SliceAppend"(%"github.com/goplus/llgo/internal/runtime.Slice" %7, ptr %80, i64 %81, i64 8) + call void @"github.com/goplus/llgo/internal/runtime.PrintSlice"(%"github.com/goplus/llgo/internal/runtime.Slice" %82) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 10) + %83 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocZ"(i64 3) + %84 = getelementptr inbounds i8, ptr %83, i64 0 + store i8 97, ptr %84, align 1 + %85 = getelementptr inbounds i8, ptr %83, i64 1 + store i8 98, ptr %85, align 1 + %86 = getelementptr inbounds i8, ptr %83, i64 2 + store i8 99, ptr %86, align 1 + %87 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %83, i64 1, i64 3, i64 0, i64 3, i64 3) + %88 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @4, i64 3) + %89 = extractvalue %"github.com/goplus/llgo/internal/runtime.String" %88, 0 + %90 = extractvalue %"github.com/goplus/llgo/internal/runtime.String" %88, 1 + %91 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.SliceAppend"(%"github.com/goplus/llgo/internal/runtime.Slice" %87, ptr %89, i64 %90, i64 1) + call void @"github.com/goplus/llgo/internal/runtime.PrintSlice"(%"github.com/goplus/llgo/internal/runtime.Slice" %91) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 10) + %92 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocZ"(i64 16) + %93 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 2) + %94 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyIntptr"(ptr %93, i64 100) + store %"github.com/goplus/llgo/internal/runtime.iface" %94, ptr %92, align 8 + %95 = load %"github.com/goplus/llgo/internal/runtime.iface", ptr %92, align 8 + %96 = ptrtoint ptr %92 to i64 call void @"github.com/goplus/llgo/internal/runtime.PrintBool"(i1 true) - %127 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @35, i64 1) - call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %127) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 100) - %128 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @36, i64 1) - call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %128) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 -100) - %129 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @37, i64 1) - call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %129) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) call void @"github.com/goplus/llgo/internal/runtime.PrintUint"(i64 255) - %130 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @38, i64 1) - call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %130) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 -100) - %131 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @39, i64 1) - call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %131) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) call void @"github.com/goplus/llgo/internal/runtime.PrintFloat"(double 1.005000e+02) - %132 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @40, i64 1) - call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %132) - call void @"github.com/goplus/llgo/internal/runtime.PrintIface"(%"github.com/goplus/llgo/internal/runtime.iface" %125) - %133 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @41, i64 1) - call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %133) - call void @"github.com/goplus/llgo/internal/runtime.PrintPointer"(ptr %122) - %134 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @42, i64 1) - call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %134) + 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" %95) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) + call void @"github.com/goplus/llgo/internal/runtime.PrintPointer"(ptr %92) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) + call void @"github.com/goplus/llgo/internal/runtime.PrintUint"(i64 %96) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 10) + %97 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocZ"(i64 3) + %98 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocZ"(i64 8) + %99 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %97, i64 1, i64 3, i64 0, i64 3, i64 3) + %100 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %91, 0 + %101 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %91, 1 + %102 = call i64 @"github.com/goplus/llgo/internal/runtime.SliceCopy"(%"github.com/goplus/llgo/internal/runtime.Slice" %99, ptr %100, i64 %101, i64 1) + store i64 %102, ptr %98, align 4 + %103 = load i64, ptr %98, align 4 + %104 = getelementptr inbounds i8, ptr %97, i64 0 + %105 = load i8, ptr %104, align 1 + %106 = getelementptr inbounds i8, ptr %97, i64 1 + %107 = load i8, ptr %106, align 1 + %108 = getelementptr inbounds i8, ptr %97, i64 2 + %109 = load i8, ptr %108, align 1 + call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %103) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) + %110 = zext i8 %105 to i64 + call void @"github.com/goplus/llgo/internal/runtime.PrintUint"(i64 %110) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) + %111 = zext i8 %107 to i64 + call void @"github.com/goplus/llgo/internal/runtime.PrintUint"(i64 %111) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) + %112 = zext i8 %109 to i64 + call void @"github.com/goplus/llgo/internal/runtime.PrintUint"(i64 %112) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 10) + %113 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %97, i64 1, i64 3, i64 1, i64 3, i64 3) + %114 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @5, i64 4) + %115 = extractvalue %"github.com/goplus/llgo/internal/runtime.String" %114, 0 + %116 = extractvalue %"github.com/goplus/llgo/internal/runtime.String" %114, 1 + %117 = call i64 @"github.com/goplus/llgo/internal/runtime.SliceCopy"(%"github.com/goplus/llgo/internal/runtime.Slice" %113, ptr %115, i64 %116, i64 1) + store i64 %117, ptr %98, align 4 + %118 = load i64, ptr %98, align 4 + %119 = getelementptr inbounds i8, ptr %97, i64 0 + %120 = load i8, ptr %119, align 1 + %121 = getelementptr inbounds i8, ptr %97, i64 1 + %122 = load i8, ptr %121, align 1 + %123 = getelementptr inbounds i8, ptr %97, i64 2 + %124 = load i8, ptr %123, align 1 + call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %118) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) + %125 = zext i8 %120 to i64 + call void @"github.com/goplus/llgo/internal/runtime.PrintUint"(i64 %125) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) + %126 = zext i8 %122 to i64 call void @"github.com/goplus/llgo/internal/runtime.PrintUint"(i64 %126) - %135 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @43, i64 1) - call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %135) - %136 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocZ"(i64 3) - %137 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %136, i64 1, i64 3, i64 0, i64 3, i64 3) - %138 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %120, 0 - %139 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %120, 1 - %140 = call i64 @"github.com/goplus/llgo/internal/runtime.SliceCopy"(%"github.com/goplus/llgo/internal/runtime.Slice" %137, ptr %138, i64 %139, i64 1) - %141 = getelementptr inbounds i8, ptr %136, i64 0 - %142 = load i8, ptr %141, align 1 - %143 = getelementptr inbounds i8, ptr %136, i64 1 - %144 = load i8, ptr %143, align 1 - %145 = getelementptr inbounds i8, ptr %136, i64 2 - %146 = load i8, ptr %145, align 1 - call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %140) - %147 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @44, i64 1) - call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %147) - %148 = zext i8 %142 to i64 - call void @"github.com/goplus/llgo/internal/runtime.PrintUint"(i64 %148) - %149 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @45, i64 1) - call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %149) - %150 = zext i8 %144 to i64 - call void @"github.com/goplus/llgo/internal/runtime.PrintUint"(i64 %150) - %151 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @46, i64 1) - call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %151) - %152 = zext i8 %146 to i64 - call void @"github.com/goplus/llgo/internal/runtime.PrintUint"(i64 %152) - %153 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @47, i64 1) - call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %153) - %154 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %136, i64 1, i64 3, i64 1, i64 3, i64 3) - %155 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @48, i64 4) - %156 = extractvalue %"github.com/goplus/llgo/internal/runtime.String" %155, 0 - %157 = extractvalue %"github.com/goplus/llgo/internal/runtime.String" %155, 1 - %158 = call i64 @"github.com/goplus/llgo/internal/runtime.SliceCopy"(%"github.com/goplus/llgo/internal/runtime.Slice" %154, ptr %156, i64 %157, i64 1) - %159 = getelementptr inbounds i8, ptr %136, i64 0 - %160 = load i8, ptr %159, align 1 - %161 = getelementptr inbounds i8, ptr %136, i64 1 - %162 = load i8, ptr %161, align 1 - %163 = getelementptr inbounds i8, ptr %136, i64 2 - %164 = load i8, ptr %163, align 1 - call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %158) - %165 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @49, i64 1) - call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %165) - %166 = zext i8 %160 to i64 - call void @"github.com/goplus/llgo/internal/runtime.PrintUint"(i64 %166) - %167 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @50, i64 1) - call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %167) - %168 = zext i8 %162 to i64 - call void @"github.com/goplus/llgo/internal/runtime.PrintUint"(i64 %168) - %169 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @51, i64 1) - call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %169) - %170 = zext i8 %164 to i64 - call void @"github.com/goplus/llgo/internal/runtime.PrintUint"(i64 %170) - %171 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @52, i64 1) - call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %171) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) + %127 = zext i8 %124 to i64 + call void @"github.com/goplus/llgo/internal/runtime.PrintUint"(i64 %127) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 10) + %128 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocU"(i64 8) + %129 = getelementptr inbounds { ptr }, ptr %128, i32 0, i32 0 + store ptr %98, ptr %129, align 8 + %130 = alloca { ptr, ptr }, align 8 + %131 = getelementptr inbounds { ptr, ptr }, ptr %130, i32 0, i32 0 + store ptr @"main.main$2", ptr %131, align 8 + %132 = getelementptr inbounds { ptr, ptr }, ptr %130, i32 0, i32 1 + store ptr %128, ptr %132, align 8 + %133 = load { ptr, ptr }, ptr %130, align 8 + call void @"github.com/goplus/llgo/internal/runtime.PrintPointer"(ptr @main.demo) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) + call void @"github.com/goplus/llgo/internal/runtime.PrintPointer"(ptr @main.demo) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) + call void @"github.com/goplus/llgo/internal/runtime.PrintPointer"(ptr @"main.main$1") + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) + %134 = extractvalue { ptr, ptr } %133, 0 + call void @"github.com/goplus/llgo/internal/runtime.PrintPointer"(ptr %134) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 10) ret i32 0 } @@ -382,14 +317,16 @@ declare %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llg declare void @"github.com/goplus/llgo/internal/runtime.PrintSlice"(%"github.com/goplus/llgo/internal/runtime.Slice") -declare void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String") - -declare %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr, i64) +declare void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8) declare void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64) +declare %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr, i64) + declare %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewStringSlice"(%"github.com/goplus/llgo/internal/runtime.String", i64, i64) +declare void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String") + declare %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.SliceAppend"(%"github.com/goplus/llgo/internal/runtime.Slice", ptr, i64, i64) declare %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyIntptr"(ptr, i64) @@ -407,3 +344,23 @@ declare void @"github.com/goplus/llgo/internal/runtime.PrintIface"(%"github.com/ declare void @"github.com/goplus/llgo/internal/runtime.PrintPointer"(ptr) declare i64 @"github.com/goplus/llgo/internal/runtime.SliceCopy"(%"github.com/goplus/llgo/internal/runtime.Slice", ptr, i64, i64) + +define void @"main.main$2"(ptr %0) { +_llgo_0: + %1 = load { ptr }, ptr %0, align 8 + %2 = extractvalue { ptr } %1, 0 + %3 = load i64, ptr %2, align 4 + call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %3) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 10) + ret void +} + +declare ptr @"github.com/goplus/llgo/internal/runtime.AllocU"(i64) + +define void @"main.main$1"() { +_llgo_0: + %0 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @6, i64 2) + call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %0) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 10) + ret void +} diff --git a/cl/_testrt/mask/out.ll b/cl/_testrt/mask/out.ll index 68d454fe..2b6907ed 100644 --- a/cl/_testrt/mask/out.ll +++ b/cl/_testrt/mask/out.ll @@ -1,21 +1,9 @@ ; ModuleID = 'main' source_filename = "main" -%"github.com/goplus/llgo/internal/runtime.String" = type { ptr, i64 } - @"main.init$guard" = global ptr null @__llgo_argc = global ptr null @__llgo_argv = global ptr null -@0 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1 -@1 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1 -@2 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1 -@3 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1 -@4 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1 -@5 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1 -@6 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1 -@7 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1 -@8 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1 -@9 = private unnamed_addr constant [2 x i8] c"\0A\00", align 1 define void @main.init() { _llgo_0: @@ -39,51 +27,41 @@ _llgo_0: %2 = call i32 @main.mask(i8 1) %3 = sext i32 %2 to i64 call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %3) - %4 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @0, i64 1) - call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %4) - %5 = call i64 @main.mask_shl(i64 127, i64 5) - call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %5) - %6 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @1, i64 1) - call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %6) - %7 = call i8 @main.mask_shl8(i8 127, i64 5) - %8 = sext i8 %7 to i64 - call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %8) - %9 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @2, i64 1) - call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %9) - %10 = call i8 @main.mask_shl8u(i8 127, i64 5) - %11 = zext i8 %10 to i64 - call void @"github.com/goplus/llgo/internal/runtime.PrintUint"(i64 %11) - %12 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @3, i64 1) - call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %12) - %13 = call i8 @main.mask_shl8(i8 127, i64 16) - %14 = sext i8 %13 to i64 - call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %14) - %15 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @4, i64 1) - call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %15) - %16 = call i8 @main.mask_shl8u(i8 127, i64 16) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 10) + %4 = call i64 @main.mask_shl(i64 127, i64 5) + call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %4) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 10) + %5 = call i8 @main.mask_shl8(i8 127, i64 5) + %6 = sext i8 %5 to i64 + call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %6) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 10) + %7 = call i8 @main.mask_shl8u(i8 127, i64 5) + %8 = zext i8 %7 to i64 + call void @"github.com/goplus/llgo/internal/runtime.PrintUint"(i64 %8) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 10) + %9 = call i8 @main.mask_shl8(i8 127, i64 16) + %10 = sext i8 %9 to i64 + call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %10) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 10) + %11 = call i8 @main.mask_shl8u(i8 127, i64 16) + %12 = zext i8 %11 to i64 + call void @"github.com/goplus/llgo/internal/runtime.PrintUint"(i64 %12) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 10) + %13 = call i64 @main.mask_shr(i64 127, i64 5) + call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %13) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 10) + %14 = call i8 @main.mask_shr8(i8 127, i64 5) + %15 = sext i8 %14 to i64 + call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %15) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 10) + %16 = call i8 @main.mask_shr8u(i8 127, i64 5) %17 = zext i8 %16 to i64 call void @"github.com/goplus/llgo/internal/runtime.PrintUint"(i64 %17) - %18 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @5, i64 1) - call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %18) - %19 = call i64 @main.mask_shr(i64 127, i64 5) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 10) + %18 = call i8 @main.mask_shr8(i8 127, i64 16) + %19 = sext i8 %18 to i64 call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %19) - %20 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @6, i64 1) - call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %20) - %21 = call i8 @main.mask_shr8(i8 127, i64 5) - %22 = sext i8 %21 to i64 - call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %22) - %23 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @7, i64 1) - call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %23) - %24 = call i8 @main.mask_shr8u(i8 127, i64 5) - %25 = zext i8 %24 to i64 - call void @"github.com/goplus/llgo/internal/runtime.PrintUint"(i64 %25) - %26 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @8, i64 1) - call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %26) - %27 = call i8 @main.mask_shr8(i8 127, i64 16) - %28 = sext i8 %27 to i64 - call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %28) - %29 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @9, i64 1) - call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %29) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 10) ret i32 0 } @@ -164,9 +142,7 @@ declare void @"github.com/goplus/llgo/internal/runtime.init"() declare void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64) -declare void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String") - -declare %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr, i64) +declare void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8) declare void @"github.com/goplus/llgo/internal/runtime.PrintUint"(i64) diff --git a/internal/runtime/llgo_autogen.lla b/internal/runtime/llgo_autogen.lla index 94569d3013459d3fc524e9367f2ac91e08697462..1514f257c15bdeef34079d841fd99ce5ca82ad42 100644 GIT binary patch delta 6295 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 0 { - b.InlineCall(b.Pkg.rtFunc("PrintString"), b.Str(" ")) - // TODO(visualfc): maybe use PrintCStr is more efficient + b.InlineCall(b.Pkg.rtFunc("PrintByte"), prog.ByteVal(' ')) } var fn string - var typ Type // TODO(visualfc): typ uninitialized in some cases + typ := arg.Type switch arg.kind { case vkBool: fn = "PrintBool" case vkSigned: fn = "PrintInt" - typ = b.Prog.Int64() + typ = prog.Int64() case vkUnsigned: fn = "PrintUint" - typ = b.Prog.Uint64() + typ = prog.Uint64() case vkFloat: fn = "PrintFloat" - typ = b.Prog.Float64() + typ = prog.Float64() case vkSlice: fn = "PrintSlice" - case vkPtr, vkFuncPtr, vkFuncDecl, vkClosure, vkPyVarRef, vkPyFuncRef: - // TODO(visualfc): vkClosure is not a pointer - // TODO(visualfc): vkPyVarRef, vkPyFuncRef is pointer of pointer + case vkPtr, vkFuncPtr, vkFuncDecl: fn = "PrintPointer" - typ = b.Prog.VoidPtr() + typ = prog.VoidPtr() + case vkClosure: + arg = b.Field(arg, 0) + fn = "PrintPointer" + typ = prog.VoidPtr() case vkString: fn = "PrintString" case vkInterface: @@ -1027,13 +1035,13 @@ func (b Builder) BuiltinCall(fn string, args ...Expr) (ret Expr) { default: panic(fmt.Errorf("illegal types for operand: print %v", arg.RawType())) } - if typ != nil && typ != arg.Type { + if typ != arg.Type { arg = b.Convert(typ, arg) } b.InlineCall(b.Pkg.rtFunc(fn), arg) } if ln { - b.InlineCall(b.Pkg.rtFunc("PrintString"), b.Str("\n")) + b.InlineCall(b.Pkg.rtFunc("PrintByte"), prog.ByteVal('\n')) } return case "copy":