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 ff4d8435..e6491d05 100644 Binary files a/internal/runtime/llgo_autogen.lla and b/internal/runtime/llgo_autogen.lla differ diff --git a/internal/runtime/print.go b/internal/runtime/print.go index cc33fc4d..aef6c02e 100644 --- a/internal/runtime/print.go +++ b/internal/runtime/print.go @@ -30,6 +30,10 @@ func gwrite(b []byte) { } } +func PrintByte(v byte) { + c.Fprintf(c.Stderr, c.Str("%c"), v) +} + func PrintBool(v bool) { if v { PrintString("true") diff --git a/ssa/expr.go b/ssa/expr.go index 1f18f269..ea8f1c5a 100644 --- a/ssa/expr.go +++ b/ssa/expr.go @@ -125,6 +125,12 @@ func (p Program) FloatVal(v float64, t Type) Expr { return Expr{ret, t} } +func (p Program) ByteVal(v byte) Expr { + t := p.Byte() + ret := llvm.ConstInt(t.ll, uint64(v), false) + return Expr{ret, t} +} + // Val returns a constant expression. func (p Program) Val(v interface{}) Expr { switch v := v.(type) { @@ -991,33 +997,35 @@ func (b Builder) BuiltinCall(fn string, args ...Expr) (ret Expr) { } case "print", "println": ln := fn == "println" - ret.Type = b.Prog.Void() + prog := b.Prog + ret.Type = prog.Void() for i, arg := range args { if ln && i > 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":