From 508b4d648d6af37d2e8be624fb7ce0b4ab1ecd94 Mon Sep 17 00:00:00 2001 From: xushiwei Date: Tue, 21 May 2024 01:30:15 +0800 Subject: [PATCH] remove runtime.NewString --- cl/_testdata/print/out.ll | 546 +++++++++++++++++------------- cl/_testdata/utf8/out.ll | 46 +-- cl/_testrt/allocstr/out.ll | 11 +- cl/_testrt/builtin/out.ll | 231 +++++++------ cl/_testrt/cast/out.ll | 151 ++++++--- cl/_testrt/concat/out.ll | 122 ++++--- cl/_testrt/index/out.ll | 32 +- cl/_testrt/panic/out.ll | 13 +- internal/runtime/llgo_autogen.lla | Bin 5662 -> 5792 bytes internal/runtime/z_slice.go | 20 -- internal/runtime/z_string.go | 11 - ssa/expr.go | 30 +- 12 files changed, 701 insertions(+), 512 deletions(-) diff --git a/cl/_testdata/print/out.ll b/cl/_testdata/print/out.ll index 5aa0ca70..0e4003b5 100644 --- a/cl/_testdata/print/out.ll +++ b/cl/_testdata/print/out.ll @@ -83,8 +83,13 @@ _llgo_0: store ptr %1, ptr @__llgo_argv, align 8 call void @"github.com/goplus/llgo/internal/runtime.init"() call void @main.init() - %2 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @1, i64 4) - call void @main.printstring(%"github.com/goplus/llgo/internal/runtime.String" %2) + %2 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %3 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %2, i32 0, i32 0 + store ptr @1, ptr %3, align 8 + %4 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %2, i32 0, i32 1 + store i64 4, ptr %4, align 4 + %5 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %2, align 8 + call void @main.printstring(%"github.com/goplus/llgo/internal/runtime.String" %5) call void @main.printnl() call void @main.printuint(i64 1024) call void @main.printnl() @@ -98,113 +103,128 @@ _llgo_0: call void @main.printnl() call void @main.prinfsub(double 1.001000e+02) call void @main.printnl() - %3 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 13) - %4 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyIntptr"(ptr %3, i64 1315859240) - call void @main.printany(%"github.com/goplus/llgo/internal/runtime.iface" %4) + %6 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 13) + %7 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyIntptr"(ptr %6, i64 1315859240) + call void @main.printany(%"github.com/goplus/llgo/internal/runtime.iface" %7) call void @main.printnl() - %5 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 14) - %6 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyIntptr"(ptr %5, i64 4746175415993761792) - call void @main.printany(%"github.com/goplus/llgo/internal/runtime.iface" %6) + %8 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 14) + %9 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyIntptr"(ptr %8, i64 4746175415993761792) + call void @main.printany(%"github.com/goplus/llgo/internal/runtime.iface" %9) call void @main.printnl() br i1 true, label %_llgo_3, label %_llgo_2 _llgo_1: ; preds = %_llgo_3 - %7 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocZ"(i64 32) - %8 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %7, i64 0 - %9 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @2, i64 10) - %10 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyString"(%"github.com/goplus/llgo/internal/runtime.String" %9) - store %"github.com/goplus/llgo/internal/runtime.iface" %10, ptr %8, align 8 - %11 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %7, i64 1 - %12 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 1) - %13 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyIntptr"(ptr %12, i64 -1) - store %"github.com/goplus/llgo/internal/runtime.iface" %13, ptr %11, align 8 - %14 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %7, i64 16, i64 2, i64 0, i64 2, i64 2) - call void @main.println(%"github.com/goplus/llgo/internal/runtime.Slice" %14) + %10 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocZ"(i64 32) + %11 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %10, i64 0 + %12 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %13 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %12, i32 0, i32 0 + store ptr @2, ptr %13, align 8 + %14 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %12, i32 0, i32 1 + store i64 10, ptr %14, align 4 + %15 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %12, align 8 + %16 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyString"(%"github.com/goplus/llgo/internal/runtime.String" %15) + store %"github.com/goplus/llgo/internal/runtime.iface" %16, ptr %11, align 8 + %17 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %10, i64 1 + %18 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 1) + %19 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyIntptr"(ptr %18, i64 -1) + store %"github.com/goplus/llgo/internal/runtime.iface" %19, ptr %17, align 8 + %20 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %10, i64 16, i64 2, i64 0, i64 2, i64 2) + call void @main.println(%"github.com/goplus/llgo/internal/runtime.Slice" %20) br label %_llgo_2 _llgo_2: ; preds = %_llgo_3, %_llgo_1, %_llgo_0 - %15 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocZ"(i64 48) - %16 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %15, i64 0 - %17 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @3, i64 8) - %18 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyString"(%"github.com/goplus/llgo/internal/runtime.String" %17) - store %"github.com/goplus/llgo/internal/runtime.iface" %18, ptr %16, align 8 - %19 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %15, i64 1 - %20 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 1) - %21 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyIntptr"(ptr %20, i64 -1) - store %"github.com/goplus/llgo/internal/runtime.iface" %21, ptr %19, align 8 - %22 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %15, i64 2 - %23 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 1) - %24 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyIntptr"(ptr %23, i64 -1) - store %"github.com/goplus/llgo/internal/runtime.iface" %24, ptr %22, align 8 - %25 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %15, i64 16, i64 3, i64 0, i64 3, i64 3) - call void @main.println(%"github.com/goplus/llgo/internal/runtime.Slice" %25) - %26 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocZ"(i64 256) - %27 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %26, i64 0 - %28 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 1) - %29 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyIntptr"(ptr %28, i64 -1) - store %"github.com/goplus/llgo/internal/runtime.iface" %29, ptr %27, align 8 - %30 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %26, i64 1 - %31 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 1) - %32 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyIntptr"(ptr %31, i64 0) - store %"github.com/goplus/llgo/internal/runtime.iface" %32, ptr %30, align 8 - %33 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %26, i64 2 - %34 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 5) - %35 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyIntptr"(ptr %34, i64 97) - store %"github.com/goplus/llgo/internal/runtime.iface" %35, ptr %33, align 8 - %36 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %26, i64 3 - %37 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 5) - %38 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyIntptr"(ptr %37, i64 65) + %21 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocZ"(i64 48) + %22 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %21, i64 0 + %23 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %24 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %23, i32 0, i32 0 + store ptr @3, ptr %24, align 8 + %25 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %23, i32 0, i32 1 + store i64 8, ptr %25, align 4 + %26 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %23, align 8 + %27 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyString"(%"github.com/goplus/llgo/internal/runtime.String" %26) + store %"github.com/goplus/llgo/internal/runtime.iface" %27, ptr %22, align 8 + %28 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %21, i64 1 + %29 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 1) + %30 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyIntptr"(ptr %29, i64 -1) + store %"github.com/goplus/llgo/internal/runtime.iface" %30, ptr %28, align 8 + %31 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %21, i64 2 + %32 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 1) + %33 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyIntptr"(ptr %32, i64 -1) + store %"github.com/goplus/llgo/internal/runtime.iface" %33, ptr %31, align 8 + %34 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %21, i64 16, i64 3, i64 0, i64 3, i64 3) + call void @main.println(%"github.com/goplus/llgo/internal/runtime.Slice" %34) + %35 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocZ"(i64 256) + %36 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %35, i64 0 + %37 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 1) + %38 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyIntptr"(ptr %37, i64 -1) store %"github.com/goplus/llgo/internal/runtime.iface" %38, ptr %36, align 8 - %39 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %26, i64 4 - %40 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 5) - %41 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyIntptr"(ptr %40, i64 20013) + %39 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %35, i64 1 + %40 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 1) + %41 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyIntptr"(ptr %40, i64 0) store %"github.com/goplus/llgo/internal/runtime.iface" %41, ptr %39, align 8 - %42 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %26, i64 5 - %43 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 3) - %44 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyIntptr"(ptr %43, i64 1) + %42 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %35, i64 2 + %43 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 5) + %44 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyIntptr"(ptr %43, i64 97) store %"github.com/goplus/llgo/internal/runtime.iface" %44, ptr %42, align 8 - %45 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %26, i64 6 - %46 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 4) - %47 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyIntptr"(ptr %46, i64 2) + %45 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %35, i64 3 + %46 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 5) + %47 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyIntptr"(ptr %46, i64 65) store %"github.com/goplus/llgo/internal/runtime.iface" %47, ptr %45, align 8 - %48 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %26, i64 7 + %48 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %35, i64 4 %49 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 5) - %50 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyIntptr"(ptr %49, i64 3) + %50 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyIntptr"(ptr %49, i64 20013) store %"github.com/goplus/llgo/internal/runtime.iface" %50, ptr %48, align 8 - %51 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %26, i64 8 - %52 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 6) - %53 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyIntptr"(ptr %52, i64 4) + %51 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %35, i64 5 + %52 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 3) + %53 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyIntptr"(ptr %52, i64 1) store %"github.com/goplus/llgo/internal/runtime.iface" %53, ptr %51, align 8 - %54 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %26, i64 9 - %55 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 2) - %56 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyIntptr"(ptr %55, i64 5) + %54 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %35, i64 6 + %55 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 4) + %56 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyIntptr"(ptr %55, i64 2) store %"github.com/goplus/llgo/internal/runtime.iface" %56, ptr %54, align 8 - %57 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %26, i64 10 - %58 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 8) - %59 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyIntptr"(ptr %58, i64 1) + %57 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %35, i64 7 + %58 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 5) + %59 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyIntptr"(ptr %58, i64 3) store %"github.com/goplus/llgo/internal/runtime.iface" %59, ptr %57, align 8 - %60 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %26, i64 11 - %61 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 9) - %62 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyIntptr"(ptr %61, i64 2) + %60 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %35, i64 8 + %61 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 6) + %62 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyIntptr"(ptr %61, i64 4) store %"github.com/goplus/llgo/internal/runtime.iface" %62, ptr %60, align 8 - %63 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %26, i64 12 - %64 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 10) - %65 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyIntptr"(ptr %64, i64 3) + %63 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %35, i64 9 + %64 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 2) + %65 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyIntptr"(ptr %64, i64 5) store %"github.com/goplus/llgo/internal/runtime.iface" %65, ptr %63, align 8 - %66 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %26, i64 13 - %67 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 11) - %68 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyIntptr"(ptr %67, i64 4) + %66 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %35, i64 10 + %67 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 8) + %68 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyIntptr"(ptr %67, i64 1) store %"github.com/goplus/llgo/internal/runtime.iface" %68, ptr %66, align 8 - %69 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %26, i64 14 - %70 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 12) - %71 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyIntptr"(ptr %70, i64 5) + %69 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %35, i64 11 + %70 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 9) + %71 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyIntptr"(ptr %70, i64 2) store %"github.com/goplus/llgo/internal/runtime.iface" %71, ptr %69, align 8 - %72 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %26, i64 15 - %73 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @4, i64 4) - %74 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyString"(%"github.com/goplus/llgo/internal/runtime.String" %73) + %72 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %35, i64 12 + %73 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 10) + %74 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyIntptr"(ptr %73, i64 3) store %"github.com/goplus/llgo/internal/runtime.iface" %74, ptr %72, align 8 - %75 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %26, i64 16, i64 16, i64 0, i64 16, i64 16) - call void @main.println(%"github.com/goplus/llgo/internal/runtime.Slice" %75) + %75 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %35, i64 13 + %76 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 11) + %77 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyIntptr"(ptr %76, i64 4) + store %"github.com/goplus/llgo/internal/runtime.iface" %77, ptr %75, align 8 + %78 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %35, i64 14 + %79 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 12) + %80 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyIntptr"(ptr %79, i64 5) + store %"github.com/goplus/llgo/internal/runtime.iface" %80, ptr %78, align 8 + %81 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %35, i64 15 + %82 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %83 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %82, i32 0, i32 0 + store ptr @4, ptr %83, align 8 + %84 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %82, i32 0, i32 1 + store i64 4, ptr %84, align 4 + %85 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %82, align 8 + %86 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyString"(%"github.com/goplus/llgo/internal/runtime.String" %85) + store %"github.com/goplus/llgo/internal/runtime.iface" %86, ptr %81, align 8 + %87 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %35, i64 16, i64 16, i64 0, i64 16, i64 16) + call void @main.println(%"github.com/goplus/llgo/internal/runtime.Slice" %87) ret i32 0 _llgo_3: ; preds = %_llgo_0 @@ -417,16 +437,26 @@ _llgo_0: br i1 %0, label %_llgo_1, label %_llgo_3 _llgo_1: ; preds = %_llgo_0 - %1 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @5, i64 4) - call void @main.printstring(%"github.com/goplus/llgo/internal/runtime.String" %1) + %1 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %2 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %1, i32 0, i32 0 + store ptr @5, ptr %2, align 8 + %3 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %1, i32 0, i32 1 + store i64 4, ptr %3, align 4 + %4 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %1, align 8 + call void @main.printstring(%"github.com/goplus/llgo/internal/runtime.String" %4) br label %_llgo_2 _llgo_2: ; preds = %_llgo_3, %_llgo_1 ret void _llgo_3: ; preds = %_llgo_0 - %2 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @6, i64 5) - call void @main.printstring(%"github.com/goplus/llgo/internal/runtime.String" %2) + %5 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %6 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %5, i32 0, i32 0 + store ptr @6, ptr %6, align 8 + %7 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %5, i32 0, i32 1 + store i64 5, ptr %7, align 4 + %8 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %5, align 8 + call void @main.printstring(%"github.com/goplus/llgo/internal/runtime.String" %8) br label %_llgo_2 } @@ -436,185 +466,200 @@ _llgo_0: br i1 %1, label %_llgo_1, label %_llgo_3 _llgo_1: ; preds = %_llgo_0 - %2 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @7, i64 3) - call void @main.printstring(%"github.com/goplus/llgo/internal/runtime.String" %2) + %2 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %3 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %2, i32 0, i32 0 + store ptr @7, ptr %3, align 8 + %4 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %2, i32 0, i32 1 + store i64 3, ptr %4, align 4 + %5 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %2, align 8 + call void @main.printstring(%"github.com/goplus/llgo/internal/runtime.String" %5) ret void _llgo_2: ; preds = %_llgo_7 - %3 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @8, i64 4) - call void @main.printstring(%"github.com/goplus/llgo/internal/runtime.String" %3) + %6 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %7 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %6, i32 0, i32 0 + store ptr @8, ptr %7, align 8 + %8 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %6, i32 0, i32 1 + store i64 4, ptr %8, align 4 + %9 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %6, align 8 + call void @main.printstring(%"github.com/goplus/llgo/internal/runtime.String" %9) ret void _llgo_3: ; preds = %_llgo_0 - %4 = fadd double %0, %0 - %5 = fcmp oeq double %4, %0 - br i1 %5, label %_llgo_6, label %_llgo_7 + %10 = fadd double %0, %0 + %11 = fcmp oeq double %10, %0 + br i1 %11, label %_llgo_6, label %_llgo_7 _llgo_4: ; preds = %_llgo_10 - %6 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @9, i64 4) - call void @main.printstring(%"github.com/goplus/llgo/internal/runtime.String" %6) + %12 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %13 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %12, i32 0, i32 0 + store ptr @9, ptr %13, align 8 + %14 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %12, i32 0, i32 1 + store i64 4, ptr %14, align 4 + %15 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %12, align 8 + call void @main.printstring(%"github.com/goplus/llgo/internal/runtime.String" %15) ret void _llgo_5: ; preds = %_llgo_7 - %7 = fadd double %0, %0 - %8 = fcmp oeq double %7, %0 - br i1 %8, label %_llgo_9, label %_llgo_10 + %16 = fadd double %0, %0 + %17 = fcmp oeq double %16, %0 + br i1 %17, label %_llgo_9, label %_llgo_10 _llgo_6: ; preds = %_llgo_3 - %9 = fcmp ogt double %0, 0.000000e+00 + %18 = fcmp ogt double %0, 0.000000e+00 br label %_llgo_7 _llgo_7: ; preds = %_llgo_6, %_llgo_3 - %10 = phi i1 [ false, %_llgo_3 ], [ %9, %_llgo_6 ] - br i1 %10, label %_llgo_2, label %_llgo_5 + %19 = phi i1 [ false, %_llgo_3 ], [ %18, %_llgo_6 ] + br i1 %19, label %_llgo_2, label %_llgo_5 _llgo_8: ; preds = %_llgo_10 - %11 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocZ"(i64 14) - %12 = getelementptr inbounds i8, ptr %11, i64 0 - store i8 43, ptr %12, align 1 - %13 = fcmp oeq double %0, 0.000000e+00 - br i1 %13, label %_llgo_11, label %_llgo_13 + %20 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocZ"(i64 14) + %21 = getelementptr inbounds i8, ptr %20, i64 0 + store i8 43, ptr %21, align 1 + %22 = fcmp oeq double %0, 0.000000e+00 + br i1 %22, label %_llgo_11, label %_llgo_13 _llgo_9: ; preds = %_llgo_5 - %14 = fcmp olt double %0, 0.000000e+00 + %23 = fcmp olt double %0, 0.000000e+00 br label %_llgo_10 _llgo_10: ; preds = %_llgo_9, %_llgo_5 - %15 = phi i1 [ false, %_llgo_5 ], [ %14, %_llgo_9 ] - br i1 %15, label %_llgo_4, label %_llgo_8 + %24 = phi i1 [ false, %_llgo_5 ], [ %23, %_llgo_9 ] + br i1 %24, label %_llgo_4, label %_llgo_8 _llgo_11: ; preds = %_llgo_8 - %16 = fdiv double 1.000000e+00, %0 - %17 = fcmp olt double %16, 0.000000e+00 - br i1 %17, label %_llgo_14, label %_llgo_12 + %25 = fdiv double 1.000000e+00, %0 + %26 = fcmp olt double %25, 0.000000e+00 + br i1 %26, label %_llgo_14, label %_llgo_12 _llgo_12: ; preds = %_llgo_24, %_llgo_22, %_llgo_14, %_llgo_11 - %18 = phi double [ %0, %_llgo_11 ], [ %36, %_llgo_22 ], [ %0, %_llgo_14 ], [ %42, %_llgo_24 ] - %19 = phi i64 [ 0, %_llgo_11 ], [ %32, %_llgo_22 ], [ 0, %_llgo_14 ], [ %41, %_llgo_24 ] + %27 = phi double [ %0, %_llgo_11 ], [ %45, %_llgo_22 ], [ %0, %_llgo_14 ], [ %51, %_llgo_24 ] + %28 = phi i64 [ 0, %_llgo_11 ], [ %41, %_llgo_22 ], [ 0, %_llgo_14 ], [ %50, %_llgo_24 ] br label %_llgo_27 _llgo_13: ; preds = %_llgo_8 - %20 = fcmp olt double %0, 0.000000e+00 - br i1 %20, label %_llgo_15, label %_llgo_17 + %29 = fcmp olt double %0, 0.000000e+00 + br i1 %29, label %_llgo_15, label %_llgo_17 _llgo_14: ; preds = %_llgo_11 - %21 = getelementptr inbounds i8, ptr %11, i64 0 - store i8 45, ptr %21, align 1 + %30 = getelementptr inbounds i8, ptr %20, i64 0 + store i8 45, ptr %30, align 1 br label %_llgo_12 _llgo_15: ; preds = %_llgo_13 - %22 = fneg double %0 - %23 = getelementptr inbounds i8, ptr %11, i64 0 - store i8 45, ptr %23, align 1 + %31 = fneg double %0 + %32 = getelementptr inbounds i8, ptr %20, i64 0 + store i8 45, ptr %32, align 1 br label %_llgo_17 _llgo_16: ; preds = %_llgo_17 - %24 = add i64 %27, 1 - %25 = fdiv double %26, 1.000000e+01 + %33 = add i64 %36, 1 + %34 = fdiv double %35, 1.000000e+01 br label %_llgo_17 _llgo_17: ; preds = %_llgo_16, %_llgo_15, %_llgo_13 - %26 = phi double [ %0, %_llgo_13 ], [ %25, %_llgo_16 ], [ %22, %_llgo_15 ] - %27 = phi i64 [ 0, %_llgo_13 ], [ %24, %_llgo_16 ], [ 0, %_llgo_15 ] - %28 = fcmp oge double %26, 1.000000e+01 - br i1 %28, label %_llgo_16, label %_llgo_20 + %35 = phi double [ %0, %_llgo_13 ], [ %34, %_llgo_16 ], [ %31, %_llgo_15 ] + %36 = phi i64 [ 0, %_llgo_13 ], [ %33, %_llgo_16 ], [ 0, %_llgo_15 ] + %37 = fcmp oge double %35, 1.000000e+01 + br i1 %37, label %_llgo_16, label %_llgo_20 _llgo_18: ; preds = %_llgo_20 - %29 = sub i64 %32, 1 - %30 = fmul double %31, 1.000000e+01 + %38 = sub i64 %41, 1 + %39 = fmul double %40, 1.000000e+01 br label %_llgo_20 _llgo_19: ; preds = %_llgo_20 br label %_llgo_23 _llgo_20: ; preds = %_llgo_18, %_llgo_17 - %31 = phi double [ %26, %_llgo_17 ], [ %30, %_llgo_18 ] - %32 = phi i64 [ %27, %_llgo_17 ], [ %29, %_llgo_18 ] - %33 = fcmp olt double %31, 1.000000e+00 - br i1 %33, label %_llgo_18, label %_llgo_19 + %40 = phi double [ %35, %_llgo_17 ], [ %39, %_llgo_18 ] + %41 = phi i64 [ %36, %_llgo_17 ], [ %38, %_llgo_18 ] + %42 = fcmp olt double %40, 1.000000e+00 + br i1 %42, label %_llgo_18, label %_llgo_19 _llgo_21: ; preds = %_llgo_23 - %34 = fdiv double %38, 1.000000e+01 - %35 = add i64 %39, 1 + %43 = fdiv double %47, 1.000000e+01 + %44 = add i64 %48, 1 br label %_llgo_23 _llgo_22: ; preds = %_llgo_23 - %36 = fadd double %31, %38 - %37 = fcmp oge double %36, 1.000000e+01 - br i1 %37, label %_llgo_24, label %_llgo_12 + %45 = fadd double %40, %47 + %46 = fcmp oge double %45, 1.000000e+01 + br i1 %46, label %_llgo_24, label %_llgo_12 _llgo_23: ; preds = %_llgo_21, %_llgo_19 - %38 = phi double [ 5.000000e+00, %_llgo_19 ], [ %34, %_llgo_21 ] - %39 = phi i64 [ 0, %_llgo_19 ], [ %35, %_llgo_21 ] - %40 = icmp slt i64 %39, 7 - br i1 %40, label %_llgo_21, label %_llgo_22 + %47 = phi double [ 5.000000e+00, %_llgo_19 ], [ %43, %_llgo_21 ] + %48 = phi i64 [ 0, %_llgo_19 ], [ %44, %_llgo_21 ] + %49 = icmp slt i64 %48, 7 + br i1 %49, label %_llgo_21, label %_llgo_22 _llgo_24: ; preds = %_llgo_22 - %41 = add i64 %32, 1 - %42 = fdiv double %36, 1.000000e+01 + %50 = add i64 %41, 1 + %51 = fdiv double %45, 1.000000e+01 br label %_llgo_12 _llgo_25: ; preds = %_llgo_27 - %43 = fptosi double %60 to i64 - %44 = add i64 %61, 2 - %45 = add i64 %43, 48 - %46 = trunc i64 %45 to i8 - %47 = icmp slt i64 %44, 0 - call void @"github.com/goplus/llgo/internal/runtime.AssertIndexRange"(i1 %47) - %48 = getelementptr inbounds i8, ptr %11, i64 %44 - store i8 %46, ptr %48, align 1 - %49 = sitofp i64 %43 to double - %50 = fsub double %60, %49 - %51 = fmul double %50, 1.000000e+01 - %52 = add i64 %61, 1 + %52 = fptosi double %69 to i64 + %53 = add i64 %70, 2 + %54 = add i64 %52, 48 + %55 = trunc i64 %54 to i8 + %56 = icmp slt i64 %53, 0 + call void @"github.com/goplus/llgo/internal/runtime.AssertIndexRange"(i1 %56) + %57 = getelementptr inbounds i8, ptr %20, i64 %53 + store i8 %55, ptr %57, align 1 + %58 = sitofp i64 %52 to double + %59 = fsub double %69, %58 + %60 = fmul double %59, 1.000000e+01 + %61 = add i64 %70, 1 br label %_llgo_27 _llgo_26: ; preds = %_llgo_27 - %53 = getelementptr inbounds i8, ptr %11, i64 2 - %54 = load i8, ptr %53, align 1 - %55 = getelementptr inbounds i8, ptr %11, i64 1 - store i8 %54, ptr %55, align 1 - %56 = getelementptr inbounds i8, ptr %11, i64 2 - store i8 46, ptr %56, align 1 - %57 = getelementptr inbounds i8, ptr %11, i64 9 - store i8 101, ptr %57, align 1 - %58 = getelementptr inbounds i8, ptr %11, i64 10 - store i8 43, ptr %58, align 1 - %59 = icmp slt i64 %19, 0 - br i1 %59, label %_llgo_28, label %_llgo_29 + %62 = getelementptr inbounds i8, ptr %20, i64 2 + %63 = load i8, ptr %62, align 1 + %64 = getelementptr inbounds i8, ptr %20, i64 1 + store i8 %63, ptr %64, align 1 + %65 = getelementptr inbounds i8, ptr %20, i64 2 + store i8 46, ptr %65, align 1 + %66 = getelementptr inbounds i8, ptr %20, i64 9 + store i8 101, ptr %66, align 1 + %67 = getelementptr inbounds i8, ptr %20, i64 10 + store i8 43, ptr %67, align 1 + %68 = icmp slt i64 %28, 0 + br i1 %68, label %_llgo_28, label %_llgo_29 _llgo_27: ; preds = %_llgo_25, %_llgo_12 - %60 = phi double [ %18, %_llgo_12 ], [ %51, %_llgo_25 ] - %61 = phi i64 [ 0, %_llgo_12 ], [ %52, %_llgo_25 ] - %62 = icmp slt i64 %61, 7 - br i1 %62, label %_llgo_25, label %_llgo_26 + %69 = phi double [ %27, %_llgo_12 ], [ %60, %_llgo_25 ] + %70 = phi i64 [ 0, %_llgo_12 ], [ %61, %_llgo_25 ] + %71 = icmp slt i64 %70, 7 + br i1 %71, label %_llgo_25, label %_llgo_26 _llgo_28: ; preds = %_llgo_26 - %63 = sub i64 0, %19 - %64 = getelementptr inbounds i8, ptr %11, i64 10 - store i8 45, ptr %64, align 1 + %72 = sub i64 0, %28 + %73 = getelementptr inbounds i8, ptr %20, i64 10 + store i8 45, ptr %73, align 1 br label %_llgo_29 _llgo_29: ; preds = %_llgo_28, %_llgo_26 - %65 = phi i64 [ %19, %_llgo_26 ], [ %63, %_llgo_28 ] - %66 = sdiv i64 %65, 100 - %67 = trunc i64 %66 to i8 - %68 = add i8 %67, 48 - %69 = getelementptr inbounds i8, ptr %11, i64 11 - store i8 %68, ptr %69, align 1 - %70 = sdiv i64 %65, 10 - %71 = trunc i64 %70 to i8 - %72 = urem i8 %71, 10 - %73 = add i8 %72, 48 - %74 = getelementptr inbounds i8, ptr %11, i64 12 - store i8 %73, ptr %74, align 1 - %75 = srem i64 %65, 10 + %74 = phi i64 [ %28, %_llgo_26 ], [ %72, %_llgo_28 ] + %75 = sdiv i64 %74, 100 %76 = trunc i64 %75 to i8 %77 = add i8 %76, 48 - %78 = getelementptr inbounds i8, ptr %11, i64 13 + %78 = getelementptr inbounds i8, ptr %20, i64 11 store i8 %77, ptr %78, align 1 - %79 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %11, i64 1, i64 14, i64 0, i64 14, i64 14) - call void @main.gwrite(%"github.com/goplus/llgo/internal/runtime.Slice" %79) + %79 = sdiv i64 %74, 10 + %80 = trunc i64 %79 to i8 + %81 = urem i8 %80, 10 + %82 = add i8 %81, 48 + %83 = getelementptr inbounds i8, ptr %20, i64 12 + store i8 %82, ptr %83, align 1 + %84 = srem i64 %74, 10 + %85 = trunc i64 %84 to i8 + %86 = add i8 %85, 48 + %87 = getelementptr inbounds i8, ptr %20, i64 13 + store i8 %86, ptr %87, align 1 + %88 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %20, i64 1, i64 14, i64 0, i64 14, i64 14) + call void @main.gwrite(%"github.com/goplus/llgo/internal/runtime.Slice" %88) ret void } @@ -624,49 +669,54 @@ _llgo_0: br label %_llgo_3 _llgo_1: ; preds = %_llgo_3 - %2 = urem i64 %17, 16 - %3 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @10, i64 16) - %4 = extractvalue %"github.com/goplus/llgo/internal/runtime.String" %3, 0 - %5 = getelementptr inbounds i8, ptr %4, i64 %2 - %6 = load i8, ptr %5, align 1 - %7 = icmp slt i64 %18, 0 - call void @"github.com/goplus/llgo/internal/runtime.AssertIndexRange"(i1 %7) - %8 = getelementptr inbounds i8, ptr %1, i64 %18 - store i8 %6, ptr %8, align 1 - %9 = icmp ult i64 %17, 16 - br i1 %9, label %_llgo_5, label %_llgo_4 + %2 = urem i64 %20, 16 + %3 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %4 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %3, i32 0, i32 0 + store ptr @10, ptr %4, align 8 + %5 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %3, i32 0, i32 1 + store i64 16, ptr %5, align 4 + %6 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %3, align 8 + %7 = extractvalue %"github.com/goplus/llgo/internal/runtime.String" %6, 0 + %8 = getelementptr inbounds i8, ptr %7, i64 %2 + %9 = load i8, ptr %8, align 1 + %10 = icmp slt i64 %21, 0 + call void @"github.com/goplus/llgo/internal/runtime.AssertIndexRange"(i1 %10) + %11 = getelementptr inbounds i8, ptr %1, i64 %21 + store i8 %9, ptr %11, align 1 + %12 = icmp ult i64 %20, 16 + br i1 %12, label %_llgo_5, label %_llgo_4 _llgo_2: ; preds = %_llgo_5, %_llgo_3 - %10 = sub i64 %18, 1 - %11 = icmp slt i64 %10, 0 - call void @"github.com/goplus/llgo/internal/runtime.AssertIndexRange"(i1 %11) - %12 = getelementptr inbounds i8, ptr %1, i64 %10 - store i8 120, ptr %12, align 1 - %13 = sub i64 %10, 1 + %13 = sub i64 %21, 1 %14 = icmp slt i64 %13, 0 call void @"github.com/goplus/llgo/internal/runtime.AssertIndexRange"(i1 %14) %15 = getelementptr inbounds i8, ptr %1, i64 %13 - store i8 48, ptr %15, align 1 - %16 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %1, i64 1, i64 100, i64 %13, i64 100, i64 100) - call void @main.gwrite(%"github.com/goplus/llgo/internal/runtime.Slice" %16) + store i8 120, ptr %15, align 1 + %16 = sub i64 %13, 1 + %17 = icmp slt i64 %16, 0 + call void @"github.com/goplus/llgo/internal/runtime.AssertIndexRange"(i1 %17) + %18 = getelementptr inbounds i8, ptr %1, i64 %16 + store i8 48, ptr %18, align 1 + %19 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %1, i64 1, i64 100, i64 %16, i64 100, i64 100) + call void @main.gwrite(%"github.com/goplus/llgo/internal/runtime.Slice" %19) ret void _llgo_3: ; preds = %_llgo_4, %_llgo_0 - %17 = phi i64 [ %0, %_llgo_0 ], [ %20, %_llgo_4 ] - %18 = phi i64 [ 99, %_llgo_0 ], [ %21, %_llgo_4 ] - %19 = icmp sgt i64 %18, 0 - br i1 %19, label %_llgo_1, label %_llgo_2 + %20 = phi i64 [ %0, %_llgo_0 ], [ %23, %_llgo_4 ] + %21 = phi i64 [ 99, %_llgo_0 ], [ %24, %_llgo_4 ] + %22 = icmp sgt i64 %21, 0 + br i1 %22, label %_llgo_1, label %_llgo_2 _llgo_4: ; preds = %_llgo_5, %_llgo_1 - %20 = udiv i64 %17, 16 - %21 = sub i64 %18, 1 + %23 = udiv i64 %20, 16 + %24 = sub i64 %21, 1 br label %_llgo_3 _llgo_5: ; preds = %_llgo_1 - %22 = sub i64 100, %18 - %23 = load i64, ptr @main.minhexdigits, align 4 - %24 = icmp sge i64 %22, %23 - br i1 %24, label %_llgo_2, label %_llgo_4 + %25 = sub i64 100, %21 + %26 = load i64, ptr @main.minhexdigits, align 4 + %27 = icmp sge i64 %25, %26 + br i1 %27, label %_llgo_2, label %_llgo_4 } define void @main.printint(i64 %0) { @@ -675,14 +725,19 @@ _llgo_0: br i1 %1, label %_llgo_1, label %_llgo_2 _llgo_1: ; preds = %_llgo_0 - %2 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @11, i64 1) - call void @main.printstring(%"github.com/goplus/llgo/internal/runtime.String" %2) - %3 = sub i64 0, %0 + %2 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %3 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %2, i32 0, i32 0 + store ptr @11, ptr %3, align 8 + %4 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %2, i32 0, i32 1 + store i64 1, ptr %4, align 4 + %5 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %2, align 8 + call void @main.printstring(%"github.com/goplus/llgo/internal/runtime.String" %5) + %6 = sub i64 0, %0 br label %_llgo_2 _llgo_2: ; preds = %_llgo_1, %_llgo_0 - %4 = phi i64 [ %0, %_llgo_0 ], [ %3, %_llgo_1 ] - call void @main.printuint(i64 %4) + %7 = phi i64 [ %0, %_llgo_0 ], [ %6, %_llgo_1 ] + call void @main.printuint(i64 %7) ret void } @@ -711,8 +766,13 @@ _llgo_3: ; preds = %_llgo_1 ret void _llgo_4: ; preds = %_llgo_2 - %10 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @12, i64 1) - call void @main.printstring(%"github.com/goplus/llgo/internal/runtime.String" %10) + %10 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %11 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %10, i32 0, i32 0 + store ptr @12, ptr %11, align 8 + %12 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %10, i32 0, i32 1 + store i64 1, ptr %12, align 4 + %13 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %10, align 8 + call void @main.printstring(%"github.com/goplus/llgo/internal/runtime.String" %13) br label %_llgo_5 _llgo_5: ; preds = %_llgo_4, %_llgo_2 @@ -722,15 +782,25 @@ _llgo_5: ; preds = %_llgo_4, %_llgo_2 define void @main.printnl() { _llgo_0: - %0 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @13, i64 1) - call void @main.printstring(%"github.com/goplus/llgo/internal/runtime.String" %0) + %0 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %1 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %0, i32 0, i32 0 + store ptr @13, ptr %1, align 8 + %2 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %0, i32 0, i32 1 + store i64 1, ptr %2, align 4 + %3 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %0, align 8 + call void @main.printstring(%"github.com/goplus/llgo/internal/runtime.String" %3) ret void } define void @main.printsp() { _llgo_0: - %0 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @14, i64 1) - call void @main.printstring(%"github.com/goplus/llgo/internal/runtime.String" %0) + %0 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %1 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %0, i32 0, i32 0 + store ptr @14, ptr %1, align 8 + %2 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %0, i32 0, i32 1 + store i64 1, ptr %2, align 4 + %3 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %0, align 8 + call void @main.printstring(%"github.com/goplus/llgo/internal/runtime.String" %3) ret void } @@ -799,8 +869,6 @@ declare i32 @printf(ptr, ...) declare void @"github.com/goplus/llgo/internal/runtime.init"() -declare %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr, i64) - declare %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyIntptr"(ptr, i64) declare ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64) diff --git a/cl/_testdata/utf8/out.ll b/cl/_testdata/utf8/out.ll index 0264fee4..964a3e9c 100644 --- a/cl/_testdata/utf8/out.ll +++ b/cl/_testdata/utf8/out.ll @@ -51,31 +51,41 @@ _llgo_0: br label %_llgo_3 _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 %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 %12, %7 - %9 = sext i32 %6 to i64 - call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %9) + %2 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %3 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %2, i32 0, i32 0 + store ptr @0, ptr %3, align 8 + %4 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %2, i32 0, i32 1 + store i64 7, ptr %4, align 4 + %5 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %2, align 8 + %6 = extractvalue %"github.com/goplus/llgo/internal/runtime.String" %5, 1 + %7 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewStringSlice"(%"github.com/goplus/llgo/internal/runtime.String" %5, i64 %15, i64 %6) + %8 = call { i32, i64 } @"unicode/utf8.DecodeRuneInString"(%"github.com/goplus/llgo/internal/runtime.String" %7) + %9 = extractvalue { i32, i64 } %8, 0 + %10 = extractvalue { i32, i64 } %8, 1 + %11 = add i64 %15, %10 + %12 = sext i32 %9 to i64 + call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %12) call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 10) br label %_llgo_3 _llgo_2: ; preds = %_llgo_3 - %10 = call i8 @main.index(i8 2) - %11 = icmp eq i8 %10, 3 - call void @"github.com/goplus/llgo/internal/runtime.PrintBool"(i1 %11) + %13 = call i8 @main.index(i8 2) + %14 = icmp eq i8 %13, 3 + call void @"github.com/goplus/llgo/internal/runtime.PrintBool"(i1 %14) call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 10) ret i32 0 _llgo_3: ; preds = %_llgo_1, %_llgo_0 - %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 + %15 = phi i64 [ 0, %_llgo_0 ], [ %11, %_llgo_1 ] + %16 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %17 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %16, i32 0, i32 0 + store ptr @1, ptr %17, align 8 + %18 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %16, i32 0, i32 1 + store i64 7, ptr %18, align 4 + %19 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %16, align 8 + %20 = extractvalue %"github.com/goplus/llgo/internal/runtime.String" %19, 1 + %21 = icmp slt i64 %15, %20 + br i1 %21, label %_llgo_1, label %_llgo_2 } declare void @"github.com/goplus/llgo/internal/runtime.AssertIndexRange"(i1) @@ -84,8 +94,6 @@ declare void @"unicode/utf8.init"() declare void @"github.com/goplus/llgo/internal/runtime.init"() -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 { i32, i64 } @"unicode/utf8.DecodeRuneInString"(%"github.com/goplus/llgo/internal/runtime.String") diff --git a/cl/_testrt/allocstr/out.ll b/cl/_testrt/allocstr/out.ll index e3373759..4f958a80 100644 --- a/cl/_testrt/allocstr/out.ll +++ b/cl/_testrt/allocstr/out.ll @@ -10,8 +10,13 @@ source_filename = "main" define %"github.com/goplus/llgo/internal/runtime.String" @main.hello() { _llgo_0: - %0 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @0, i64 12) - ret %"github.com/goplus/llgo/internal/runtime.String" %0 + %0 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %1 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %0, i32 0, i32 0 + store ptr @0, ptr %1, align 8 + %2 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %0, i32 0, i32 1 + store i64 12, ptr %2, align 4 + %3 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %0, align 8 + ret %"github.com/goplus/llgo/internal/runtime.String" %3 } define void @main.init() { @@ -42,8 +47,6 @@ _llgo_0: ret i32 0 } -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.init"() declare ptr @"github.com/goplus/llgo/internal/runtime.CStrCopy"(ptr, %"github.com/goplus/llgo/internal/runtime.String") diff --git a/cl/_testrt/builtin/out.ll b/cl/_testrt/builtin/out.ll index 1f205311..0ec65484 100644 --- a/cl/_testrt/builtin/out.ll +++ b/cl/_testrt/builtin/out.ll @@ -168,59 +168,84 @@ _llgo_0: call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %63) 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) + %64 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %65 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %64, i32 0, i32 0 + store ptr @0, ptr %65, align 8 + %66 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %64, i32 0, i32 1 + store i64 5, ptr %66, align 4 + %67 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %64, align 8 + %68 = extractvalue %"github.com/goplus/llgo/internal/runtime.String" %67, 1 + %69 = 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 %68) + %70 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %71 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %70, i32 0, i32 0 + store ptr @1, ptr %71, align 8 + %72 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %70, i32 0, i32 1 + store i64 5, ptr %72, align 4 + %73 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %70, align 8 + %74 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewStringSlice"(%"github.com/goplus/llgo/internal/runtime.String" %73, i64 1, i64 2) + %75 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %76 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %75, i32 0, i32 0 + store ptr @2, ptr %76, align 8 + %77 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %75, i32 0, i32 1 + store i64 5, ptr %77, align 4 + %78 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %75, align 8 + %79 = extractvalue %"github.com/goplus/llgo/internal/runtime.String" %78, 1 + %80 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewStringSlice"(%"github.com/goplus/llgo/internal/runtime.String" %78, i64 5, i64 %79) + %81 = extractvalue %"github.com/goplus/llgo/internal/runtime.String" %80, 1 + %82 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %83 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %82, i32 0, i32 0 + store ptr @3, ptr %83, align 8 + %84 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %82, i32 0, i32 1 + store i64 5, ptr %84, align 4 + %85 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %82, align 8 + 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.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.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %69) 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.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %74) 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.PrintInt"(i64 %81) 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) + %86 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocZ"(i64 32) + %87 = getelementptr inbounds i64, ptr %86, i64 0 + store i64 5, ptr %87, align 4 + %88 = getelementptr inbounds i64, ptr %86, i64 1 + store i64 6, ptr %88, align 4 + %89 = getelementptr inbounds i64, ptr %86, i64 2 + store i64 7, ptr %89, align 4 + %90 = getelementptr inbounds i64, ptr %86, i64 3 + store i64 8, ptr %90, align 4 + %91 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %86, i64 8, i64 4, i64 0, i64 4, i64 4) + %92 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %91, 0 + %93 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %91, 1 + %94 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.SliceAppend"(%"github.com/goplus/llgo/internal/runtime.Slice" %7, ptr %92, i64 %93, i64 8) + call void @"github.com/goplus/llgo/internal/runtime.PrintSlice"(%"github.com/goplus/llgo/internal/runtime.Slice" %94) 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) + %95 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocZ"(i64 3) + %96 = getelementptr inbounds i8, ptr %95, i64 0 + store i8 97, ptr %96, align 1 + %97 = getelementptr inbounds i8, ptr %95, i64 1 + store i8 98, ptr %97, align 1 + %98 = getelementptr inbounds i8, ptr %95, i64 2 + store i8 99, ptr %98, align 1 + %99 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %95, i64 1, i64 3, i64 0, i64 3, i64 3) + %100 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %101 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %100, i32 0, i32 0 + store ptr @4, ptr %101, align 8 + %102 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %100, i32 0, i32 1 + store i64 3, ptr %102, align 4 + %103 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %100, align 8 + %104 = extractvalue %"github.com/goplus/llgo/internal/runtime.String" %103, 0 + %105 = extractvalue %"github.com/goplus/llgo/internal/runtime.String" %103, 1 + %106 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.SliceAppend"(%"github.com/goplus/llgo/internal/runtime.Slice" %99, ptr %104, i64 %105, i64 1) + call void @"github.com/goplus/llgo/internal/runtime.PrintSlice"(%"github.com/goplus/llgo/internal/runtime.Slice" %106) 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 + %107 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocZ"(i64 16) + %108 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 2) + %109 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyIntptr"(ptr %108, i64 100) + store %"github.com/goplus/llgo/internal/runtime.iface" %109, ptr %107, align 8 + %110 = load %"github.com/goplus/llgo/internal/runtime.iface", ptr %107, align 8 + %111 = ptrtoint ptr %107 to i64 call void @"github.com/goplus/llgo/internal/runtime.PrintBool"(i1 true) call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 100) @@ -233,49 +258,25 @@ _llgo_0: call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) call void @"github.com/goplus/llgo/internal/runtime.PrintFloat"(double 1.005000e+02) 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.PrintIface"(%"github.com/goplus/llgo/internal/runtime.iface" %110) 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.PrintPointer"(ptr %107) 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 + %112 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocZ"(i64 3) + %113 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocZ"(i64 8) + %114 = 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) + %115 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %106, 0 + %116 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %106, 1 + %117 = call i64 @"github.com/goplus/llgo/internal/runtime.SliceCopy"(%"github.com/goplus/llgo/internal/runtime.Slice" %114, ptr %115, i64 %116, i64 1) + store i64 %117, ptr %113, align 4 + %118 = load i64, ptr %113, align 4 + %119 = getelementptr inbounds i8, ptr %112, i64 0 %120 = load i8, ptr %119, align 1 - %121 = getelementptr inbounds i8, ptr %97, i64 1 + %121 = getelementptr inbounds i8, ptr %112, i64 1 %122 = load i8, ptr %121, align 1 - %123 = getelementptr inbounds i8, ptr %97, i64 2 + %123 = getelementptr inbounds i8, ptr %112, 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) @@ -288,23 +289,52 @@ _llgo_0: %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 + %128 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %112, i64 1, i64 3, i64 1, i64 3, i64 3) + %129 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %130 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %129, i32 0, i32 0 + store ptr @5, ptr %130, align 8 + %131 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %129, i32 0, i32 1 + store i64 4, ptr %131, align 4 + %132 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %129, align 8 + %133 = extractvalue %"github.com/goplus/llgo/internal/runtime.String" %132, 0 + %134 = extractvalue %"github.com/goplus/llgo/internal/runtime.String" %132, 1 + %135 = call i64 @"github.com/goplus/llgo/internal/runtime.SliceCopy"(%"github.com/goplus/llgo/internal/runtime.Slice" %128, ptr %133, i64 %134, i64 1) + store i64 %135, ptr %113, align 4 + %136 = load i64, ptr %113, align 4 + %137 = getelementptr inbounds i8, ptr %112, i64 0 + %138 = load i8, ptr %137, align 1 + %139 = getelementptr inbounds i8, ptr %112, i64 1 + %140 = load i8, ptr %139, align 1 + %141 = getelementptr inbounds i8, ptr %112, i64 2 + %142 = load i8, ptr %141, align 1 + call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %136) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) + %143 = zext i8 %138 to i64 + call void @"github.com/goplus/llgo/internal/runtime.PrintUint"(i64 %143) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) + %144 = zext i8 %140 to i64 + call void @"github.com/goplus/llgo/internal/runtime.PrintUint"(i64 %144) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) + %145 = zext i8 %142 to i64 + call void @"github.com/goplus/llgo/internal/runtime.PrintUint"(i64 %145) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 10) + %146 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocU"(i64 8) + %147 = getelementptr inbounds { ptr }, ptr %146, i32 0, i32 0 + store ptr %113, ptr %147, align 8 + %148 = alloca { ptr, ptr }, align 8 + %149 = getelementptr inbounds { ptr, ptr }, ptr %148, i32 0, i32 0 + store ptr @"main.main$2", ptr %149, align 8 + %150 = getelementptr inbounds { ptr, ptr }, ptr %148, i32 0, i32 1 + store ptr %146, ptr %150, align 8 + %151 = load { ptr, ptr }, ptr %148, 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) + %152 = extractvalue { ptr, ptr } %151, 0 + call void @"github.com/goplus/llgo/internal/runtime.PrintPointer"(ptr %152) call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 10) ret i32 0 } @@ -321,8 +351,6 @@ 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") @@ -359,8 +387,13 @@ 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) + %0 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %1 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %0, i32 0, i32 0 + store ptr @6, ptr %1, align 8 + %2 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %0, i32 0, i32 1 + store i64 2, ptr %2, align 4 + %3 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %0, align 8 + call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %3) call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 10) ret void } diff --git a/cl/_testrt/cast/out.ll b/cl/_testrt/cast/out.ll index 1e23b45e..b6739dbb 100644 --- a/cl/_testrt/cast/out.ll +++ b/cl/_testrt/cast/out.ll @@ -28,9 +28,14 @@ _llgo_0: br i1 %3, label %_llgo_1, label %_llgo_2 _llgo_1: ; preds = %_llgo_0 - %4 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @0, i64 5) - %5 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyString"(%"github.com/goplus/llgo/internal/runtime.String" %4) - call void @"github.com/goplus/llgo/internal/runtime.TracePanic"(%"github.com/goplus/llgo/internal/runtime.iface" %5) + %4 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %5 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %4, i32 0, i32 0 + store ptr @0, ptr %5, align 8 + %6 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %4, i32 0, i32 1 + store i64 5, ptr %6, align 4 + %7 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %4, align 8 + %8 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyString"(%"github.com/goplus/llgo/internal/runtime.String" %7) + call void @"github.com/goplus/llgo/internal/runtime.TracePanic"(%"github.com/goplus/llgo/internal/runtime.iface" %8) unreachable _llgo_2: ; preds = %_llgo_0 @@ -44,9 +49,14 @@ _llgo_0: br i1 %3, label %_llgo_1, label %_llgo_2 _llgo_1: ; preds = %_llgo_0 - %4 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @1, i64 5) - %5 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyString"(%"github.com/goplus/llgo/internal/runtime.String" %4) - call void @"github.com/goplus/llgo/internal/runtime.TracePanic"(%"github.com/goplus/llgo/internal/runtime.iface" %5) + %4 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %5 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %4, i32 0, i32 0 + store ptr @1, ptr %5, align 8 + %6 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %4, i32 0, i32 1 + store i64 5, ptr %6, align 4 + %7 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %4, align 8 + %8 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyString"(%"github.com/goplus/llgo/internal/runtime.String" %7) + call void @"github.com/goplus/llgo/internal/runtime.TracePanic"(%"github.com/goplus/llgo/internal/runtime.iface" %8) unreachable _llgo_2: ; preds = %_llgo_0 @@ -60,9 +70,14 @@ _llgo_0: br i1 %3, label %_llgo_1, label %_llgo_2 _llgo_1: ; preds = %_llgo_0 - %4 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @2, i64 5) - %5 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyString"(%"github.com/goplus/llgo/internal/runtime.String" %4) - call void @"github.com/goplus/llgo/internal/runtime.TracePanic"(%"github.com/goplus/llgo/internal/runtime.iface" %5) + %4 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %5 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %4, i32 0, i32 0 + store ptr @2, ptr %5, align 8 + %6 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %4, i32 0, i32 1 + store i64 5, ptr %6, align 4 + %7 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %4, align 8 + %8 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyString"(%"github.com/goplus/llgo/internal/runtime.String" %7) + call void @"github.com/goplus/llgo/internal/runtime.TracePanic"(%"github.com/goplus/llgo/internal/runtime.iface" %8) unreachable _llgo_2: ; preds = %_llgo_0 @@ -76,9 +91,14 @@ _llgo_0: br i1 %3, label %_llgo_1, label %_llgo_2 _llgo_1: ; preds = %_llgo_0 - %4 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @3, i64 5) - %5 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyString"(%"github.com/goplus/llgo/internal/runtime.String" %4) - call void @"github.com/goplus/llgo/internal/runtime.TracePanic"(%"github.com/goplus/llgo/internal/runtime.iface" %5) + %4 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %5 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %4, i32 0, i32 0 + store ptr @3, ptr %5, align 8 + %6 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %4, i32 0, i32 1 + store i64 5, ptr %6, align 4 + %7 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %4, align 8 + %8 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyString"(%"github.com/goplus/llgo/internal/runtime.String" %7) + call void @"github.com/goplus/llgo/internal/runtime.TracePanic"(%"github.com/goplus/llgo/internal/runtime.iface" %8) unreachable _llgo_2: ; preds = %_llgo_0 @@ -92,9 +112,14 @@ _llgo_0: br i1 %3, label %_llgo_1, label %_llgo_2 _llgo_1: ; preds = %_llgo_0 - %4 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @4, i64 5) - %5 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyString"(%"github.com/goplus/llgo/internal/runtime.String" %4) - call void @"github.com/goplus/llgo/internal/runtime.TracePanic"(%"github.com/goplus/llgo/internal/runtime.iface" %5) + %4 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %5 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %4, i32 0, i32 0 + store ptr @4, ptr %5, align 8 + %6 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %4, i32 0, i32 1 + store i64 5, ptr %6, align 4 + %7 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %4, align 8 + %8 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyString"(%"github.com/goplus/llgo/internal/runtime.String" %7) + call void @"github.com/goplus/llgo/internal/runtime.TracePanic"(%"github.com/goplus/llgo/internal/runtime.iface" %8) unreachable _llgo_2: ; preds = %_llgo_0 @@ -108,9 +133,14 @@ _llgo_0: br i1 %3, label %_llgo_1, label %_llgo_2 _llgo_1: ; preds = %_llgo_0 - %4 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @5, i64 5) - %5 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyString"(%"github.com/goplus/llgo/internal/runtime.String" %4) - call void @"github.com/goplus/llgo/internal/runtime.TracePanic"(%"github.com/goplus/llgo/internal/runtime.iface" %5) + %4 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %5 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %4, i32 0, i32 0 + store ptr @5, ptr %5, align 8 + %6 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %4, i32 0, i32 1 + store i64 5, ptr %6, align 4 + %7 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %4, align 8 + %8 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyString"(%"github.com/goplus/llgo/internal/runtime.String" %7) + call void @"github.com/goplus/llgo/internal/runtime.TracePanic"(%"github.com/goplus/llgo/internal/runtime.iface" %8) unreachable _llgo_2: ; preds = %_llgo_0 @@ -124,9 +154,14 @@ _llgo_0: br i1 %3, label %_llgo_1, label %_llgo_2 _llgo_1: ; preds = %_llgo_0 - %4 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @6, i64 5) - %5 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyString"(%"github.com/goplus/llgo/internal/runtime.String" %4) - call void @"github.com/goplus/llgo/internal/runtime.TracePanic"(%"github.com/goplus/llgo/internal/runtime.iface" %5) + %4 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %5 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %4, i32 0, i32 0 + store ptr @6, ptr %5, align 8 + %6 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %4, i32 0, i32 1 + store i64 5, ptr %6, align 4 + %7 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %4, align 8 + %8 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyString"(%"github.com/goplus/llgo/internal/runtime.String" %7) + call void @"github.com/goplus/llgo/internal/runtime.TracePanic"(%"github.com/goplus/llgo/internal/runtime.iface" %8) unreachable _llgo_2: ; preds = %_llgo_0 @@ -140,9 +175,14 @@ _llgo_0: br i1 %3, label %_llgo_1, label %_llgo_2 _llgo_1: ; preds = %_llgo_0 - %4 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @7, i64 5) - %5 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyString"(%"github.com/goplus/llgo/internal/runtime.String" %4) - call void @"github.com/goplus/llgo/internal/runtime.TracePanic"(%"github.com/goplus/llgo/internal/runtime.iface" %5) + %4 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %5 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %4, i32 0, i32 0 + store ptr @7, ptr %5, align 8 + %6 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %4, i32 0, i32 1 + store i64 5, ptr %6, align 4 + %7 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %4, align 8 + %8 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyString"(%"github.com/goplus/llgo/internal/runtime.String" %7) + call void @"github.com/goplus/llgo/internal/runtime.TracePanic"(%"github.com/goplus/llgo/internal/runtime.iface" %8) unreachable _llgo_2: ; preds = %_llgo_0 @@ -156,9 +196,14 @@ _llgo_0: br i1 %3, label %_llgo_1, label %_llgo_2 _llgo_1: ; preds = %_llgo_0 - %4 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @8, i64 5) - %5 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyString"(%"github.com/goplus/llgo/internal/runtime.String" %4) - call void @"github.com/goplus/llgo/internal/runtime.TracePanic"(%"github.com/goplus/llgo/internal/runtime.iface" %5) + %4 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %5 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %4, i32 0, i32 0 + store ptr @8, ptr %5, align 8 + %6 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %4, i32 0, i32 1 + store i64 5, ptr %6, align 4 + %7 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %4, align 8 + %8 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyString"(%"github.com/goplus/llgo/internal/runtime.String" %7) + call void @"github.com/goplus/llgo/internal/runtime.TracePanic"(%"github.com/goplus/llgo/internal/runtime.iface" %8) unreachable _llgo_2: ; preds = %_llgo_0 @@ -172,9 +217,14 @@ _llgo_0: br i1 %3, label %_llgo_1, label %_llgo_2 _llgo_1: ; preds = %_llgo_0 - %4 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @9, i64 5) - %5 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyString"(%"github.com/goplus/llgo/internal/runtime.String" %4) - call void @"github.com/goplus/llgo/internal/runtime.TracePanic"(%"github.com/goplus/llgo/internal/runtime.iface" %5) + %4 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %5 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %4, i32 0, i32 0 + store ptr @9, ptr %5, align 8 + %6 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %4, i32 0, i32 1 + store i64 5, ptr %6, align 4 + %7 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %4, align 8 + %8 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyString"(%"github.com/goplus/llgo/internal/runtime.String" %7) + call void @"github.com/goplus/llgo/internal/runtime.TracePanic"(%"github.com/goplus/llgo/internal/runtime.iface" %8) unreachable _llgo_2: ; preds = %_llgo_0 @@ -188,9 +238,14 @@ _llgo_0: br i1 %3, label %_llgo_1, label %_llgo_2 _llgo_1: ; preds = %_llgo_0 - %4 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @10, i64 5) - %5 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyString"(%"github.com/goplus/llgo/internal/runtime.String" %4) - call void @"github.com/goplus/llgo/internal/runtime.TracePanic"(%"github.com/goplus/llgo/internal/runtime.iface" %5) + %4 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %5 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %4, i32 0, i32 0 + store ptr @10, ptr %5, align 8 + %6 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %4, i32 0, i32 1 + store i64 5, ptr %6, align 4 + %7 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %4, align 8 + %8 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyString"(%"github.com/goplus/llgo/internal/runtime.String" %7) + call void @"github.com/goplus/llgo/internal/runtime.TracePanic"(%"github.com/goplus/llgo/internal/runtime.iface" %8) unreachable _llgo_2: ; preds = %_llgo_0 @@ -204,20 +259,30 @@ _llgo_0: br i1 %3, label %_llgo_1, label %_llgo_2 _llgo_1: ; preds = %_llgo_0 - %4 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @11, i64 5) - %5 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyString"(%"github.com/goplus/llgo/internal/runtime.String" %4) - call void @"github.com/goplus/llgo/internal/runtime.TracePanic"(%"github.com/goplus/llgo/internal/runtime.iface" %5) + %4 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %5 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %4, i32 0, i32 0 + store ptr @11, ptr %5, align 8 + %6 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %4, i32 0, i32 1 + store i64 5, ptr %6, align 4 + %7 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %4, align 8 + %8 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyString"(%"github.com/goplus/llgo/internal/runtime.String" %7) + call void @"github.com/goplus/llgo/internal/runtime.TracePanic"(%"github.com/goplus/llgo/internal/runtime.iface" %8) unreachable _llgo_2: ; preds = %_llgo_0 - %6 = trunc i64 %1 to i32 - %7 = icmp ne i32 %6, %0 - br i1 %7, label %_llgo_3, label %_llgo_4 + %9 = trunc i64 %1 to i32 + %10 = icmp ne i32 %9, %0 + br i1 %10, label %_llgo_3, label %_llgo_4 _llgo_3: ; preds = %_llgo_2 - %8 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @12, i64 5) - %9 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyString"(%"github.com/goplus/llgo/internal/runtime.String" %8) - call void @"github.com/goplus/llgo/internal/runtime.TracePanic"(%"github.com/goplus/llgo/internal/runtime.iface" %9) + %11 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %12 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %11, i32 0, i32 0 + store ptr @12, ptr %12, align 8 + %13 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %11, i32 0, i32 1 + store i64 5, ptr %13, align 4 + %14 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %11, align 8 + %15 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyString"(%"github.com/goplus/llgo/internal/runtime.String" %14) + call void @"github.com/goplus/llgo/internal/runtime.TracePanic"(%"github.com/goplus/llgo/internal/runtime.iface" %15) unreachable _llgo_4: ; preds = %_llgo_2 @@ -301,8 +366,6 @@ _llgo_0: ret i32 0 } -declare %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr, i64) - declare %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyString"(%"github.com/goplus/llgo/internal/runtime.String") declare void @"github.com/goplus/llgo/internal/runtime.TracePanic"(%"github.com/goplus/llgo/internal/runtime.iface") diff --git a/cl/_testrt/concat/out.ll b/cl/_testrt/concat/out.ll index 19f0abd8..845d1d0c 100644 --- a/cl/_testrt/concat/out.ll +++ b/cl/_testrt/concat/out.ll @@ -19,47 +19,62 @@ source_filename = "main" define %"github.com/goplus/llgo/internal/runtime.String" @main.concat(%"github.com/goplus/llgo/internal/runtime.Slice" %0) { _llgo_0: %1 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %0, 1 - %2 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @0, i64 0) - %3 = extractvalue %"github.com/goplus/llgo/internal/runtime.String" %2, 0 - %4 = extractvalue %"github.com/goplus/llgo/internal/runtime.String" %2, 1 + %2 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %3 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %2, i32 0, i32 0 + store ptr @0, ptr %3, align 8 + %4 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %2, i32 0, i32 1 + store i64 0, ptr %4, align 4 + %5 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %2, align 8 + %6 = extractvalue %"github.com/goplus/llgo/internal/runtime.String" %5, 0 + %7 = extractvalue %"github.com/goplus/llgo/internal/runtime.String" %5, 1 br label %_llgo_1 _llgo_1: ; preds = %_llgo_2, %_llgo_0 - %5 = phi ptr [ %3, %_llgo_0 ], [ %19, %_llgo_2 ] - %6 = phi i64 [ %4, %_llgo_0 ], [ %20, %_llgo_2 ] - %7 = phi i64 [ -1, %_llgo_0 ], [ %12, %_llgo_2 ] - %8 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 - %9 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %8, i32 0, i32 0 - store ptr %5, ptr %9, align 8 - %10 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %8, i32 0, i32 1 - store i64 %6, ptr %10, align 4 - %11 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %8, align 8 - %12 = add i64 %7, 1 - %13 = icmp slt i64 %12, %1 - br i1 %13, label %_llgo_2, label %_llgo_3 + %8 = phi ptr [ %6, %_llgo_0 ], [ %22, %_llgo_2 ] + %9 = phi i64 [ %7, %_llgo_0 ], [ %23, %_llgo_2 ] + %10 = phi i64 [ -1, %_llgo_0 ], [ %15, %_llgo_2 ] + %11 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %12 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %11, i32 0, i32 0 + store ptr %8, ptr %12, align 8 + %13 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %11, i32 0, i32 1 + store i64 %9, ptr %13, align 4 + %14 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %11, align 8 + %15 = add i64 %10, 1 + %16 = icmp slt i64 %15, %1 + br i1 %16, label %_llgo_2, label %_llgo_3 _llgo_2: ; preds = %_llgo_1 - %14 = icmp slt i64 %12, 0 - call void @"github.com/goplus/llgo/internal/runtime.AssertIndexRange"(i1 %14) - %15 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %0, 0 - %16 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %15, i64 %12 - %17 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %16, align 8 - %18 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.StringCat"(%"github.com/goplus/llgo/internal/runtime.String" %11, %"github.com/goplus/llgo/internal/runtime.String" %17) - %19 = extractvalue %"github.com/goplus/llgo/internal/runtime.String" %18, 0 - %20 = extractvalue %"github.com/goplus/llgo/internal/runtime.String" %18, 1 + %17 = icmp slt i64 %15, 0 + call void @"github.com/goplus/llgo/internal/runtime.AssertIndexRange"(i1 %17) + %18 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %0, 0 + %19 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %18, i64 %15 + %20 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %19, align 8 + %21 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.StringCat"(%"github.com/goplus/llgo/internal/runtime.String" %14, %"github.com/goplus/llgo/internal/runtime.String" %20) + %22 = extractvalue %"github.com/goplus/llgo/internal/runtime.String" %21, 0 + %23 = extractvalue %"github.com/goplus/llgo/internal/runtime.String" %21, 1 br label %_llgo_1 _llgo_3: ; preds = %_llgo_1 - ret %"github.com/goplus/llgo/internal/runtime.String" %11 + ret %"github.com/goplus/llgo/internal/runtime.String" %14 } define %"github.com/goplus/llgo/internal/runtime.String" @main.info(%"github.com/goplus/llgo/internal/runtime.String" %0) { _llgo_0: - %1 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @1, i64 0) - %2 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.StringCat"(%"github.com/goplus/llgo/internal/runtime.String" %1, %"github.com/goplus/llgo/internal/runtime.String" %0) - %3 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @2, i64 3) - %4 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.StringCat"(%"github.com/goplus/llgo/internal/runtime.String" %2, %"github.com/goplus/llgo/internal/runtime.String" %3) - ret %"github.com/goplus/llgo/internal/runtime.String" %4 + %1 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %2 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %1, i32 0, i32 0 + store ptr @1, ptr %2, align 8 + %3 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %1, i32 0, i32 1 + store i64 0, ptr %3, align 4 + %4 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %1, align 8 + %5 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.StringCat"(%"github.com/goplus/llgo/internal/runtime.String" %4, %"github.com/goplus/llgo/internal/runtime.String" %0) + %6 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %7 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %6, i32 0, i32 0 + store ptr @2, ptr %7, align 8 + %8 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %6, i32 0, i32 1 + store i64 3, ptr %8, align 4 + %9 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %6, align 8 + %10 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.StringCat"(%"github.com/goplus/llgo/internal/runtime.String" %5, %"github.com/goplus/llgo/internal/runtime.String" %9) + ret %"github.com/goplus/llgo/internal/runtime.String" %10 } define void @main.init() { @@ -83,22 +98,37 @@ _llgo_0: call void @main.init() %2 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocZ"(i64 48) %3 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %2, i64 0 - %4 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @3, i64 5) - store %"github.com/goplus/llgo/internal/runtime.String" %4, ptr %3, align 8 - %5 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %2, i64 1 - %6 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @4, i64 1) - store %"github.com/goplus/llgo/internal/runtime.String" %6, ptr %5, align 8 - %7 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %2, i64 2 - %8 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @5, i64 5) - store %"github.com/goplus/llgo/internal/runtime.String" %8, ptr %7, align 8 - %9 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %2, i64 16, i64 3, i64 0, i64 3, i64 3) - %10 = call %"github.com/goplus/llgo/internal/runtime.String" @main.concat(%"github.com/goplus/llgo/internal/runtime.Slice" %9) - %11 = load ptr, ptr @__stderrp, align 8 - %12 = extractvalue %"github.com/goplus/llgo/internal/runtime.String" %10, 1 - %13 = add i64 %12, 1 - %14 = alloca i8, i64 %13, align 1 - %15 = call ptr @"github.com/goplus/llgo/internal/runtime.CStrCopy"(ptr %14, %"github.com/goplus/llgo/internal/runtime.String" %10) - %16 = call i32 (ptr, ptr, ...) @fprintf(ptr %11, ptr @6, ptr %15) + %4 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %5 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %4, i32 0, i32 0 + store ptr @3, ptr %5, align 8 + %6 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %4, i32 0, i32 1 + store i64 5, ptr %6, align 4 + %7 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %4, align 8 + store %"github.com/goplus/llgo/internal/runtime.String" %7, ptr %3, align 8 + %8 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %2, i64 1 + %9 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %10 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %9, i32 0, i32 0 + store ptr @4, ptr %10, align 8 + %11 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %9, i32 0, i32 1 + store i64 1, ptr %11, align 4 + %12 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %9, align 8 + store %"github.com/goplus/llgo/internal/runtime.String" %12, ptr %8, align 8 + %13 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %2, i64 2 + %14 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %15 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %14, i32 0, i32 0 + store ptr @5, ptr %15, align 8 + %16 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %14, i32 0, i32 1 + store i64 5, ptr %16, align 4 + %17 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %14, align 8 + store %"github.com/goplus/llgo/internal/runtime.String" %17, ptr %13, align 8 + %18 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %2, i64 16, i64 3, i64 0, i64 3, i64 3) + %19 = call %"github.com/goplus/llgo/internal/runtime.String" @main.concat(%"github.com/goplus/llgo/internal/runtime.Slice" %18) + %20 = load ptr, ptr @__stderrp, align 8 + %21 = extractvalue %"github.com/goplus/llgo/internal/runtime.String" %19, 1 + %22 = add i64 %21, 1 + %23 = alloca i8, i64 %22, align 1 + %24 = call ptr @"github.com/goplus/llgo/internal/runtime.CStrCopy"(ptr %23, %"github.com/goplus/llgo/internal/runtime.String" %19) + %25 = call i32 (ptr, ptr, ...) @fprintf(ptr %20, ptr @6, ptr %24) ret i32 0 } @@ -106,8 +136,6 @@ declare void @"github.com/goplus/llgo/internal/runtime.AssertIndexRange"(i1) declare %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.StringCat"(%"github.com/goplus/llgo/internal/runtime.String", %"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.init"() declare ptr @"github.com/goplus/llgo/internal/runtime.AllocZ"(i64) diff --git a/cl/_testrt/index/out.ll b/cl/_testrt/index/out.ll index 834b497e..e0b1b506 100644 --- a/cl/_testrt/index/out.ll +++ b/cl/_testrt/index/out.ll @@ -118,16 +118,26 @@ _llgo_0: %60 = getelementptr inbounds i64, ptr %53, i64 2 %61 = load i64, ptr %60, align 4 %62 = call i32 (ptr, ...) @printf(ptr @3, i64 %61) - %63 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @5, i64 6) - %64 = extractvalue %"github.com/goplus/llgo/internal/runtime.String" %63, 0 - %65 = getelementptr inbounds i8, ptr %64, i64 2 - %66 = load i8, ptr %65, align 1 - %67 = call i32 (ptr, ...) @printf(ptr @4, i8 %66) - %68 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @7, i64 6) - %69 = extractvalue %"github.com/goplus/llgo/internal/runtime.String" %68, 0 - %70 = getelementptr inbounds i8, ptr %69, i64 1 - %71 = load i8, ptr %70, align 1 - %72 = call i32 (ptr, ...) @printf(ptr @6, i8 %71) + %63 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %64 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %63, i32 0, i32 0 + store ptr @5, ptr %64, align 8 + %65 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %63, i32 0, i32 1 + store i64 6, ptr %65, align 4 + %66 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %63, align 8 + %67 = extractvalue %"github.com/goplus/llgo/internal/runtime.String" %66, 0 + %68 = getelementptr inbounds i8, ptr %67, i64 2 + %69 = load i8, ptr %68, align 1 + %70 = call i32 (ptr, ...) @printf(ptr @4, i8 %69) + %71 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %72 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %71, i32 0, i32 0 + store ptr @7, ptr %72, align 8 + %73 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %71, i32 0, i32 1 + store i64 6, ptr %73, align 4 + %74 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %71, align 8 + %75 = extractvalue %"github.com/goplus/llgo/internal/runtime.String" %74, 0 + %76 = getelementptr inbounds i8, ptr %75, i64 1 + %77 = load i8, ptr %76, align 1 + %78 = call i32 (ptr, ...) @printf(ptr @6, i8 %77) ret i32 0 } @@ -136,5 +146,3 @@ declare void @"github.com/goplus/llgo/internal/runtime.init"() declare ptr @"github.com/goplus/llgo/internal/runtime.Zeroinit"(ptr, i64) declare i32 @printf(ptr, ...) - -declare %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr, i64) diff --git a/cl/_testrt/panic/out.ll b/cl/_testrt/panic/out.ll index 331bbfbf..f8923d33 100644 --- a/cl/_testrt/panic/out.ll +++ b/cl/_testrt/panic/out.ll @@ -28,16 +28,19 @@ _llgo_0: store ptr %1, ptr @__llgo_argv, align 8 call void @"github.com/goplus/llgo/internal/runtime.init"() call void @main.init() - %2 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr @0, i64 13) - %3 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyString"(%"github.com/goplus/llgo/internal/runtime.String" %2) - call void @"github.com/goplus/llgo/internal/runtime.TracePanic"(%"github.com/goplus/llgo/internal/runtime.iface" %3) + %2 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %3 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %2, i32 0, i32 0 + store ptr @0, ptr %3, align 8 + %4 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %2, i32 0, i32 1 + store i64 13, ptr %4, align 4 + %5 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %2, align 8 + %6 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyString"(%"github.com/goplus/llgo/internal/runtime.String" %5) + call void @"github.com/goplus/llgo/internal/runtime.TracePanic"(%"github.com/goplus/llgo/internal/runtime.iface" %6) unreachable } declare void @"github.com/goplus/llgo/internal/runtime.init"() -declare %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewString"(ptr, i64) - declare %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyString"(%"github.com/goplus/llgo/internal/runtime.String") declare void @"github.com/goplus/llgo/internal/runtime.TracePanic"(%"github.com/goplus/llgo/internal/runtime.iface") diff --git a/internal/runtime/llgo_autogen.lla b/internal/runtime/llgo_autogen.lla index 61566d860b8ded0e710d840169f70397efa2c8c8..9dfdc6324db055b67f7d46ed1c6d8f6eb4a0cd27 100644 GIT binary patch literal 5792 zcmZ{oWl$S{vbKXuaW7sd6nA$C?php*6GG79UW&U@ytoz!#R&vyaV=6TIECWw+@ACO z`|jM?+1+<%-r2u9`)I47pppOp08Bv3tM5kR=OcNCqyRwn2>^f(pay`!4z89TK6<%2 z*g?3!U;}+D07_J}ntk-Y{OJ1%fP{L51OWVZ!I7l1>y}Up;(|TGDna9T*B*GVZ)`?C z>lBxdPeT$E_kR#+ z*+Z%=wgHy`q&;4<7a!uS3!}<1_Qmm?(7mw!y0GbLOwa_ynnKZGR<4v?g5*CmpkY4&F!7wyRTrE^Z08*rjolaCl7N%4so0AJ7IC+ZWPoJ zI4f)+VIcp)o(jI!V)6s%ZdV)&6i5Lg5YXl=u&`XGlRh5t zgRMfUWzQ!gutht%+tl!qXdB_|?u@f~{=|I7PoJZhi;k6a<_qLH*N| z?yhJbr^a6BP7Lw+LTR@VfLlx4P}))iAe)1%&<+r!oR8F&ia3`4b$CQ|cSJj|+!e&x zBN=^LT{US3kgQBveoT1u$6s=8cu~jYx|)tt2Y#q{Ka#!0*Ucxm0ZC1wdO zF4L-&z%m~yesD4$i(2no-dR4UnURsE7cc3fu8c;wNgX< zq0F3|ehtRzy7qs0a8Tg63w%G`6}dT^(Knig+jtoRRdQk}Q@hX3x?`~1ts&xk-^d^~ zkJ`{h{zpl0q~6TcS@rC1R8gn`j}Tethp;~=rC0JugA70;dMV3VX#05fN-2YCUH|G? z=V%S=o7INQS|{uY{mH{mFtAr8`ZWh_qQ}w0jYHK*ljX(8PL+}nTu`pfS^&f2LTed& z;Up!HmJcG?uM!`*`mM!JC}8B6Ty)3Yadcc+yEtbtw(90P-36nE%|z;mu5MTseHFck zS~axvepIEJZpc-T@E6grRSA+4lkD zQ$-}Z18p6XpC(aZBv;Y%8f+MXjm`yk^&&&!M1>FU)7*M7}E9=kTj%tmF_o6EYyI zs%9W*aQoWmhO34vrJK{11?#(i_mWUmf#pb@d+D1v?zL@>q>ih~&PQq(QOY&yVob<5 zE_G|suJ|h&W(kol7Bqch@W5(%sKC5d8@K9jP@@Bg=2AKdP0X6Qxn)#EMetm)Nh9ZV zpi6kMk}_ekpqx1~PegV?9AdmP9UWrkwZ8sFa}7c&(nS3di^ayH@i?t{28z|L;b}qo zqv@p;3SC5|VEhgsZHL>5&JloM~`mM!TDf)1dn5;X(dy%maLzlPAHoXy@!^<{l^{{;Q<^w-gB7Oj(n|Jj5T z^yO_`5+7=^fuZOe9$S`R%=-9g2d&4vKI;=Tp&d``49U+>eWyebMdd4q={Wl6$O0PE zS708C=!5>_n(G+S-2>&TX*|sDNX`1m9(qdUZwz~`TQ<^LabtdXJBtD=cgWUDL0!%i z^pLl4RpFWW=$w>qDe6;6n$>YBm@7V&VDI|)%2S@He|C#;`y-l0qi z9mK)THtfO8Sd)#r6%t9=vIvY)B1MoT4uz%lD9WwrxL5e{sdD3AHWz<>k!=16Ihrd%xU;UP;=;&9lo7hNe_L z5`Nsj<61Ve80MQ!4$mZ=vTM0(lMiLDB__X-{q;Cirswj`-Ivew~;E8V(d;P^XU0Y~E zmsp4ZuZt!uCR~WCI%IxZtV;Y$lOd)%W`n5+DuKOuMu22)=(g;-Z5{1GuX+1`Pz^vet%5&VVusi{5vYhYNq?+PgY{3 zNdDleYuRxRV;kREO3$gP(F2xG?+n38u|_E2&oTGdg6zcIb3DQq5CQRxNC(tWf#ar8 zoBTt!w8Miwx#mpd1G^d>ZT4IV2v#J_F*nekA#H_j@+}>FcovvRNmq}xKMJuZB4(V+ z&3i*NG|>%S?BKWkSy{Tk8DBn`Yob}4 za*Wl3*gK~~#j8S24n2`z3<)F<b%vbycbcVKUp%|u7`m*{YPDZ~5m(r40=KNF!XFp_3;r@L>Mh zB(veA>DSB+*Bo~olZIqgB`0`Em#}kGI*az1tknmTes#to4d+(HFl{Ld%6^%`Zqwm5 zJwr3Oy^LL^$~>{~FoNQkGl9}HIzI=boTx2QMSiKC2=;nOMk=-n(C_gmMiJ(tv2w33?>c+CfM=78TA|BTE=Pz z%E}!+UIHQYTzv;R$PC>x0*hr$W4|9z-pm3^=_&EsdF&Jk}X5Iyp zYY^GEi*y{?LlxT~sKET(!4a!c{b@`mk)rG98E|Gf^-l;C^~@pFu+LGB%&7eWYs7hc^Nv$@71q$t2bT zbpN*Gn+%si0^DM-^0#~qo3!g}{a+@tjbz}ekOqPp{nhsnCy7Y??{mb1El+$ktME&^ z^iGsPTdHqMtK*spDfI@E6X&ZJbKbB7V{tBK&VVvjidKFkl)09VP-Dj1-lAD7`x_RN z=~w8CZSbNbIvk)9g^73{y=Z$kB#;@{gstUJv;2Eu97of>LOx3>O)VGk5n6Pyllo(h zqyigG+qKn{^-+{3EDFNmcN=7y?ni^sR&1Tk!}gtyCiQ-D(CN|CuxEZ3KhbxIyyw&& zI{e;~aW939_s*@ME4Y}kg3qJxu2`)?S6#TFY3WgT6~4K~^!>Vwh*`Mj950WD8``fB z)7f$W;m~plZlcev4p)~bS|9o*5vn*#TF8#LHi$|zr;6|D#`4Pca#SLSWkti2W&Jyq zhxmY@?4H8mqfRt5$mzip{HJsgO-x;o+9VqYDnR`n)k}B{iIB#LU~P91#eNa} zJ_ZuyJguBOfh&cOa#-a_1Hxw^R`>~KS6tJsX#LoI5>RjH`iKIPNw2l>8vjbB)GIY- z#hoDyn(1Jz*aHQ8K@(IgyV%9-I&_YMWS6Y>ze)TQ))DA&E30!pzB`LdI)wAI{zUxS>XGI8+oq&arWwh<8v|5;kHKVnf3=}~M6;2$ z`7Oj>1DY}wz!Lx|)lGjSw0teUtXAm)RV3d5od9?d&gSs9OUbn;rytyY2f05;nO={C zZ8}^a&bAZ{-YMF~0g+GtJ(*mtQjO&UnL76*S;33>gmR;Di^S&cUcV`PV$E&K!lrp1 z0bj29y`?_h0H)SL4{7OJw0>Uw#wn*^G<ji80ObAlZv_1noaUr# zRP|j(ADxzVw5cQ!j*QJ!uF~c=QUMGts0{mYlofZT>C=%Ad1z9-5!?;z(PTSzMV?LP zyh->gCJ|?&yWZ1(+5iY_BVla!skHxj3x?()P<~8Ps}wW}?XJG>+x0?zW>Te8=XpJpwDoB#D%g;rowP;DgD1h+K=jie3PCyog zj8&!aXTX1nOKuyr&u6&%N}J+00~^C1>c@^m@`2>Gpt-oeLnF*NoPv}>^bwbj_E&*b z`1y0aCL~W8>?l-b&R{u#_AMNI(@5!=!%vwT8}5<+G=36)px07&l9qU&hslhZmYVtVG~-uAg9`({GsXt9EKXVU4+Z7#$=??vPx?R)@x#ds~Q!o(vqUCz*Fcim#+c2twcbpB|^145!Fi`-))H11p9v^ym1?smENCJK6y|{FzQKC*P zEox%IP6Hc^)m%CHE`;&YLSU+gQ1eae!y=bM$H&J0mPUL>8*&>Z7n^rmNi?kqLA`jM zyxucH*Iti}vn`GLcagjpg)Ml&y*FMA=8yB!NpF@-K2wQ=d!f{A;!?}P!VHlx66rT& zYNExr-9=t^8w`apDvM6B?e-FGQ!9 zsHma4xo5k(kMTVSTH5C(b=ujr@6Xa_%0BRr_P?+of?CH7FW4VaUyH5j38Han4BE|? zb>Mg}CEg4eZ+v!L2~wENu7Luo_m>P2uO*z0St^1!0vqR|R$8sQ4C!j=KAqGbb6*O) zZ|G-%Id)&VbxF~HgCWOU_=7^WDU1E3gv1TUA7)l6$x~^Wd9?^KtW`I6XR23cGX=#z z3oP|YOQ<-mgknbj?2uz6bp_?o{uv?@b4p;!XgVgtr*@!TdQMutch^IVEqGpp=dCo4mUwW+{CuScPKflL$X2S5~&l%Ex5Pep# zQ8q83*D6;@NK^=q#EPPc`hKn*M8h8(@ghVfW{4oLE+#2~M_pUaFkGf4cD$bI$F0w2 z1qd^K8XYw41(DJIA4LBD0J63k8v1|i ONdLm%Ul%0%&-6bq1P*`z literal 5662 zcmZ{obyO69lgAh7mXugRq)QN7x^uy$yFoy@yF=;j5DDq-l%-<{B_x&(0b%J_8qVL{ ze|PWRy!p<&H}mG-nfa(GqoR=l001n&bXBvSAtC0J9T@;{dI$gz0)PMqhfmI?=AItT zpRAm?9UQc^umPxkYRcCB|J>6D7l49xg#rNl_kbfBd*^M?xqr}?m%rQp9Mw^V5QTw>>OFgK3#7cGRVP+!7y0fE1T`X85hN${t*LpKTdQm zjK4u2hwsa-+wQA<7FSJv>BPReuJVK~Lq{*}=VBf7i*v0~dKM2e@P2S zoFrrZ=%AvSZx3*sEcD+0u{!g=#NJR%s%1tNKt`A731ABZx90otb{XfZ zsd>~5nw0;^QO3n(E$R=4Y%q+<8}FT4H%y#aF6QYo)7pc~ zyL{&#aJvq!6syq1ASI>{0g+!*%K1O$YEN~%*O>L!%AP3`r$H>fUOkt+aC|{L0%;Vd z>@^lSB=1!#A>4SADV8iJ{04WZxXHBi^mNR&lu!CNVZgy;@b* zwh`&}WC}H2s{j}z1!Hf}Q31FVd(e2sE>zh=K*ihuqjKlA*LG*f^gA!yEv|K_*7~t* zfX#tBnI!H(mBW)kU^n_v`r>otST}i^F7#14uq&RP+_^{hUz?}Rju(3fxt6z{-2izp zrcy(%x-z%NtcfhXs8 z_)j|zMfV|ZB-M~z-zSWgk+DeQbHf-;Kd1{vyL23fRMVS=r)H`4pu{27OjkIbf;g>L z+e$I)@O8(erb_ixh8{27R`#OXrigXvb5zacv%Nf88qsS(-mPe&$WMcGf1Ts7CQ%5`$`Y&d{XX{>I3vjRsa%~cS$?Ae+04Raq> zquXId$Dnij=I1(HghFL05R4us=!%|lyirNQsb98S9c2FPbuO8uj>~6TN5g7R#WW|J z{DwF}itjbWhdjbwu{W2f8|u<3*bEk8ID%9tLG%aI_|i$K!cy`xc7v5&0)`SeV+;~3 zalJAORIUYYa=GT$KyMe<>qga>!xT?$Auvfs;6lBmph&N4u^`qvm__0ng5eStQ}gZy zGDKjLAvLyrji_6{>lF3~3JY)~lXl)R?4w4cX9Dg4a8DT+ssAqf7u!&Q0^pNO_*|-m zXc`|{mHtFUGB0FK#To$TWEqb0)^So%oeU75wne{JzRG~8s(UI;BrD7*IFYVOylPj7T z_|LQ)aAe~|y+n~QWTo;Cj}{k1b#UUUr9?0^HQT3qthI_s^E*JzIAI;d-=u#%HBm6$ zo9TDe9hS=hl~y4~G#XfvGRlHWT5#uWNB1o8nd6dupF`LTe-ME8st-_nnw{X#62o&d_C}76)p%s#KDQ09Sw<3z<1*w?agJ<#? zADd2>@FBf>b&89=LVxo~VQMjh9(_M|v^sS7vaDa}qqh;tfm1XKF%c;OM97-Y)wsslUnd}3#vry2vUQWq1KGhF} z5dCh7&@|7xzw;cwO7cz{CB3gme_BPXk7Bh<)QJ7M?ay>!MhMj!eXRiQ?PghC&>uTo ziG}wfU(?Cs-w!rz_`-OY4~p&Yw58yJw@PqHVKxweys^2*I&2f(4 zX075Dx4IcU!O~r`PrFs9)ZgM>Kr-t+X_V@dcFlv?DbROxp8ZD}B!-11Cx@0zPW<@$ z$MClkwMWM~r|?nlPt4#M+Zi*aXm|S zfPI7rKUjS!Na*5Fidl~>2uj8W4Sr&BWPH_SWP_`b2nwTGP&~>9*j}eV;W}p)g;;)y zKXDC&ZKIh3qM1R;q_{O?$sJUJiU$)8lT56NyshgGP%8r&v=NfA-!?9W=qEHJDuzXz=S2_$t#o!? zoYj}6hgyn%arA6VNBsWFBRArbmE{i8KuP_y`BrY^ER(srLs{j#r7>$(wyD&lhDgKc zSMofCC4Ws;ja{%}x)nntK}71*W1lukJ(SZ*tJ~w1l`f_QN9O_JCj3VD<7VmDGTM#| z^I|@*cOkT2-_xCRxqdGrN1t#9FDaM4Hh`XKrZ~j!)7DIjmLYg}MpzmWDSEsZ%GQRN zVHAYN^riWwl+%o8X#=`W898P6vXAt6nmNWD!E3&zsPd zwSq|Ube`%|;logO^T!YQ(4o*;WO>SqNVf#^97cV+D7faPT66~IC)(&-DDY|`dbSnF z>Aoc%GiRuquq!32JT8tI8t*V&c%krUFEmC&RUa4D=vctTe=__eX3?>Qm}772#Ow3+ zrwr4;;i%o6x&AUF!etj#_XB}ID4*;)#j|*^dY?J6I(O!@e1^CR za+ogdq15T*(zdN%VxxWzXJR_D$Ld|XtrZE!|C^cqGV(0n?IBbJDyIU>dxroKz5!4u->T0j2rS`t1-ppfD*p`*=2V7yT5_-OcDygrCIVTga&(QJeuy81?t*fT7>~j zn%{es7p~2O`GDzwKmxrfgSKjD4!;wEEUs#|Mn zR;LzL`@$Yk+Hx`G4zu&G`U@gYOM<=GZj3NFU!ZY=CZUF~_B_8Lykjf$SA&EV7y9al zlZAZ}Tvj#&F>Z&;=%YSC{3h`N1cR;6lhI13=DG_pWtm0dP7>{pvD)+$1jWz6)zg!wMN2uq zzEls(rYt!s*Y~?gzk`1!e6*JF>76*{wNf$hX)!4q??}csgv}}`P|jWPRnb%|w>q&a zyvS^=0R|977S61Dj?m8mr4s`)AlyFHOUa;gI)`ZHV?XLHwvU>-pLAlDM5wIn50sAf z^yEK(#oKHP-#YBYiirxy$C^>+|4EkA&7r2#5~~?n++XX5gg~w;<|;!|f78jqA7KHj z{U7*oNnp5d5bg6aZ)a79$O$C|xR?jSW(Y|Rpk{YuEC(*l;oqh{N8qzoLVRDk7}TKM zKpREuT})~jHq4I9yfur)*p;b_!ClJ(>b<2gq7CQ2sZvx=`=Ri}3^bcVaaQV};z5n1 zel4}I2wWevxJ=D|Z<US2+%hy^ZOohQwyG+uvVH@&t89|o zxx1SgN~C4Nvg+g~Ay*g~^-LQh9gADy;GMrx805CGBIwd>ctgdf-by?UC0gxXP3lYt27Vwv~m?%)hcs-$LC ziO16SC(~6%K&Txtrw*NF2aob7z)t~UEGAUply>O#`muC4?|L*RF!kTAxD{jCSzs6C z>ZCMa?+Gp&pFNf+S#?eiS;!F&+%?{(u1i(9-qpDfW%ljf`#n7*jH%NTG!4_rTZ+rj zoNHzGvgD_=(U|>d=Mfj-nr4Jn#!{^t?i%Yy9PyAH`FezadX~;XTnoumt7nvRuX4BU z|8ic}_~_TG3i)qQ_h~ekzTLuD{`N8j1LE^$Z}YV=a&oD+Vv@(D*%-d9a^xk-l^fzW zjS&edxbDdSb-hSfGgae77dRi>F3KLrHg{&bgbSN!DW@Qbc&yi>e|L(zOBFBsS)?s+N&_E#)~n5` zQlw%KM@P6qMgIa8ki)l$4k{Q7CwUl!;uTGT(mY>w6MVO{LmF>>&L{BP<-Ql^?jhF| zP1oqb4Ng3GPv?p$`MzV}C0p}5y|T(5B6Ur#50UExd6lLJxR@(iRm*=SZMTK}#O^Hv$(UXrnrOmhw@7lY; zHig>}HN&fhjY)+^sJWTxGz#!TBvU3$pq*fP@Dsj=zP%Z+bn5zWmc^sEeHp|xrn`uo z5~xD*@XLQ#N&j(D9aGXqBaf`X);^o5;V8uN@S?9gbiZryOTJXh*zE>ltVw9P5>QYQ zj8n=~&M-|@;9>evnot`wG``TD9!sd>*_N)^7MWp>oVjY6I5BAsM2D@+ML@lMA2FV{ zZj_Kxs9!|MX-$+YcK5AECyOGsrgFigolXI{MB{{)iN`j>$E2ph)$lS993<03-T1ksg~3_ zSR7zag(2%1I^NfiRY$LUoX63rzU*mw0n(;|!`1Ce7MD=?=PiHXU(JHH4q%{20zctsg`{in-aF;_z`;)CQc{we$3*3cGWYiI zbYzlad_O)O{i@`5A5_#)fhpFFUH~xxe@wd!ZDi^+^%o$8pO_e z`Af>b#Lnwb{p#2eu~$XOOJ&9?7u$-~=W&7+f$wS`^%#3fVl5xdyCgGm#qljDn+Yw1 z9#owyml?-zzjTeW(@l}G+g2*|g=u)vtAH!^hWD$6jZyi#FOl=tY4PN6n!fLMbITt) zB$N@cZ8ancTfoOfV|~L%cIVF$c;B0b4VUliYZ-R;c5BZikAW0p@t>4U`TVB=L9W`KhqHh1K+U|snt+if8n@T+*Wq%hcd^6raE~kmF$Av zCc_sL6pqYATxU5|l*e>l)qv?gUVLpTHE3{C94t%0JWo7n}Z3U;yC1048ko)c^nh diff --git a/internal/runtime/z_slice.go b/internal/runtime/z_slice.go index 444d2b45..78789e34 100644 --- a/internal/runtime/z_slice.go +++ b/internal/runtime/z_slice.go @@ -31,11 +31,6 @@ type Slice struct { cap int } -// NilSlice returns a nil slice. -func NilSlice() Slice { - return Slice{nil, 0, 0} -} - // NewSlice creates a new slice. func NewSlice(data unsafe.Pointer, len, cap int) Slice { return Slice{data, len, cap} @@ -55,21 +50,6 @@ func NewSlice3(base unsafe.Pointer, eltSize, cap, i, j, k int) (s Slice) { return } -// SliceLen returns the length of a slice. -func SliceLen(s Slice) int { - return s.len -} - -// SliceCap returns the capacity of a slice. -func SliceCap(s Slice) int { - return s.cap -} - -// SliceData returns the data pointer of a slice. -func SliceData(s Slice) unsafe.Pointer { - return s.data -} - // SliceAppend append elem data and returns a slice. func SliceAppend(src Slice, data unsafe.Pointer, num, etSize int) Slice { if etSize == 0 { diff --git a/internal/runtime/z_string.go b/internal/runtime/z_string.go index 6f9ad609..f4d20906 100644 --- a/internal/runtime/z_string.go +++ b/internal/runtime/z_string.go @@ -35,17 +35,6 @@ type String struct { len int } -// EmptyString returns an empty string. -func EmptyString() String { - return String{nil, 0} -} - -// TODO(xsw): unsafe.String -// NewString creates a new string. -func NewString(data unsafe.Pointer, len int) String { - return String{data, len} -} - // StringCat concatenates two strings. func StringCat(a, b String) String { n := a.len + b.len diff --git a/ssa/expr.go b/ssa/expr.go index ea8f1c5a..49ccc6d9 100644 --- a/ssa/expr.go +++ b/ssa/expr.go @@ -42,7 +42,7 @@ func (v Expr) IsNil() bool { } // Do evaluates the delay expression and returns the result. -func (v Expr) Do(b Builder) Expr { +func (v Expr) Do(b Builder) Expr { // TODO(xsw): can we remove this method? switch vt := v.Type; vt.kind { case vkPhisExpr: e := vt.raw.Type.(*phisExprTy) @@ -195,10 +195,15 @@ func (b Builder) CStr(v string) Expr { // Str returns a Go string constant expression. func (b Builder) Str(v string) (ret Expr) { prog := b.Prog - cstr := b.CStr(v) - ret = b.InlineCall(b.Pkg.rtFunc("NewString"), cstr, prog.Val(len(v))) - ret.Type = prog.String() - return + data := llvm.CreateGlobalStringPtr(b.impl, v) + size := llvm.ConstInt(prog.tyInt(), uint64(len(v)), false) + return Expr{aggregateValue(b.impl, prog.rtString(), data, size), prog.String()} +} + +// unsafe.String(data *byte, size int) string +func (b Builder) String(data, size Expr) Expr { + prog := b.Prog + return Expr{aggregateValue(b.impl, prog.rtString(), data.impl, size.impl), prog.String()} } // ----------------------------------------------------------------------------- @@ -602,13 +607,15 @@ func (b Builder) aggregateAlloc(t Type, flds ...llvm.Value) llvm.Value { // aggregateValue yields the value of the aggregate X with the fields func (b Builder) aggregateValue(t Type, flds ...llvm.Value) Expr { - tll := t.ll - impl := b.impl - ptr := llvm.CreateAlloca(impl, tll) + return Expr{aggregateValue(b.impl, t.ll, flds...), t} +} + +func aggregateValue(b llvm.Builder, tll llvm.Type, flds ...llvm.Value) llvm.Value { + ptr := llvm.CreateAlloca(b, tll) for i, fld := range flds { - impl.CreateStore(fld, llvm.CreateStructGEP(impl, tll, ptr, i)) + b.CreateStore(fld, llvm.CreateStructGEP(b, tll, ptr, i)) } - return Expr{llvm.CreateLoad(b.impl, tll, ptr), t} + return llvm.CreateLoad(b, tll, ptr) } // The MakeClosure instruction yields a closure value whose code is @@ -1060,8 +1067,7 @@ func (b Builder) BuiltinCall(fn string, args ...Expr) (ret Expr) { } } case "String": // unsafe.String - // TODO(xsw): make this a builtin - return b.InlineCall(b.Pkg.rtFunc("NewString"), args[0], args[1]) + return b.String(args[0], args[1]) } panic("todo: " + fn) }