From 508b4d648d6af37d2e8be624fb7ce0b4ab1ecd94 Mon Sep 17 00:00:00 2001 From: xushiwei Date: Tue, 21 May 2024 01:30:15 +0800 Subject: [PATCH 1/2] 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 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 ONdLm%Ul%0%&-6bq1P*`z literal 5662 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 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) } From 556939139b5b569cb84598dfbaebb801b2193260 Mon Sep 17 00:00:00 2001 From: xushiwei Date: Tue, 21 May 2024 01:42:49 +0800 Subject: [PATCH 2/2] x --- internal/abi/llgo_autogen.lla | Bin 4827 -> 5187 bytes internal/runtime/llgo_autogen.lla | Bin 5811 -> 5811 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/internal/abi/llgo_autogen.lla b/internal/abi/llgo_autogen.lla index c349a176716001184331085d5860d529914f129d..505458a89fc15cdac8298a11db7a0a2e357b38b4 100644 GIT binary patch literal 5187 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 delta 4807 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 diff --git a/internal/runtime/llgo_autogen.lla b/internal/runtime/llgo_autogen.lla index b1fcf019bd1353d1e8bd55f2956e38572433b3cb..3bb1386bb3606d542a230b43604d683368583794 100644 GIT binary patch delta 45 zcmdn2yIGefz?+#xgn@y9gTab-B99tdLbrEXV)sT188Id+-pOHNCQJ$4lY7L}0qevI A0{{R3 delta 45 zcmdn2yIGefz?+#xgn@y9gW)sxL>@J^pB>(5e>yf=$cQn0=AIlTX2SHdV{(s}IshmU B4mAJ(