llgo/ssa.Phi: AddIncoming fix

This commit is contained in:
xushiwei
2024-05-24 09:20:58 +08:00
parent 97e38255c6
commit 056ad51c24
12 changed files with 555 additions and 470 deletions

View File

@@ -151,204 +151,225 @@ _llgo_1: ; preds = %_llgo_3
store ptr inttoptr (i64 -1 to ptr), ptr %32, align 8 store ptr inttoptr (i64 -1 to ptr), ptr %32, align 8
%33 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %30, align 8 %33 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %30, align 8
store %"github.com/goplus/llgo/internal/runtime.eface" %33, ptr %28, align 8 store %"github.com/goplus/llgo/internal/runtime.eface" %33, ptr %28, align 8
%34 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %16, i64 16, i64 2, i64 0, i64 2, i64 2) %34 = alloca %"github.com/goplus/llgo/internal/runtime.Slice", align 8
call void @main.println(%"github.com/goplus/llgo/internal/runtime.Slice" %34) %35 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %34, i32 0, i32 0
store ptr %16, ptr %35, align 8
%36 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %34, i32 0, i32 1
store i64 2, ptr %36, align 4
%37 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %34, i32 0, i32 2
store i64 2, ptr %37, align 4
%38 = load %"github.com/goplus/llgo/internal/runtime.Slice", ptr %34, align 8
call void @main.println(%"github.com/goplus/llgo/internal/runtime.Slice" %38)
br label %_llgo_2 br label %_llgo_2
_llgo_2: ; preds = %_llgo_3, %_llgo_1, %_llgo_0 _llgo_2: ; preds = %_llgo_3, %_llgo_1, %_llgo_0
%35 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocZ"(i64 48) %39 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocZ"(i64 48)
%36 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %35, i64 0 %40 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %39, i64 0
%37 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 %41 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8
%38 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %37, i32 0, i32 0 %42 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %41, i32 0, i32 0
store ptr @3, ptr %38, align 8 store ptr @3, ptr %42, align 8
%39 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %37, i32 0, i32 1 %43 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %41, i32 0, i32 1
store i64 8, ptr %39, align 4 store i64 8, ptr %43, align 4
%40 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %37, align 8 %44 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %41, align 8
%41 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 24) %45 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 24)
%42 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocU"(i64 16) %46 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocU"(i64 16)
store %"github.com/goplus/llgo/internal/runtime.String" %40, ptr %42, align 8 store %"github.com/goplus/llgo/internal/runtime.String" %44, ptr %46, align 8
%43 = alloca %"github.com/goplus/llgo/internal/runtime.eface", align 8 %47 = alloca %"github.com/goplus/llgo/internal/runtime.eface", align 8
%44 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %43, i32 0, i32 0 %48 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %47, i32 0, i32 0
store ptr %41, ptr %44, align 8 store ptr %45, ptr %48, align 8
%45 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %43, i32 0, i32 1 %49 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %47, i32 0, i32 1
store ptr %42, ptr %45, align 8 store ptr %46, ptr %49, align 8
%46 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %43, align 8 %50 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %47, align 8
store %"github.com/goplus/llgo/internal/runtime.eface" %46, ptr %36, align 8 store %"github.com/goplus/llgo/internal/runtime.eface" %50, ptr %40, align 8
%47 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %35, i64 1 %51 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %39, i64 1
%48 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 1) %52 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 1)
%49 = alloca %"github.com/goplus/llgo/internal/runtime.eface", align 8 %53 = alloca %"github.com/goplus/llgo/internal/runtime.eface", align 8
%50 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %49, i32 0, i32 0 %54 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %53, i32 0, i32 0
store ptr %48, ptr %50, align 8 store ptr %52, ptr %54, align 8
%51 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %49, i32 0, i32 1 %55 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %53, i32 0, i32 1
store ptr inttoptr (i64 -1 to ptr), ptr %51, align 8 store ptr inttoptr (i64 -1 to ptr), ptr %55, align 8
%52 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %49, align 8 %56 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %53, align 8
store %"github.com/goplus/llgo/internal/runtime.eface" %52, ptr %47, align 8 store %"github.com/goplus/llgo/internal/runtime.eface" %56, ptr %51, align 8
%53 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %35, i64 2 %57 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %39, i64 2
%54 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 1) %58 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 1)
%55 = alloca %"github.com/goplus/llgo/internal/runtime.eface", align 8 %59 = alloca %"github.com/goplus/llgo/internal/runtime.eface", align 8
%56 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %55, i32 0, i32 0 %60 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %59, i32 0, i32 0
store ptr %54, ptr %56, align 8 store ptr %58, ptr %60, align 8
%57 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %55, i32 0, i32 1 %61 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %59, i32 0, i32 1
store ptr inttoptr (i64 -1 to ptr), ptr %57, align 8 store ptr inttoptr (i64 -1 to ptr), ptr %61, align 8
%58 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %55, align 8 %62 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %59, align 8
store %"github.com/goplus/llgo/internal/runtime.eface" %58, ptr %53, align 8 store %"github.com/goplus/llgo/internal/runtime.eface" %62, ptr %57, align 8
%59 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %35, i64 16, i64 3, i64 0, i64 3, i64 3) %63 = alloca %"github.com/goplus/llgo/internal/runtime.Slice", align 8
call void @main.println(%"github.com/goplus/llgo/internal/runtime.Slice" %59) %64 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %63, i32 0, i32 0
%60 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocZ"(i64 256) store ptr %39, ptr %64, align 8
%61 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %60, i64 0 %65 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %63, i32 0, i32 1
%62 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 1) store i64 3, ptr %65, align 4
%63 = alloca %"github.com/goplus/llgo/internal/runtime.eface", align 8 %66 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %63, i32 0, i32 2
%64 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %63, i32 0, i32 0 store i64 3, ptr %66, align 4
store ptr %62, ptr %64, align 8 %67 = load %"github.com/goplus/llgo/internal/runtime.Slice", ptr %63, align 8
%65 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %63, i32 0, i32 1 call void @main.println(%"github.com/goplus/llgo/internal/runtime.Slice" %67)
store ptr inttoptr (i64 -1 to ptr), ptr %65, align 8 %68 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocZ"(i64 256)
%66 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %63, align 8 %69 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %68, i64 0
store %"github.com/goplus/llgo/internal/runtime.eface" %66, ptr %61, align 8 %70 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 1)
%67 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %60, i64 1 %71 = alloca %"github.com/goplus/llgo/internal/runtime.eface", align 8
%68 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 1) %72 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %71, i32 0, i32 0
%69 = alloca %"github.com/goplus/llgo/internal/runtime.eface", align 8 store ptr %70, ptr %72, align 8
%70 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %69, i32 0, i32 0 %73 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %71, i32 0, i32 1
store ptr %68, ptr %70, align 8 store ptr inttoptr (i64 -1 to ptr), ptr %73, align 8
%71 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %69, i32 0, i32 1 %74 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %71, align 8
store ptr null, ptr %71, align 8 store %"github.com/goplus/llgo/internal/runtime.eface" %74, ptr %69, align 8
%72 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %69, align 8 %75 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %68, i64 1
store %"github.com/goplus/llgo/internal/runtime.eface" %72, ptr %67, align 8 %76 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 1)
%73 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %60, i64 2 %77 = alloca %"github.com/goplus/llgo/internal/runtime.eface", align 8
%74 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 5) %78 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %77, i32 0, i32 0
%75 = alloca %"github.com/goplus/llgo/internal/runtime.eface", align 8 store ptr %76, ptr %78, align 8
%76 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %75, i32 0, i32 0 %79 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %77, i32 0, i32 1
store ptr %74, ptr %76, align 8 store ptr null, ptr %79, align 8
%77 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %75, i32 0, i32 1 %80 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %77, align 8
store ptr inttoptr (i64 97 to ptr), ptr %77, align 8 store %"github.com/goplus/llgo/internal/runtime.eface" %80, ptr %75, align 8
%78 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %75, align 8 %81 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %68, i64 2
store %"github.com/goplus/llgo/internal/runtime.eface" %78, ptr %73, align 8 %82 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 5)
%79 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %60, i64 3 %83 = alloca %"github.com/goplus/llgo/internal/runtime.eface", align 8
%80 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 5) %84 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %83, i32 0, i32 0
%81 = alloca %"github.com/goplus/llgo/internal/runtime.eface", align 8 store ptr %82, ptr %84, align 8
%82 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %81, i32 0, i32 0 %85 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %83, i32 0, i32 1
store ptr %80, ptr %82, align 8 store ptr inttoptr (i64 97 to ptr), ptr %85, align 8
%83 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %81, i32 0, i32 1 %86 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %83, align 8
store ptr inttoptr (i64 65 to ptr), ptr %83, align 8 store %"github.com/goplus/llgo/internal/runtime.eface" %86, ptr %81, align 8
%84 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %81, align 8 %87 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %68, i64 3
store %"github.com/goplus/llgo/internal/runtime.eface" %84, ptr %79, align 8 %88 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 5)
%85 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %60, i64 4 %89 = alloca %"github.com/goplus/llgo/internal/runtime.eface", align 8
%86 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 5) %90 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %89, i32 0, i32 0
%87 = alloca %"github.com/goplus/llgo/internal/runtime.eface", align 8 store ptr %88, ptr %90, align 8
%88 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %87, i32 0, i32 0 %91 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %89, i32 0, i32 1
store ptr %86, ptr %88, align 8 store ptr inttoptr (i64 65 to ptr), ptr %91, align 8
%89 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %87, i32 0, i32 1 %92 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %89, align 8
store ptr inttoptr (i64 20013 to ptr), ptr %89, align 8 store %"github.com/goplus/llgo/internal/runtime.eface" %92, ptr %87, align 8
%90 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %87, align 8 %93 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %68, i64 4
store %"github.com/goplus/llgo/internal/runtime.eface" %90, ptr %85, align 8 %94 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 5)
%91 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %60, i64 5 %95 = alloca %"github.com/goplus/llgo/internal/runtime.eface", align 8
%92 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 3) %96 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %95, i32 0, i32 0
%93 = alloca %"github.com/goplus/llgo/internal/runtime.eface", align 8 store ptr %94, ptr %96, align 8
%94 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %93, i32 0, i32 0 %97 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %95, i32 0, i32 1
store ptr %92, ptr %94, align 8 store ptr inttoptr (i64 20013 to ptr), ptr %97, align 8
%95 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %93, i32 0, i32 1 %98 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %95, align 8
store ptr inttoptr (i64 1 to ptr), ptr %95, align 8 store %"github.com/goplus/llgo/internal/runtime.eface" %98, ptr %93, align 8
%96 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %93, align 8 %99 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %68, i64 5
store %"github.com/goplus/llgo/internal/runtime.eface" %96, ptr %91, align 8 %100 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 3)
%97 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %60, i64 6 %101 = alloca %"github.com/goplus/llgo/internal/runtime.eface", align 8
%98 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 4) %102 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %101, i32 0, i32 0
%99 = alloca %"github.com/goplus/llgo/internal/runtime.eface", align 8 store ptr %100, ptr %102, align 8
%100 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %99, i32 0, i32 0 %103 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %101, i32 0, i32 1
store ptr %98, ptr %100, align 8 store ptr inttoptr (i64 1 to ptr), ptr %103, align 8
%101 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %99, i32 0, i32 1 %104 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %101, align 8
store ptr inttoptr (i64 2 to ptr), ptr %101, align 8 store %"github.com/goplus/llgo/internal/runtime.eface" %104, ptr %99, align 8
%102 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %99, align 8 %105 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %68, i64 6
store %"github.com/goplus/llgo/internal/runtime.eface" %102, ptr %97, align 8 %106 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 4)
%103 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %60, i64 7 %107 = alloca %"github.com/goplus/llgo/internal/runtime.eface", align 8
%104 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 5) %108 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %107, i32 0, i32 0
%105 = alloca %"github.com/goplus/llgo/internal/runtime.eface", align 8 store ptr %106, ptr %108, align 8
%106 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %105, i32 0, i32 0 %109 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %107, i32 0, i32 1
store ptr %104, ptr %106, align 8 store ptr inttoptr (i64 2 to ptr), ptr %109, align 8
%107 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %105, i32 0, i32 1 %110 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %107, align 8
store ptr inttoptr (i64 3 to ptr), ptr %107, align 8 store %"github.com/goplus/llgo/internal/runtime.eface" %110, ptr %105, align 8
%108 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %105, align 8 %111 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %68, i64 7
store %"github.com/goplus/llgo/internal/runtime.eface" %108, ptr %103, align 8 %112 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 5)
%109 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %60, i64 8 %113 = alloca %"github.com/goplus/llgo/internal/runtime.eface", align 8
%110 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 6) %114 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %113, i32 0, i32 0
%111 = alloca %"github.com/goplus/llgo/internal/runtime.eface", align 8 store ptr %112, ptr %114, align 8
%112 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %111, i32 0, i32 0 %115 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %113, i32 0, i32 1
store ptr %110, ptr %112, align 8 store ptr inttoptr (i64 3 to ptr), ptr %115, align 8
%113 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %111, i32 0, i32 1 %116 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %113, align 8
store ptr inttoptr (i64 4 to ptr), ptr %113, align 8 store %"github.com/goplus/llgo/internal/runtime.eface" %116, ptr %111, align 8
%114 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %111, align 8 %117 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %68, i64 8
store %"github.com/goplus/llgo/internal/runtime.eface" %114, ptr %109, align 8 %118 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 6)
%115 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %60, i64 9 %119 = alloca %"github.com/goplus/llgo/internal/runtime.eface", align 8
%116 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 2) %120 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %119, i32 0, i32 0
%117 = alloca %"github.com/goplus/llgo/internal/runtime.eface", align 8 store ptr %118, ptr %120, align 8
%118 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %117, i32 0, i32 0 %121 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %119, i32 0, i32 1
store ptr %116, ptr %118, align 8 store ptr inttoptr (i64 4 to ptr), ptr %121, align 8
%119 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %117, i32 0, i32 1 %122 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %119, align 8
store ptr inttoptr (i64 5 to ptr), ptr %119, align 8 store %"github.com/goplus/llgo/internal/runtime.eface" %122, ptr %117, align 8
%120 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %117, align 8 %123 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %68, i64 9
store %"github.com/goplus/llgo/internal/runtime.eface" %120, ptr %115, align 8 %124 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 2)
%121 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %60, i64 10 %125 = alloca %"github.com/goplus/llgo/internal/runtime.eface", align 8
%122 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 8) %126 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %125, i32 0, i32 0
%123 = alloca %"github.com/goplus/llgo/internal/runtime.eface", align 8 store ptr %124, ptr %126, align 8
%124 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %123, i32 0, i32 0 %127 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %125, i32 0, i32 1
store ptr %122, ptr %124, align 8 store ptr inttoptr (i64 5 to ptr), ptr %127, align 8
%125 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %123, i32 0, i32 1 %128 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %125, align 8
store ptr inttoptr (i64 1 to ptr), ptr %125, align 8 store %"github.com/goplus/llgo/internal/runtime.eface" %128, ptr %123, align 8
%126 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %123, align 8 %129 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %68, i64 10
store %"github.com/goplus/llgo/internal/runtime.eface" %126, ptr %121, align 8 %130 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 8)
%127 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %60, i64 11 %131 = alloca %"github.com/goplus/llgo/internal/runtime.eface", align 8
%128 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 9) %132 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %131, i32 0, i32 0
%129 = alloca %"github.com/goplus/llgo/internal/runtime.eface", align 8 store ptr %130, ptr %132, align 8
%130 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %129, i32 0, i32 0 %133 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %131, i32 0, i32 1
store ptr %128, ptr %130, align 8 store ptr inttoptr (i64 1 to ptr), ptr %133, align 8
%131 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %129, i32 0, i32 1 %134 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %131, align 8
store ptr inttoptr (i64 2 to ptr), ptr %131, align 8 store %"github.com/goplus/llgo/internal/runtime.eface" %134, ptr %129, align 8
%132 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %129, align 8 %135 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %68, i64 11
store %"github.com/goplus/llgo/internal/runtime.eface" %132, ptr %127, align 8 %136 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 9)
%133 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %60, i64 12 %137 = alloca %"github.com/goplus/llgo/internal/runtime.eface", align 8
%134 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 10) %138 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %137, i32 0, i32 0
%135 = alloca %"github.com/goplus/llgo/internal/runtime.eface", align 8 store ptr %136, ptr %138, align 8
%136 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %135, i32 0, i32 0 %139 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %137, i32 0, i32 1
store ptr %134, ptr %136, align 8 store ptr inttoptr (i64 2 to ptr), ptr %139, align 8
%137 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %135, i32 0, i32 1 %140 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %137, align 8
store ptr inttoptr (i64 3 to ptr), ptr %137, align 8 store %"github.com/goplus/llgo/internal/runtime.eface" %140, ptr %135, align 8
%138 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %135, align 8 %141 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %68, i64 12
store %"github.com/goplus/llgo/internal/runtime.eface" %138, ptr %133, align 8 %142 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 10)
%139 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %60, i64 13 %143 = alloca %"github.com/goplus/llgo/internal/runtime.eface", align 8
%140 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 11) %144 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %143, i32 0, i32 0
%141 = alloca %"github.com/goplus/llgo/internal/runtime.eface", align 8 store ptr %142, ptr %144, align 8
%142 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %141, i32 0, i32 0 %145 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %143, i32 0, i32 1
store ptr %140, ptr %142, align 8 store ptr inttoptr (i64 3 to ptr), ptr %145, align 8
%143 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %141, i32 0, i32 1 %146 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %143, align 8
store ptr inttoptr (i64 4 to ptr), ptr %143, align 8 store %"github.com/goplus/llgo/internal/runtime.eface" %146, ptr %141, align 8
%144 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %141, align 8 %147 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %68, i64 13
store %"github.com/goplus/llgo/internal/runtime.eface" %144, ptr %139, align 8 %148 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 11)
%145 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %60, i64 14 %149 = alloca %"github.com/goplus/llgo/internal/runtime.eface", align 8
%146 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 12) %150 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %149, i32 0, i32 0
%147 = alloca %"github.com/goplus/llgo/internal/runtime.eface", align 8 store ptr %148, ptr %150, align 8
%148 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %147, i32 0, i32 0 %151 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %149, i32 0, i32 1
store ptr %146, ptr %148, align 8 store ptr inttoptr (i64 4 to ptr), ptr %151, align 8
%149 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %147, i32 0, i32 1 %152 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %149, align 8
store ptr inttoptr (i64 5 to ptr), ptr %149, align 8 store %"github.com/goplus/llgo/internal/runtime.eface" %152, ptr %147, align 8
%150 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %147, align 8 %153 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %68, i64 14
store %"github.com/goplus/llgo/internal/runtime.eface" %150, ptr %145, align 8 %154 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 12)
%151 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %60, i64 15 %155 = alloca %"github.com/goplus/llgo/internal/runtime.eface", align 8
%152 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 %156 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %155, i32 0, i32 0
%153 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %152, i32 0, i32 0 store ptr %154, ptr %156, align 8
store ptr @4, ptr %153, align 8 %157 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %155, i32 0, i32 1
%154 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %152, i32 0, i32 1 store ptr inttoptr (i64 5 to ptr), ptr %157, align 8
store i64 4, ptr %154, align 4 %158 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %155, align 8
%155 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %152, align 8 store %"github.com/goplus/llgo/internal/runtime.eface" %158, ptr %153, align 8
%156 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 24) %159 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %68, i64 15
%157 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocU"(i64 16) %160 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8
store %"github.com/goplus/llgo/internal/runtime.String" %155, ptr %157, align 8 %161 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %160, i32 0, i32 0
%158 = alloca %"github.com/goplus/llgo/internal/runtime.eface", align 8 store ptr @4, ptr %161, align 8
%159 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %158, i32 0, i32 0 %162 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %160, i32 0, i32 1
store ptr %156, ptr %159, align 8 store i64 4, ptr %162, align 4
%160 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %158, i32 0, i32 1 %163 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %160, align 8
store ptr %157, ptr %160, align 8 %164 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 24)
%161 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %158, align 8 %165 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocU"(i64 16)
store %"github.com/goplus/llgo/internal/runtime.eface" %161, ptr %151, align 8 store %"github.com/goplus/llgo/internal/runtime.String" %163, ptr %165, align 8
%162 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %60, i64 16, i64 16, i64 0, i64 16, i64 16) %166 = alloca %"github.com/goplus/llgo/internal/runtime.eface", align 8
call void @main.println(%"github.com/goplus/llgo/internal/runtime.Slice" %162) %167 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %166, i32 0, i32 0
store ptr %164, ptr %167, align 8
%168 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %166, i32 0, i32 1
store ptr %165, ptr %168, align 8
%169 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %166, align 8
store %"github.com/goplus/llgo/internal/runtime.eface" %169, ptr %159, align 8
%170 = alloca %"github.com/goplus/llgo/internal/runtime.Slice", align 8
%171 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %170, i32 0, i32 0
store ptr %68, ptr %171, align 8
%172 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %170, i32 0, i32 1
store i64 16, ptr %172, align 4
%173 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %170, i32 0, i32 2
store i64 16, ptr %173, align 4
%174 = load %"github.com/goplus/llgo/internal/runtime.Slice", ptr %170, align 8
call void @main.println(%"github.com/goplus/llgo/internal/runtime.Slice" %174)
ret i32 0 ret i32 0
_llgo_3: ; preds = %_llgo_0 _llgo_3: ; preds = %_llgo_0
@@ -1021,8 +1042,15 @@ _llgo_29: ; preds = %_llgo_28, %_llgo_26
%86 = add i8 %85, 48 %86 = add i8 %85, 48
%87 = getelementptr inbounds i8, ptr %20, i64 13 %87 = getelementptr inbounds i8, ptr %20, i64 13
store i8 %86, ptr %87, align 1 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) %88 = alloca %"github.com/goplus/llgo/internal/runtime.Slice", align 8
call void @main.gwrite(%"github.com/goplus/llgo/internal/runtime.Slice" %88) %89 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %88, i32 0, i32 0
store ptr %20, ptr %89, align 8
%90 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %88, i32 0, i32 1
store i64 14, ptr %90, align 4
%91 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %88, i32 0, i32 2
store i64 14, ptr %91, align 4
%92 = load %"github.com/goplus/llgo/internal/runtime.Slice", ptr %88, align 8
call void @main.gwrite(%"github.com/goplus/llgo/internal/runtime.Slice" %92)
ret void ret void
} }
@@ -1236,6 +1264,6 @@ declare ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64)
declare ptr @"github.com/goplus/llgo/internal/runtime.AllocU"(i64) declare ptr @"github.com/goplus/llgo/internal/runtime.AllocU"(i64)
declare %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr, i64, i64, i64, i64, i64)
declare void @"github.com/goplus/llgo/internal/runtime.AssertIndexRange"(i1) declare void @"github.com/goplus/llgo/internal/runtime.AssertIndexRange"(i1)
declare %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr, i64, i64, i64, i64, i64)

View File

@@ -58,8 +58,15 @@ _llgo_0:
store ptr inttoptr (i64 3 to ptr), ptr %19, align 8 store ptr inttoptr (i64 3 to ptr), ptr %19, align 8
%20 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %17, align 8 %20 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %17, align 8
store %"github.com/goplus/llgo/internal/runtime.eface" %20, ptr %15, align 8 store %"github.com/goplus/llgo/internal/runtime.eface" %20, ptr %15, align 8
%21 = 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) %21 = alloca %"github.com/goplus/llgo/internal/runtime.Slice", align 8
call void @main.test(%"github.com/goplus/llgo/internal/runtime.Slice" %21) %22 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %21, i32 0, i32 0
store ptr %2, ptr %22, align 8
%23 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %21, i32 0, i32 1
store i64 3, ptr %23, align 4
%24 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %21, i32 0, i32 2
store i64 3, ptr %24, align 4
%25 = load %"github.com/goplus/llgo/internal/runtime.Slice", ptr %21, align 8
call void @main.test(%"github.com/goplus/llgo/internal/runtime.Slice" %25)
ret i32 0 ret i32 0
} }
@@ -69,7 +76,7 @@ _llgo_0:
br label %_llgo_1 br label %_llgo_1
_llgo_1: ; preds = %_llgo_4, %_llgo_0 _llgo_1: ; preds = %_llgo_4, %_llgo_0
%2 = phi i64 [ -1, %_llgo_0 ], [ %3, %_llgo_2 ] %2 = phi i64 [ -1, %_llgo_0 ], [ %3, %_llgo_4 ]
%3 = add i64 %2, 1 %3 = add i64 %2, 1
%4 = icmp slt i64 %3, %1 %4 = icmp slt i64 %3, %1
br i1 %4, label %_llgo_2, label %_llgo_3 br i1 %4, label %_llgo_2, label %_llgo_3
@@ -111,8 +118,6 @@ declare ptr @"github.com/goplus/llgo/internal/runtime.AllocZ"(i64)
declare ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64) declare ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64)
declare %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr, i64, i64, i64, i64, i64)
declare void @"github.com/goplus/llgo/internal/runtime.AssertIndexRange"(i1) declare void @"github.com/goplus/llgo/internal/runtime.AssertIndexRange"(i1)
declare void @"github.com/goplus/llgo/internal/runtime.TracePanic"(%"github.com/goplus/llgo/internal/runtime.eface") declare void @"github.com/goplus/llgo/internal/runtime.TracePanic"(%"github.com/goplus/llgo/internal/runtime.eface")

View File

@@ -55,33 +55,40 @@ _llgo_0:
store i64 3, ptr %5, align 4 store i64 3, ptr %5, align 4
%6 = getelementptr inbounds i64, ptr %2, i64 3 %6 = getelementptr inbounds i64, ptr %2, i64 3
store i64 4, ptr %6, align 4 store i64 4, ptr %6, align 4
%7 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %2, i64 8, i64 4, i64 0, i64 4, i64 4) %7 = alloca %"github.com/goplus/llgo/internal/runtime.Slice", align 8
%8 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocZ"(i64 32) %8 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %7, i32 0, i32 0
%9 = getelementptr inbounds i64, ptr %8, i64 0 store ptr %2, ptr %8, align 8
%10 = getelementptr inbounds i64, ptr %8, i64 1 %9 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %7, i32 0, i32 1
%11 = getelementptr inbounds i64, ptr %8, i64 2 store i64 4, ptr %9, align 4
%12 = getelementptr inbounds i64, ptr %8, i64 3 %10 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %7, i32 0, i32 2
store i64 1, ptr %9, align 4 store i64 4, ptr %10, align 4
store i64 2, ptr %10, align 4 %11 = load %"github.com/goplus/llgo/internal/runtime.Slice", ptr %7, align 8
store i64 3, ptr %11, align 4 %12 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocZ"(i64 32)
store i64 4, ptr %12, align 4 %13 = getelementptr inbounds i64, ptr %12, i64 0
%13 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocZ"(i64 10) %14 = getelementptr inbounds i64, ptr %12, i64 1
%14 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %13, i64 1, i64 10, i64 0, i64 4, i64 10) %15 = getelementptr inbounds i64, ptr %12, i64 2
%15 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %7, 1 %16 = getelementptr inbounds i64, ptr %12, i64 3
%16 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %7, 2 store i64 1, ptr %13, align 4
call void @"github.com/goplus/llgo/internal/runtime.PrintSlice"(%"github.com/goplus/llgo/internal/runtime.Slice" %7) store i64 2, ptr %14, align 4
store i64 3, ptr %15, align 4
store i64 4, ptr %16, align 4
%17 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocZ"(i64 10)
%18 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %17, i64 1, i64 10, i64 0, i64 4, i64 10)
%19 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %11, 1
%20 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %11, 2
call void @"github.com/goplus/llgo/internal/runtime.PrintSlice"(%"github.com/goplus/llgo/internal/runtime.Slice" %11)
call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32)
call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %15) call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %19)
call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32)
call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %16) call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %20)
call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 10) call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 10)
%17 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %14, 1 %21 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %18, 1
%18 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %14, 2 %22 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %18, 2
call void @"github.com/goplus/llgo/internal/runtime.PrintSlice"(%"github.com/goplus/llgo/internal/runtime.Slice" %14) call void @"github.com/goplus/llgo/internal/runtime.PrintSlice"(%"github.com/goplus/llgo/internal/runtime.Slice" %18)
call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32)
call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %17) call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %21)
call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32)
call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %18) call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %22)
call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 10) call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 10)
call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 4) call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 4)
call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32)
@@ -91,166 +98,187 @@ _llgo_0:
call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32)
call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 4) call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 4)
call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 10) call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 10)
%19 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocZ"(i64 32) %23 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocZ"(i64 32)
%20 = getelementptr inbounds i64, ptr %19, i64 0 %24 = getelementptr inbounds i64, ptr %23, i64 0
store i64 1, ptr %20, align 4 store i64 1, ptr %24, align 4
%21 = getelementptr inbounds i64, ptr %19, i64 1 %25 = getelementptr inbounds i64, ptr %23, i64 1
store i64 2, ptr %21, align 4 store i64 2, ptr %25, align 4
%22 = getelementptr inbounds i64, ptr %19, i64 2 %26 = getelementptr inbounds i64, ptr %23, i64 2
store i64 3, ptr %22, align 4 store i64 3, ptr %26, align 4
%23 = getelementptr inbounds i64, ptr %19, i64 3 %27 = getelementptr inbounds i64, ptr %23, i64 3
store i64 4, ptr %23, align 4 store i64 4, ptr %27, align 4
%24 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %19, i64 8, i64 4, i64 0, i64 4, i64 4) %28 = alloca %"github.com/goplus/llgo/internal/runtime.Slice", align 8
%25 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %24, 1 %29 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %28, i32 0, i32 0
call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %25) store ptr %23, ptr %29, align 8
%30 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %28, i32 0, i32 1
store i64 4, ptr %30, align 4
%31 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %28, i32 0, i32 2
store i64 4, ptr %31, align 4
%32 = load %"github.com/goplus/llgo/internal/runtime.Slice", ptr %28, align 8
%33 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %32, 1
call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %33)
call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32)
call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 4) call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 4)
call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 10) call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 10)
%26 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %7, 2 %34 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %11, 2
%27 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %7, 2 %35 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %11, 2
%28 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %7, 0 %36 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %11, 0
%29 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %28, i64 8, i64 %26, i64 1, i64 %27, i64 %26) %37 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %36, i64 32, i64 %34, i64 1, i64 %35, i64 %34)
%30 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %29, 1 %38 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %37, 1
%31 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %7, 2 %39 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %11, 2
%32 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %7, 2 %40 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %11, 2
%33 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %7, 0 %41 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %11, 0
%34 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %33, i64 8, i64 %31, i64 1, i64 %32, i64 %31) %42 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %41, i64 32, i64 %39, i64 1, i64 %40, i64 %39)
%35 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %34, 2
%36 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %7, 2
%37 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %7, 0
%38 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %37, i64 8, i64 %36, i64 1, i64 2, i64 %36)
%39 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %38, 1
%40 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %7, 2
%41 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %7, 0
%42 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %41, i64 8, i64 %40, i64 1, i64 2, i64 %40)
%43 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %42, 2 %43 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %42, 2
%44 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %7, 2 %44 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %11, 2
%45 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %7, 0 %45 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %11, 0
%46 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %45, i64 8, i64 %44, i64 1, i64 2, i64 2) %46 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %45, i64 32, i64 %44, i64 1, i64 2, i64 %44)
%47 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %46, 1 %47 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %46, 1
%48 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %7, 2 %48 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %11, 2
%49 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %7, 0 %49 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %11, 0
%50 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %49, i64 8, i64 %48, i64 1, i64 2, i64 2) %50 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %49, i64 32, i64 %48, i64 1, i64 2, i64 %48)
%51 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %50, 2 %51 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %50, 2
call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %30) %52 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %11, 2
call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) %53 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %11, 0
call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %35) %54 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %53, i64 32, i64 %52, i64 1, i64 2, i64 2)
call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) %55 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %54, 1
call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %39) %56 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %11, 2
%57 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %11, 0
%58 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %57, i64 32, i64 %56, i64 1, i64 2, i64 2)
%59 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %58, 2
call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %38)
call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32)
call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %43) call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %43)
call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32)
call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %47) call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %47)
call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32)
call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %51) call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %51)
call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 10)
%52 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %8, i64 8, i64 4, i64 1, i64 4, i64 4)
%53 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %52, 1
%54 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %8, i64 8, i64 4, i64 1, i64 4, i64 4)
%55 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %54, 2
%56 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %8, i64 8, i64 4, i64 1, i64 2, i64 4)
%57 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %56, 1
%58 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %8, i64 8, i64 4, i64 1, i64 2, i64 4)
%59 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %58, 2
%60 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %8, i64 8, i64 4, i64 1, i64 2, i64 2)
%61 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %60, 1
%62 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %8, i64 8, i64 4, i64 1, i64 2, i64 2)
%63 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %62, 2
call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %53)
call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32)
call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %55) call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %55)
call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32)
call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %57)
call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32)
call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %59) call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %59)
call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 10)
%60 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %12, i64 8, i64 4, i64 1, i64 4, i64 4)
%61 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %60, 1
%62 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %12, i64 8, i64 4, i64 1, i64 4, i64 4)
%63 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %62, 2
%64 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %12, i64 8, i64 4, i64 1, i64 2, i64 4)
%65 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %64, 1
%66 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %12, i64 8, i64 4, i64 1, i64 2, i64 4)
%67 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %66, 2
%68 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %12, i64 8, i64 4, i64 1, i64 2, i64 2)
%69 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %68, 1
%70 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %12, i64 8, i64 4, i64 1, i64 2, i64 2)
%71 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %70, 2
call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %61) call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %61)
call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32)
call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %63) call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %63)
call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 10)
%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.PrintByte"(i8 32)
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.PrintInt"(i64 %65)
call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) 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" %74) call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %67)
call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32)
call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %81) call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %69)
call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32)
call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %71)
call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 10) call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 10)
%86 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocZ"(i64 32) %72 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8
%87 = getelementptr inbounds i64, ptr %86, i64 0 %73 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %72, i32 0, i32 0
store i64 5, ptr %87, align 4 store ptr @0, ptr %73, align 8
%88 = getelementptr inbounds i64, ptr %86, i64 1 %74 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %72, i32 0, i32 1
store i64 6, ptr %88, align 4 store i64 5, ptr %74, align 4
%89 = getelementptr inbounds i64, ptr %86, i64 2 %75 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %72, align 8
store i64 7, ptr %89, align 4 %76 = extractvalue %"github.com/goplus/llgo/internal/runtime.String" %75, 1
%90 = getelementptr inbounds i64, ptr %86, i64 3 %77 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewStringSlice"(%"github.com/goplus/llgo/internal/runtime.String" %75, i64 1, i64 %76)
store i64 8, ptr %90, align 4 %78 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8
%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) %79 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %78, i32 0, i32 0
%92 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %91, 0 store ptr @1, ptr %79, align 8
%93 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %91, 1 %80 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %78, i32 0, i32 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) store i64 5, ptr %80, align 4
call void @"github.com/goplus/llgo/internal/runtime.PrintSlice"(%"github.com/goplus/llgo/internal/runtime.Slice" %94) %81 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %78, align 8
%82 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewStringSlice"(%"github.com/goplus/llgo/internal/runtime.String" %81, i64 1, i64 2)
%83 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8
%84 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %83, i32 0, i32 0
store ptr @2, ptr %84, align 8
%85 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %83, i32 0, i32 1
store i64 5, ptr %85, align 4
%86 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %83, align 8
%87 = extractvalue %"github.com/goplus/llgo/internal/runtime.String" %86, 1
%88 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/internal/runtime.NewStringSlice"(%"github.com/goplus/llgo/internal/runtime.String" %86, i64 5, i64 %87)
%89 = extractvalue %"github.com/goplus/llgo/internal/runtime.String" %88, 1
%90 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8
%91 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %90, i32 0, i32 0
store ptr @3, ptr %91, align 8
%92 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %90, i32 0, i32 1
store i64 5, ptr %92, align 4
%93 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %90, align 8
call void @"github.com/goplus/llgo/internal/runtime.PrintString"(%"github.com/goplus/llgo/internal/runtime.String" %93)
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" %77)
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" %82)
call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32)
call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %89)
call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 10) call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 10)
%95 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocZ"(i64 3) %94 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocZ"(i64 32)
%96 = getelementptr inbounds i8, ptr %95, i64 0 %95 = getelementptr inbounds i64, ptr %94, i64 0
store i8 97, ptr %96, align 1 store i64 5, ptr %95, align 4
%97 = getelementptr inbounds i8, ptr %95, i64 1 %96 = getelementptr inbounds i64, ptr %94, i64 1
store i8 98, ptr %97, align 1 store i64 6, ptr %96, align 4
%98 = getelementptr inbounds i8, ptr %95, i64 2 %97 = getelementptr inbounds i64, ptr %94, i64 2
store i8 99, ptr %98, align 1 store i64 7, ptr %97, align 4
%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) %98 = getelementptr inbounds i64, ptr %94, i64 3
%100 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 store i64 8, ptr %98, align 4
%101 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %100, i32 0, i32 0 %99 = alloca %"github.com/goplus/llgo/internal/runtime.Slice", align 8
store ptr @4, ptr %101, align 8 %100 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %99, i32 0, i32 0
%102 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %100, i32 0, i32 1 store ptr %94, ptr %100, align 8
store i64 3, ptr %102, align 4 %101 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %99, i32 0, i32 1
%103 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %100, align 8 store i64 4, ptr %101, align 4
%104 = extractvalue %"github.com/goplus/llgo/internal/runtime.String" %103, 0 %102 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %99, i32 0, i32 2
%105 = extractvalue %"github.com/goplus/llgo/internal/runtime.String" %103, 1 store i64 4, ptr %102, align 4
%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) %103 = load %"github.com/goplus/llgo/internal/runtime.Slice", ptr %99, align 8
%104 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %103, 0
%105 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %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" %11, ptr %104, i64 %105, i64 32)
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.PrintSlice"(%"github.com/goplus/llgo/internal/runtime.Slice" %106)
call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 10) call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 10)
%107 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocZ"(i64 16) %107 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocZ"(i64 3)
%108 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 2) %108 = getelementptr inbounds i8, ptr %107, i64 0
%109 = alloca %"github.com/goplus/llgo/internal/runtime.eface", align 8 store i8 97, ptr %108, align 1
%110 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %109, i32 0, i32 0 %109 = getelementptr inbounds i8, ptr %107, i64 1
store ptr %108, ptr %110, align 8 store i8 98, ptr %109, align 1
%111 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %109, i32 0, i32 1 %110 = getelementptr inbounds i8, ptr %107, i64 2
store ptr inttoptr (i64 100 to ptr), ptr %111, align 8 store i8 99, ptr %110, align 1
%112 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %109, align 8 %111 = alloca %"github.com/goplus/llgo/internal/runtime.Slice", align 8
store %"github.com/goplus/llgo/internal/runtime.eface" %112, ptr %107, align 8 %112 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %111, i32 0, i32 0
%113 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %107, align 8 store ptr %107, ptr %112, align 8
%114 = ptrtoint ptr %107 to i64 %113 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %111, i32 0, i32 1
store i64 3, ptr %113, align 4
%114 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %111, i32 0, i32 2
store i64 3, ptr %114, align 4
%115 = load %"github.com/goplus/llgo/internal/runtime.Slice", ptr %111, align 8
%116 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8
%117 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %116, i32 0, i32 0
store ptr @4, ptr %117, align 8
%118 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %116, i32 0, i32 1
store i64 3, ptr %118, align 4
%119 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %116, align 8
%120 = extractvalue %"github.com/goplus/llgo/internal/runtime.String" %119, 0
%121 = extractvalue %"github.com/goplus/llgo/internal/runtime.String" %119, 1
%122 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.SliceAppend"(%"github.com/goplus/llgo/internal/runtime.Slice" %115, ptr %120, i64 %121, i64 1)
call void @"github.com/goplus/llgo/internal/runtime.PrintSlice"(%"github.com/goplus/llgo/internal/runtime.Slice" %122)
call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 10)
%123 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocZ"(i64 16)
%124 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 2)
%125 = alloca %"github.com/goplus/llgo/internal/runtime.eface", align 8
%126 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %125, i32 0, i32 0
store ptr %124, ptr %126, align 8
%127 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %125, i32 0, i32 1
store ptr inttoptr (i64 100 to ptr), ptr %127, align 8
%128 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %125, align 8
store %"github.com/goplus/llgo/internal/runtime.eface" %128, ptr %123, align 8
%129 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %123, align 8
%130 = ptrtoint ptr %123 to i64
call void @"github.com/goplus/llgo/internal/runtime.PrintBool"(i1 true) 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.PrintByte"(i8 32)
call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 0) call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 0)
@@ -267,83 +295,90 @@ _llgo_0:
call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) 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.PrintFloat"(double 1.005000e+02)
call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32)
call void @"github.com/goplus/llgo/internal/runtime.PrintEface"(%"github.com/goplus/llgo/internal/runtime.eface" %113) call void @"github.com/goplus/llgo/internal/runtime.PrintEface"(%"github.com/goplus/llgo/internal/runtime.eface" %129)
call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32)
call void @"github.com/goplus/llgo/internal/runtime.PrintPointer"(ptr %107) call void @"github.com/goplus/llgo/internal/runtime.PrintPointer"(ptr %123)
call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32)
call void @"github.com/goplus/llgo/internal/runtime.PrintUint"(i64 %114)
call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 10)
%115 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocZ"(i64 3)
%116 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocZ"(i64 8)
%117 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %115, i64 1, i64 3, i64 0, i64 3, i64 3)
%118 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %106, 0
%119 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %106, 1
%120 = call i64 @"github.com/goplus/llgo/internal/runtime.SliceCopy"(%"github.com/goplus/llgo/internal/runtime.Slice" %117, ptr %118, i64 %119, i64 1)
store i64 %120, ptr %116, align 4
%121 = load i64, ptr %116, align 4
%122 = getelementptr inbounds i8, ptr %115, i64 0
%123 = load i8, ptr %122, align 1
%124 = getelementptr inbounds i8, ptr %115, i64 1
%125 = load i8, ptr %124, align 1
%126 = getelementptr inbounds i8, ptr %115, i64 2
%127 = load i8, ptr %126, align 1
call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %121)
call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32)
%128 = zext i8 %123 to i64
call void @"github.com/goplus/llgo/internal/runtime.PrintUint"(i64 %128)
call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32)
%129 = zext i8 %125 to i64
call void @"github.com/goplus/llgo/internal/runtime.PrintUint"(i64 %129)
call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32)
%130 = zext i8 %127 to i64
call void @"github.com/goplus/llgo/internal/runtime.PrintUint"(i64 %130) call void @"github.com/goplus/llgo/internal/runtime.PrintUint"(i64 %130)
call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 10) call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 10)
%131 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %115, i64 1, i64 3, i64 1, i64 3, i64 3) %131 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocZ"(i64 3)
%132 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 %132 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocZ"(i64 8)
%133 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %132, i32 0, i32 0 %133 = alloca %"github.com/goplus/llgo/internal/runtime.Slice", align 8
store ptr @5, ptr %133, align 8 %134 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %133, i32 0, i32 0
%134 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %132, i32 0, i32 1 store ptr %131, ptr %134, align 8
store i64 4, ptr %134, align 4 %135 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %133, i32 0, i32 1
%135 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %132, align 8 store i64 3, ptr %135, align 4
%136 = extractvalue %"github.com/goplus/llgo/internal/runtime.String" %135, 0 %136 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %133, i32 0, i32 2
%137 = extractvalue %"github.com/goplus/llgo/internal/runtime.String" %135, 1 store i64 3, ptr %136, align 4
%138 = call i64 @"github.com/goplus/llgo/internal/runtime.SliceCopy"(%"github.com/goplus/llgo/internal/runtime.Slice" %131, ptr %136, i64 %137, i64 1) %137 = load %"github.com/goplus/llgo/internal/runtime.Slice", ptr %133, align 8
store i64 %138, ptr %116, align 4 %138 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %122, 0
%139 = load i64, ptr %116, align 4 %139 = extractvalue %"github.com/goplus/llgo/internal/runtime.Slice" %122, 1
%140 = getelementptr inbounds i8, ptr %115, i64 0 %140 = call i64 @"github.com/goplus/llgo/internal/runtime.SliceCopy"(%"github.com/goplus/llgo/internal/runtime.Slice" %137, ptr %138, i64 %139, i64 3)
%141 = load i8, ptr %140, align 1 store i64 %140, ptr %132, align 4
%142 = getelementptr inbounds i8, ptr %115, i64 1 %141 = load i64, ptr %132, align 4
%142 = getelementptr inbounds i8, ptr %131, i64 0
%143 = load i8, ptr %142, align 1 %143 = load i8, ptr %142, align 1
%144 = getelementptr inbounds i8, ptr %115, i64 2 %144 = getelementptr inbounds i8, ptr %131, i64 1
%145 = load i8, ptr %144, align 1 %145 = load i8, ptr %144, align 1
call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %139) %146 = getelementptr inbounds i8, ptr %131, i64 2
%147 = load i8, ptr %146, align 1
call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %141)
call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32)
%146 = zext i8 %141 to i64 %148 = zext i8 %143 to i64
call void @"github.com/goplus/llgo/internal/runtime.PrintUint"(i64 %146)
call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32)
%147 = zext i8 %143 to i64
call void @"github.com/goplus/llgo/internal/runtime.PrintUint"(i64 %147)
call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32)
%148 = zext i8 %145 to i64
call void @"github.com/goplus/llgo/internal/runtime.PrintUint"(i64 %148) call void @"github.com/goplus/llgo/internal/runtime.PrintUint"(i64 %148)
call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32)
%149 = zext i8 %145 to i64
call void @"github.com/goplus/llgo/internal/runtime.PrintUint"(i64 %149)
call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32)
%150 = zext i8 %147 to i64
call void @"github.com/goplus/llgo/internal/runtime.PrintUint"(i64 %150)
call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 10) call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 10)
%149 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocU"(i64 8) %151 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %131, i64 1, i64 3, i64 1, i64 3, i64 3)
%150 = getelementptr inbounds { ptr }, ptr %149, i32 0, i32 0 %152 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8
store ptr %116, ptr %150, align 8 %153 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %152, i32 0, i32 0
%151 = alloca { ptr, ptr }, align 8 store ptr @5, ptr %153, align 8
%152 = getelementptr inbounds { ptr, ptr }, ptr %151, i32 0, i32 0 %154 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %152, i32 0, i32 1
store ptr @"main.main$2", ptr %152, align 8 store i64 4, ptr %154, align 4
%153 = getelementptr inbounds { ptr, ptr }, ptr %151, i32 0, i32 1 %155 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %152, align 8
store ptr %149, ptr %153, align 8 %156 = extractvalue %"github.com/goplus/llgo/internal/runtime.String" %155, 0
%154 = load { ptr, ptr }, ptr %151, align 8 %157 = extractvalue %"github.com/goplus/llgo/internal/runtime.String" %155, 1
%158 = call i64 @"github.com/goplus/llgo/internal/runtime.SliceCopy"(%"github.com/goplus/llgo/internal/runtime.Slice" %151, ptr %156, i64 %157, i64 1)
store i64 %158, ptr %132, align 4
%159 = load i64, ptr %132, align 4
%160 = getelementptr inbounds i8, ptr %131, i64 0
%161 = load i8, ptr %160, align 1
%162 = getelementptr inbounds i8, ptr %131, i64 1
%163 = load i8, ptr %162, align 1
%164 = getelementptr inbounds i8, ptr %131, i64 2
%165 = load i8, ptr %164, align 1
call void @"github.com/goplus/llgo/internal/runtime.PrintInt"(i64 %159)
call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32)
%166 = zext i8 %161 to i64
call void @"github.com/goplus/llgo/internal/runtime.PrintUint"(i64 %166)
call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32)
%167 = zext i8 %163 to i64
call void @"github.com/goplus/llgo/internal/runtime.PrintUint"(i64 %167)
call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32)
%168 = zext i8 %165 to i64
call void @"github.com/goplus/llgo/internal/runtime.PrintUint"(i64 %168)
call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 10)
%169 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocU"(i64 8)
%170 = getelementptr inbounds { ptr }, ptr %169, i32 0, i32 0
store ptr %132, ptr %170, align 8
%171 = alloca { ptr, ptr }, align 8
%172 = getelementptr inbounds { ptr, ptr }, ptr %171, i32 0, i32 0
store ptr @"main.main$2", ptr %172, align 8
%173 = getelementptr inbounds { ptr, ptr }, ptr %171, i32 0, i32 1
store ptr %169, ptr %173, align 8
%174 = load { ptr, ptr }, ptr %171, align 8
call void @"github.com/goplus/llgo/internal/runtime.PrintPointer"(ptr @main.demo) 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.PrintByte"(i8 32)
call void @"github.com/goplus/llgo/internal/runtime.PrintPointer"(ptr @main.demo) 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.PrintByte"(i8 32)
call void @"github.com/goplus/llgo/internal/runtime.PrintPointer"(ptr @"main.main$1") call void @"github.com/goplus/llgo/internal/runtime.PrintPointer"(ptr @"main.main$1")
call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32)
%155 = extractvalue { ptr, ptr } %154, 0 %175 = extractvalue { ptr, ptr } %174, 0
call void @"github.com/goplus/llgo/internal/runtime.PrintPointer"(ptr %155) call void @"github.com/goplus/llgo/internal/runtime.PrintPointer"(ptr %175)
call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 10) call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 10)
ret i32 0 ret i32 0
} }

View File

@@ -121,14 +121,21 @@ _llgo_0:
store i64 5, ptr %16, align 4 store i64 5, ptr %16, align 4
%17 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %14, align 8 %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 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) %18 = alloca %"github.com/goplus/llgo/internal/runtime.Slice", align 8
%19 = call %"github.com/goplus/llgo/internal/runtime.String" @main.concat(%"github.com/goplus/llgo/internal/runtime.Slice" %18) %19 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %18, i32 0, i32 0
%20 = load ptr, ptr @__stderrp, align 8 store ptr %2, ptr %19, align 8
%21 = extractvalue %"github.com/goplus/llgo/internal/runtime.String" %19, 1 %20 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %18, i32 0, i32 1
%22 = add i64 %21, 1 store i64 3, ptr %20, align 4
%23 = alloca i8, i64 %22, align 1 %21 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %18, i32 0, i32 2
%24 = call ptr @"github.com/goplus/llgo/internal/runtime.CStrCopy"(ptr %23, %"github.com/goplus/llgo/internal/runtime.String" %19) store i64 3, ptr %21, align 4
%25 = call i32 (ptr, ptr, ...) @fprintf(ptr %20, ptr @6, ptr %24) %22 = load %"github.com/goplus/llgo/internal/runtime.Slice", ptr %18, align 8
%23 = call %"github.com/goplus/llgo/internal/runtime.String" @main.concat(%"github.com/goplus/llgo/internal/runtime.Slice" %22)
%24 = load ptr, ptr @__stderrp, align 8
%25 = extractvalue %"github.com/goplus/llgo/internal/runtime.String" %23, 1
%26 = add i64 %25, 1
%27 = alloca i8, i64 %26, align 1
%28 = call ptr @"github.com/goplus/llgo/internal/runtime.CStrCopy"(ptr %27, %"github.com/goplus/llgo/internal/runtime.String" %23)
%29 = call i32 (ptr, ptr, ...) @fprintf(ptr %24, ptr @6, ptr %28)
ret i32 0 ret i32 0
} }
@@ -140,8 +147,6 @@ declare void @"github.com/goplus/llgo/internal/runtime.init"()
declare ptr @"github.com/goplus/llgo/internal/runtime.AllocZ"(i64) declare ptr @"github.com/goplus/llgo/internal/runtime.AllocZ"(i64)
declare %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr, i64, i64, i64, i64, i64)
declare ptr @"github.com/goplus/llgo/internal/runtime.CStrCopy"(ptr, %"github.com/goplus/llgo/internal/runtime.String") declare ptr @"github.com/goplus/llgo/internal/runtime.CStrCopy"(ptr, %"github.com/goplus/llgo/internal/runtime.String")
declare i32 @fprintf(ptr, ptr, ...) declare i32 @fprintf(ptr, ptr, ...)

View File

@@ -36,9 +36,16 @@ _llgo_0:
store i64 3, ptr %5, align 4 store i64 3, ptr %5, align 4
%6 = getelementptr inbounds i64, ptr %2, i64 3 %6 = getelementptr inbounds i64, ptr %2, i64 3
store i64 4, ptr %6, align 4 store i64 4, ptr %6, align 4
%7 = call %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr %2, i64 8, i64 4, i64 0, i64 4, i64 4) %7 = alloca %"github.com/goplus/llgo/internal/runtime.Slice", align 8
%8 = call i64 @main.sum(%"github.com/goplus/llgo/internal/runtime.Slice" %7) %8 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %7, i32 0, i32 0
%9 = call i32 (ptr, ...) @printf(ptr @0, i64 %8) store ptr %2, ptr %8, align 8
%9 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %7, i32 0, i32 1
store i64 4, ptr %9, align 4
%10 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %7, i32 0, i32 2
store i64 4, ptr %10, align 4
%11 = load %"github.com/goplus/llgo/internal/runtime.Slice", ptr %7, align 8
%12 = call i64 @main.sum(%"github.com/goplus/llgo/internal/runtime.Slice" %11)
%13 = call i32 (ptr, ...) @printf(ptr @0, i64 %12)
ret i32 0 ret i32 0
} }
@@ -71,8 +78,6 @@ declare void @"github.com/goplus/llgo/internal/runtime.init"()
declare ptr @"github.com/goplus/llgo/internal/runtime.AllocZ"(i64) declare ptr @"github.com/goplus/llgo/internal/runtime.AllocZ"(i64)
declare %"github.com/goplus/llgo/internal/runtime.Slice" @"github.com/goplus/llgo/internal/runtime.NewSlice3"(ptr, i64, i64, i64, i64, i64)
declare i32 @printf(ptr, ...) declare i32 @printf(ptr, ...)
declare void @"github.com/goplus/llgo/internal/runtime.AssertIndexRange"(i1) declare void @"github.com/goplus/llgo/internal/runtime.AssertIndexRange"(i1)

View File

@@ -381,7 +381,7 @@ func (p *context) compileBlock(b llssa.Builder, block *ssa.BasicBlock, n int, do
cond := b.BinOp(token.NEQ, mod, prog.Null(mod.Type)) cond := b.BinOp(token.NEQ, mod, prog.Null(mod.Type))
newBlk := p.fn.MakeBlock() newBlk := p.fn.MakeBlock()
b.If(cond, jumpTo, newBlk) b.If(cond, jumpTo, newBlk)
b.SetBlock(newBlk) b.SetBlockEx(newBlk, llssa.AtEnd, false)
b.Store(modPtr, b.PyImportMod(modPath)) b.Store(modPtr, b.PyImportMod(modPath))
b.Jump(jumpTo) b.Jump(jumpTo)
} }
@@ -508,7 +508,7 @@ func isPhi(i ssa.Instruction) bool {
func (p *context) compilePhis(b llssa.Builder, block *ssa.BasicBlock) int { func (p *context) compilePhis(b llssa.Builder, block *ssa.BasicBlock) int {
ret := p.fn.Block(block.Index) ret := p.fn.Block(block.Index)
b.SetBlockEx(ret, llssa.AtEnd) b.SetBlockEx(ret, llssa.AtEnd, false)
if ninstr := len(block.Instrs); ninstr > 0 { if ninstr := len(block.Instrs); ninstr > 0 {
if isPhi(block.Instrs[0]) { if isPhi(block.Instrs[0]) {
n := 1 n := 1

View File

@@ -274,7 +274,7 @@ func (p Function) NewBuilder() Builder {
b := prog.ctx.NewBuilder() b := prog.ctx.NewBuilder()
// TODO(xsw): Finalize may cause panic, so comment it. // TODO(xsw): Finalize may cause panic, so comment it.
// b.Finalize() // b.Finalize()
return &aBuilder{b, p, p.Pkg, prog} return &aBuilder{b, nil, p, p.Pkg, prog}
} }
// HasBody reports whether the function has a body. // HasBody reports whether the function has a body.
@@ -287,7 +287,7 @@ func (p Function) HasBody() bool {
func (p Function) MakeBody(nblk int) Builder { func (p Function) MakeBody(nblk int) Builder {
p.MakeBlocks(nblk) p.MakeBlocks(nblk)
b := p.NewBuilder() b := p.NewBuilder()
b.impl.SetInsertPointAtEnd(p.blks[0].impl) b.impl.SetInsertPointAtEnd(p.blks[0].last)
return b return b
} }
@@ -306,7 +306,7 @@ func (p Function) MakeBlocks(nblk int) []BasicBlock {
func (p Function) addBlock(idx int) BasicBlock { func (p Function) addBlock(idx int) BasicBlock {
label := "_llgo_" + strconv.Itoa(idx) label := "_llgo_" + strconv.Itoa(idx)
blk := llvm.AddBasicBlock(p.impl, label) blk := llvm.AddBasicBlock(p.impl, label)
ret := &aBasicBlock{blk, p, idx} ret := &aBasicBlock{blk, blk, p, idx}
p.blks = append(p.blks, ret) p.blks = append(p.blks, ret)
return ret return ret
} }

View File

@@ -517,10 +517,10 @@ func llvmDelayValues(f func(i int) Expr, n int) []llvm.Value {
return ret return ret
} }
func llvmBlocks(bblks []BasicBlock) []llvm.BasicBlock { func llvmPredBlocks(preds []BasicBlock) []llvm.BasicBlock {
ret := make([]llvm.BasicBlock, len(bblks)) ret := make([]llvm.BasicBlock, len(preds))
for i, v := range bblks { for i, v := range preds {
ret[i] = v.impl ret[i] = v.last
} }
return ret return ret
} }
@@ -531,24 +531,24 @@ type Phi struct {
} }
// AddIncoming adds incoming values to a phi node. // AddIncoming adds incoming values to a phi node.
func (p Phi) AddIncoming(b Builder, bblks []BasicBlock, f func(i int) Expr) { func (p Phi) AddIncoming(b Builder, preds []BasicBlock, f func(i int) Expr) {
bs := llvmBlocks(bblks) bs := llvmPredBlocks(preds)
if p.kind != vkPhisExpr { // normal phi node if p.kind != vkPhisExpr { // normal phi node
vs := llvmDelayValues(f, len(bblks)) vs := llvmDelayValues(f, len(preds))
p.impl.AddIncoming(vs, bs) p.impl.AddIncoming(vs, bs)
return return
} }
e := p.raw.Type.(*phisExprTy) e := p.raw.Type.(*phisExprTy)
phis := e.phis phis := e.phis
vals := make([][]llvm.Value, len(phis)) vals := make([][]llvm.Value, len(phis))
for iblk, blk := range bblks { for iblk, blk := range preds {
last := blk.impl.LastInstruction() last := blk.last.LastInstruction()
b.impl.SetInsertPointBefore(last) b.impl.SetInsertPointBefore(last)
impl := b.impl impl := b.impl
val := f(iblk).impl val := f(iblk).impl
for i := range phis { for i := range phis {
if iblk == 0 { if iblk == 0 {
vals[i] = make([]llvm.Value, len(bblks)) vals[i] = make([]llvm.Value, len(preds))
} }
vals[i][iblk] = llvm.CreateExtractValue(impl, val, i) vals[i][iblk] = llvm.CreateExtractValue(impl, val, i)
} }

View File

@@ -61,13 +61,14 @@ func (b Builder) abiStruct(t *types.Struct) Expr {
eq := b.BinOp(token.EQL, b.Load(expr), b.Prog.Null(expr.Type)) eq := b.BinOp(token.EQL, b.Load(expr), b.Prog.Null(expr.Type))
blks = b.Func.MakeBlocks(2) blks = b.Func.MakeBlocks(2)
b.If(eq, blks[0], blks[1]) b.If(eq, blks[0], blks[1])
b.SetBlock(blks[0]) b.SetBlockEx(blks[0], AtEnd, false)
} }
tabi := b.structOf(t) tabi := b.structOf(t)
b.Store(expr, tabi) b.Store(expr, tabi)
if pub { if pub {
b.Jump(blks[1]) b.Jump(blks[1])
b.SetBlock(blks[1]) b.SetBlockEx(blks[1], AtEnd, false)
b.blk.last = blks[1].last
} }
}) })
} }
@@ -279,9 +280,10 @@ func (b Builder) TypeAssert(x Expr, assertedTyp Type, commaOk bool) Expr {
} }
blks := b.Func.MakeBlocks(2) blks := b.Func.MakeBlocks(2)
b.If(eq, blks[0], blks[1]) b.If(eq, blks[0], blks[1])
b.SetBlock(blks[1]) b.SetBlockEx(blks[1], AtEnd, false)
b.Panic(b.Str("type assertion failed")) b.Panic(b.Str("type assertion failed"))
b.SetBlock(blks[0]) b.SetBlockEx(blks[0], AtEnd, false)
b.blk.last = blks[0].last
return b.valFromData(assertedTyp, b.faceData(x.impl)) return b.valFromData(assertedTyp, b.faceData(x.impl))
} }

View File

@@ -559,7 +559,7 @@ func (p Package) AfterInit(b Builder, ret BasicBlock) {
doAbiInit := len(p.abiini) > 0 doAbiInit := len(p.abiini) > 0
doPyLoadModSyms := p.pyHasModSyms() doPyLoadModSyms := p.pyHasModSyms()
if doAbiInit || doPyLoadModSyms { if doAbiInit || doPyLoadModSyms {
b.SetBlockEx(ret, afterInit) b.SetBlockEx(ret, afterInit, false)
if doAbiInit { if doAbiInit {
sigAbiInit := types.NewSignatureType(nil, nil, nil, nil, nil, false) sigAbiInit := types.NewSignatureType(nil, nil, nil, nil, nil, false)
fn := p.NewFunc(p.abi.Pkg+".init$abi", sigAbiInit, InC) fn := p.NewFunc(p.abi.Pkg+".init$abi", sigAbiInit, InC)
@@ -743,7 +743,7 @@ func (p Program) tyGetAttrString() *types.Signature {
func (p Package) PyInit() bool { func (p Package) PyInit() bool {
if fn := p.FuncOf("main"); fn != nil { if fn := p.FuncOf("main"); fn != nil {
b := fn.NewBuilder() b := fn.NewBuilder()
b.SetBlockEx(fn.Block(0), AtStart).callPyInit() b.SetBlockEx(fn.Block(0), AtStart, false).callPyInit()
b.Dispose() b.Dispose()
return true return true
} }

View File

@@ -52,7 +52,7 @@ func TestSetBlockEx(t *testing.T) {
}() }()
fn := &aFunction{} fn := &aFunction{}
b := &aBuilder{Func: fn} b := &aBuilder{Func: fn}
b.SetBlockEx(&aBasicBlock{fn: fn}, -1) b.SetBlockEx(&aBasicBlock{fn: fn}, -1, false)
} }
func TestSetPython(t *testing.T) { func TestSetPython(t *testing.T) {

View File

@@ -29,7 +29,8 @@ import (
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
type aBasicBlock struct { type aBasicBlock struct {
impl llvm.BasicBlock first llvm.BasicBlock
last llvm.BasicBlock
fn Function fn Function
idx int idx int
} }
@@ -51,6 +52,7 @@ func (p BasicBlock) Index() int {
type aBuilder struct { type aBuilder struct {
impl llvm.Builder impl llvm.Builder
blk BasicBlock
Func Function Func Function
Pkg Package Pkg Package
Prog Program Prog Program
@@ -64,12 +66,12 @@ func (b Builder) Dispose() {
b.impl.Dispose() b.impl.Dispose()
} }
// SetBlock means SetBlockEx(blk, AtEnd). // SetBlock means SetBlockEx(blk, AtEnd, true).
func (b Builder) SetBlock(blk BasicBlock) Builder { func (b Builder) SetBlock(blk BasicBlock) Builder {
if debugInstr { if debugInstr {
log.Printf("Block _llgo_%v:\n", blk.idx) log.Printf("Block _llgo_%v:\n", blk.idx)
} }
b.SetBlockEx(blk, AtEnd) b.SetBlockEx(blk, AtEnd, true)
return b return b
} }
@@ -82,20 +84,23 @@ const (
) )
// SetBlockEx sets blk as current basic block and pos as its insert point. // SetBlockEx sets blk as current basic block and pos as its insert point.
func (b Builder) SetBlockEx(blk BasicBlock, pos InsertPoint) Builder { func (b Builder) SetBlockEx(blk BasicBlock, pos InsertPoint, setBlk bool) Builder {
if b.Func != blk.fn { if b.Func != blk.fn {
panic("mismatched function") panic("mismatched function")
} }
switch pos { switch pos {
case AtEnd: case AtEnd:
b.impl.SetInsertPointAtEnd(blk.impl) b.impl.SetInsertPointAtEnd(blk.last)
case AtStart: case AtStart:
b.impl.SetInsertPointBefore(blk.impl.FirstInstruction()) b.impl.SetInsertPointBefore(blk.first.FirstInstruction())
case afterInit: case afterInit:
b.impl.SetInsertPointBefore(instrAfterInit(blk.impl)) b.impl.SetInsertPointBefore(instrAfterInit(blk.first))
default: default:
panic("SetBlockEx: invalid pos") panic("SetBlockEx: invalid pos")
} }
if setBlk {
b.blk = blk
}
return b return b
} }
@@ -184,7 +189,7 @@ func (b Builder) Jump(jmpb BasicBlock) {
if debugInstr { if debugInstr {
log.Printf("Jump _llgo_%v\n", jmpb.idx) log.Printf("Jump _llgo_%v\n", jmpb.idx)
} }
b.impl.CreateBr(jmpb.impl) b.impl.CreateBr(jmpb.first)
} }
// If emits an if instruction. // If emits an if instruction.
@@ -195,7 +200,7 @@ func (b Builder) If(cond Expr, thenb, elseb BasicBlock) {
if debugInstr { if debugInstr {
log.Printf("If %v, _llgo_%v, _llgo_%v\n", cond.impl, thenb.idx, elseb.idx) log.Printf("If %v, _llgo_%v, _llgo_%v\n", cond.impl, thenb.idx, elseb.idx)
} }
b.impl.CreateCondBr(cond.impl, thenb.impl, elseb.impl) b.impl.CreateCondBr(cond.impl, thenb.first, elseb.first)
} }
// The MapUpdate instruction updates the association of Map[Key] to // The MapUpdate instruction updates the association of Map[Key] to