From 3328847e27a522e85a767adced9132dbca7b4f48 Mon Sep 17 00:00:00 2001 From: visualfc Date: Sun, 26 May 2024 21:57:07 +0800 Subject: [PATCH 1/2] ssa: sliceOf arrayOf --- chore/gentests/gentests.go | 3 + cl/_testgo/eface/in.go | 44 +++ cl/_testgo/eface/out.ll | 429 ++++++++++++++++++++++++++++++ internal/runtime/llgo_autogen.lla | Bin 12810 -> 13023 bytes internal/runtime/z_type.go | 26 ++ ssa/abi/abi.go | 6 + ssa/interface.go | 14 + ssa/package.go | 2 +- ssa/target.go | 24 ++ 9 files changed, 547 insertions(+), 1 deletion(-) create mode 100644 cl/_testgo/eface/in.go create mode 100644 cl/_testgo/eface/out.ll diff --git a/chore/gentests/gentests.go b/chore/gentests/gentests.go index 2eb83129..d13eaee2 100644 --- a/chore/gentests/gentests.go +++ b/chore/gentests/gentests.go @@ -21,6 +21,8 @@ import ( "os" "strings" + "github.com/goplus/llgo/ssa" + "github.com/goplus/llgo/internal/llgen" "github.com/goplus/mod" ) @@ -29,6 +31,7 @@ func main() { dir, _, err := mod.FindGoMod(".") check(err) + ssa.Initialize(ssa.InitAll | ssa.InitNative) llgen.Verbose = false llgenDir(dir + "/cl/_testlibc") diff --git a/cl/_testgo/eface/in.go b/cl/_testgo/eface/in.go new file mode 100644 index 00000000..2595e127 --- /dev/null +++ b/cl/_testgo/eface/in.go @@ -0,0 +1,44 @@ +package main + +import ( + "unsafe" + + "github.com/goplus/llgo/internal/abi" +) + +type eface struct { + _type *abi.Type + data unsafe.Pointer +} + +func main() { + dump(true) + dump(0) + dump(int8(0)) + dump(int16(0)) + dump(int32(0)) + dump(int64(0)) + dump(uint(0)) + dump(uint8(0)) + dump(uint16(0)) + dump(uint32(0)) + dump(uint64(0)) + dump(uintptr(0)) + dump(float32(0)) + dump(float64(0)) + dump([10]int{}) + dump(func() {}) + dump((*int)(nil)) + dump([]int{}) + dump("hello") + dump(struct { + x int8 + y int + z int + }{}) +} + +func dump(v any) { + e := (*eface)(unsafe.Pointer(&v)) + println(e._type.Size(), e._type.Kind(), e._type, e._type.Elem()) +} diff --git a/cl/_testgo/eface/out.ll b/cl/_testgo/eface/out.ll new file mode 100644 index 00000000..ebe5091e --- /dev/null +++ b/cl/_testgo/eface/out.ll @@ -0,0 +1,429 @@ +; ModuleID = 'main' +source_filename = "main" + +%"github.com/goplus/llgo/internal/runtime.eface" = type { ptr, ptr } +%main.eface = type { ptr, ptr } +%"github.com/goplus/llgo/internal/runtime.Slice" = type { ptr, i64, i64 } +%"github.com/goplus/llgo/internal/runtime.String" = type { ptr, i64 } +%"github.com/goplus/llgo/internal/abi.StructField" = type { %"github.com/goplus/llgo/internal/runtime.String", ptr, i64, %"github.com/goplus/llgo/internal/runtime.String", i1 } + +@"main.init$guard" = global ptr null +@__llgo_argc = global ptr null +@__llgo_argv = global ptr null +@"[10]_llgo_int" = linkonce global ptr null +@"_llgo_func$2_iS07vIlF2_rZqWB5eU0IvP_9HviM4MYZNkXZDvbac" = linkonce global ptr null +@"*_llgo_int" = linkonce global ptr null +@"[][0]_llgo_int" = linkonce global ptr null +@0 = private unnamed_addr constant [6 x i8] c"hello\00", align 1 +@"main.struct$RKbUG45GE4henGMAdmt0Rju0JptyR8NsX7IZLsOI0OM" = global ptr null +@1 = private unnamed_addr constant [2 x i8] c"x\00", align 1 +@2 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1 +@3 = private unnamed_addr constant [2 x i8] c"y\00", align 1 +@4 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1 +@5 = private unnamed_addr constant [2 x i8] c"z\00", align 1 +@6 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1 +@7 = private unnamed_addr constant [5 x i8] c"main\00", align 1 + +define void @main.dump(%"github.com/goplus/llgo/internal/runtime.eface" %0) { +_llgo_0: + %1 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocZ"(i64 16) + store %"github.com/goplus/llgo/internal/runtime.eface" %0, ptr %1, align 8 + %2 = getelementptr inbounds %main.eface, ptr %1, i32 0, i32 0 + %3 = load ptr, ptr %2, align 8 + %4 = call i64 @"(*github.com/goplus/llgo/internal/abi.Type).Size"(ptr %3) + %5 = getelementptr inbounds %main.eface, ptr %1, i32 0, i32 0 + %6 = load ptr, ptr %5, align 8 + %7 = call i64 @"(*github.com/goplus/llgo/internal/abi.Type).Kind"(ptr %6) + %8 = getelementptr inbounds %main.eface, ptr %1, i32 0, i32 0 + %9 = load ptr, ptr %8, align 8 + %10 = getelementptr inbounds %main.eface, ptr %1, i32 0, i32 0 + %11 = load ptr, ptr %10, align 8 + %12 = call ptr @"(*github.com/goplus/llgo/internal/abi.Type).Elem"(ptr %11) + call void @"github.com/goplus/llgo/internal/runtime.PrintUint"(i64 %4) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) + call void @"github.com/goplus/llgo/internal/runtime.PrintUint"(i64 %7) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) + call void @"github.com/goplus/llgo/internal/runtime.PrintPointer"(ptr %9) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 32) + call void @"github.com/goplus/llgo/internal/runtime.PrintPointer"(ptr %12) + call void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8 10) + ret void +} + +define void @main.init() { +_llgo_0: + %0 = load i1, ptr @"main.init$guard", align 1 + br i1 %0, label %_llgo_2, label %_llgo_1 + +_llgo_1: ; preds = %_llgo_0 + store i1 true, ptr @"main.init$guard", align 1 + call void @"github.com/goplus/llgo/internal/abi.init"() + call void @"main.init$abi"() + br label %_llgo_2 + +_llgo_2: ; preds = %_llgo_1, %_llgo_0 + ret void +} + +define i32 @main(i32 %0, ptr %1) { +_llgo_0: + store i32 %0, ptr @__llgo_argc, align 4 + store ptr %1, ptr @__llgo_argv, align 8 + call void @"github.com/goplus/llgo/internal/runtime.init"() + call void @main.init() + %2 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 1) + %3 = alloca %"github.com/goplus/llgo/internal/runtime.eface", align 8 + %4 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %3, i32 0, i32 0 + store ptr %2, ptr %4, align 8 + %5 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %3, i32 0, i32 1 + store ptr inttoptr (i64 -1 to ptr), ptr %5, align 8 + %6 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %3, align 8 + call void @main.dump(%"github.com/goplus/llgo/internal/runtime.eface" %6) + %7 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 2) + %8 = alloca %"github.com/goplus/llgo/internal/runtime.eface", align 8 + %9 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %8, i32 0, i32 0 + store ptr %7, ptr %9, align 8 + %10 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %8, i32 0, i32 1 + store ptr null, ptr %10, align 8 + %11 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %8, align 8 + call void @main.dump(%"github.com/goplus/llgo/internal/runtime.eface" %11) + %12 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 3) + %13 = alloca %"github.com/goplus/llgo/internal/runtime.eface", align 8 + %14 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %13, i32 0, i32 0 + store ptr %12, ptr %14, align 8 + %15 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %13, i32 0, i32 1 + store ptr null, ptr %15, align 8 + %16 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %13, align 8 + call void @main.dump(%"github.com/goplus/llgo/internal/runtime.eface" %16) + %17 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 4) + %18 = alloca %"github.com/goplus/llgo/internal/runtime.eface", align 8 + %19 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %18, i32 0, i32 0 + store ptr %17, ptr %19, align 8 + %20 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %18, i32 0, i32 1 + store ptr null, ptr %20, align 8 + %21 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %18, align 8 + call void @main.dump(%"github.com/goplus/llgo/internal/runtime.eface" %21) + %22 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 5) + %23 = alloca %"github.com/goplus/llgo/internal/runtime.eface", align 8 + %24 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %23, i32 0, i32 0 + store ptr %22, ptr %24, align 8 + %25 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %23, i32 0, i32 1 + store ptr null, ptr %25, align 8 + %26 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %23, align 8 + call void @main.dump(%"github.com/goplus/llgo/internal/runtime.eface" %26) + %27 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 6) + %28 = alloca %"github.com/goplus/llgo/internal/runtime.eface", align 8 + %29 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %28, i32 0, i32 0 + store ptr %27, ptr %29, align 8 + %30 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %28, i32 0, i32 1 + store ptr null, ptr %30, align 8 + %31 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %28, align 8 + call void @main.dump(%"github.com/goplus/llgo/internal/runtime.eface" %31) + %32 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 7) + %33 = alloca %"github.com/goplus/llgo/internal/runtime.eface", align 8 + %34 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %33, i32 0, i32 0 + store ptr %32, ptr %34, align 8 + %35 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %33, i32 0, i32 1 + store ptr null, ptr %35, align 8 + %36 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %33, align 8 + call void @main.dump(%"github.com/goplus/llgo/internal/runtime.eface" %36) + %37 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 8) + %38 = alloca %"github.com/goplus/llgo/internal/runtime.eface", align 8 + %39 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %38, i32 0, i32 0 + store ptr %37, ptr %39, align 8 + %40 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %38, i32 0, i32 1 + store ptr null, ptr %40, align 8 + %41 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %38, align 8 + call void @main.dump(%"github.com/goplus/llgo/internal/runtime.eface" %41) + %42 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 9) + %43 = 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 + store ptr %42, ptr %44, align 8 + %45 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %43, i32 0, i32 1 + store ptr null, ptr %45, align 8 + %46 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %43, align 8 + call void @main.dump(%"github.com/goplus/llgo/internal/runtime.eface" %46) + %47 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 10) + %48 = alloca %"github.com/goplus/llgo/internal/runtime.eface", align 8 + %49 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %48, i32 0, i32 0 + store ptr %47, ptr %49, align 8 + %50 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %48, i32 0, i32 1 + store ptr null, ptr %50, align 8 + %51 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %48, align 8 + call void @main.dump(%"github.com/goplus/llgo/internal/runtime.eface" %51) + %52 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 11) + %53 = alloca %"github.com/goplus/llgo/internal/runtime.eface", align 8 + %54 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %53, i32 0, i32 0 + store ptr %52, ptr %54, align 8 + %55 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %53, i32 0, i32 1 + store ptr null, ptr %55, align 8 + %56 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %53, align 8 + call void @main.dump(%"github.com/goplus/llgo/internal/runtime.eface" %56) + %57 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 12) + %58 = alloca %"github.com/goplus/llgo/internal/runtime.eface", align 8 + %59 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %58, i32 0, i32 0 + store ptr %57, ptr %59, align 8 + %60 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %58, i32 0, i32 1 + store ptr null, ptr %60, align 8 + %61 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %58, align 8 + call void @main.dump(%"github.com/goplus/llgo/internal/runtime.eface" %61) + %62 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 13) + %63 = alloca %"github.com/goplus/llgo/internal/runtime.eface", align 8 + %64 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %63, i32 0, i32 0 + store ptr %62, ptr %64, align 8 + %65 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %63, i32 0, i32 1 + store ptr null, ptr %65, align 8 + %66 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %63, align 8 + call void @main.dump(%"github.com/goplus/llgo/internal/runtime.eface" %66) + %67 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 14) + %68 = alloca %"github.com/goplus/llgo/internal/runtime.eface", align 8 + %69 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %68, i32 0, i32 0 + store ptr %67, ptr %69, align 8 + %70 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %68, i32 0, i32 1 + store ptr null, ptr %70, align 8 + %71 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %68, align 8 + call void @main.dump(%"github.com/goplus/llgo/internal/runtime.eface" %71) + %72 = load ptr, ptr @"[10]_llgo_int", align 8 + %73 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocU"(i64 80) + store [10 x i64] zeroinitializer, ptr %73, align 4 + %74 = alloca %"github.com/goplus/llgo/internal/runtime.eface", align 8 + %75 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %74, i32 0, i32 0 + store ptr %72, ptr %75, align 8 + %76 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %74, i32 0, i32 1 + store ptr %73, ptr %76, align 8 + %77 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %74, align 8 + call void @main.dump(%"github.com/goplus/llgo/internal/runtime.eface" %77) + %78 = load ptr, ptr @"_llgo_func$2_iS07vIlF2_rZqWB5eU0IvP_9HviM4MYZNkXZDvbac", align 8 + %79 = alloca %"github.com/goplus/llgo/internal/runtime.eface", align 8 + %80 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %79, i32 0, i32 0 + store ptr %78, ptr %80, align 8 + %81 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %79, i32 0, i32 1 + store ptr @"main.main$1", ptr %81, align 8 + %82 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %79, align 8 + call void @main.dump(%"github.com/goplus/llgo/internal/runtime.eface" %82) + %83 = load ptr, ptr @"*_llgo_int", align 8 + %84 = alloca %"github.com/goplus/llgo/internal/runtime.eface", align 8 + %85 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %84, i32 0, i32 0 + store ptr %83, ptr %85, align 8 + %86 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %84, i32 0, i32 1 + store ptr null, ptr %86, align 8 + %87 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %84, align 8 + call void @main.dump(%"github.com/goplus/llgo/internal/runtime.eface" %87) + %88 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocZ"(i64 0) + %89 = alloca %"github.com/goplus/llgo/internal/runtime.Slice", align 8 + %90 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %89, i32 0, i32 0 + store ptr %88, ptr %90, align 8 + %91 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %89, i32 0, i32 1 + store i64 0, ptr %91, align 4 + %92 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %89, i32 0, i32 2 + store i64 0, ptr %92, align 4 + %93 = load %"github.com/goplus/llgo/internal/runtime.Slice", ptr %89, align 8 + %94 = load ptr, ptr @"[][0]_llgo_int", align 8 + %95 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocU"(i64 24) + store %"github.com/goplus/llgo/internal/runtime.Slice" %93, ptr %95, align 8 + %96 = alloca %"github.com/goplus/llgo/internal/runtime.eface", align 8 + %97 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %96, i32 0, i32 0 + store ptr %94, ptr %97, align 8 + %98 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %96, i32 0, i32 1 + store ptr %95, ptr %98, align 8 + %99 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %96, align 8 + call void @main.dump(%"github.com/goplus/llgo/internal/runtime.eface" %99) + %100 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %101 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %100, i32 0, i32 0 + store ptr @0, ptr %101, align 8 + %102 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %100, i32 0, i32 1 + store i64 5, ptr %102, align 4 + %103 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %100, align 8 + %104 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 24) + %105 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocU"(i64 16) + store %"github.com/goplus/llgo/internal/runtime.String" %103, ptr %105, align 8 + %106 = alloca %"github.com/goplus/llgo/internal/runtime.eface", align 8 + %107 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %106, i32 0, i32 0 + store ptr %104, ptr %107, align 8 + %108 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %106, i32 0, i32 1 + store ptr %105, ptr %108, align 8 + %109 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %106, align 8 + call void @main.dump(%"github.com/goplus/llgo/internal/runtime.eface" %109) + %110 = load ptr, ptr @"main.struct$RKbUG45GE4henGMAdmt0Rju0JptyR8NsX7IZLsOI0OM", align 8 + %111 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocU"(i64 24) + store { i8, i64, i64 } zeroinitializer, ptr %111, align 4 + %112 = alloca %"github.com/goplus/llgo/internal/runtime.eface", align 8 + %113 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %112, i32 0, i32 0 + store ptr %110, ptr %113, align 8 + %114 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.eface", ptr %112, i32 0, i32 1 + store ptr %111, ptr %114, align 8 + %115 = load %"github.com/goplus/llgo/internal/runtime.eface", ptr %112, align 8 + call void @main.dump(%"github.com/goplus/llgo/internal/runtime.eface" %115) + ret i32 0 +} + +declare ptr @"github.com/goplus/llgo/internal/runtime.AllocZ"(i64) + +declare i64 @"(*github.com/goplus/llgo/internal/abi.Type).Size"(ptr) + +declare i64 @"(*github.com/goplus/llgo/internal/abi.Type).Kind"(ptr) + +declare ptr @"(*github.com/goplus/llgo/internal/abi.Type).Elem"(ptr) + +declare void @"github.com/goplus/llgo/internal/runtime.PrintUint"(i64) + +declare void @"github.com/goplus/llgo/internal/runtime.PrintByte"(i8) + +declare void @"github.com/goplus/llgo/internal/runtime.PrintPointer"(ptr) + +declare void @"github.com/goplus/llgo/internal/abi.init"() + +declare void @"github.com/goplus/llgo/internal/runtime.init"() + +declare ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64) + +declare ptr @"github.com/goplus/llgo/internal/runtime.AllocU"(i64) + +define void @"main.main$1"() { +_llgo_0: + ret void +} + +define void @"main.init$abi"() { +_llgo_0: + %0 = load ptr, ptr @"[10]_llgo_int", align 8 + %1 = icmp eq ptr %0, null + br i1 %1, label %_llgo_1, label %_llgo_2 + +_llgo_1: ; preds = %_llgo_0 + %2 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 2) + %3 = call ptr @"github.com/goplus/llgo/internal/runtime.ArrayOf"(i64 10, ptr %2) + store ptr %3, ptr @"[10]_llgo_int", align 8 + br label %_llgo_2 + +_llgo_2: ; preds = %_llgo_1, %_llgo_0 + %4 = load ptr, ptr @"_llgo_func$2_iS07vIlF2_rZqWB5eU0IvP_9HviM4MYZNkXZDvbac", align 8 + %5 = icmp eq ptr %4, null + br i1 %5, label %_llgo_3, label %_llgo_4 + +_llgo_3: ; preds = %_llgo_2 + %6 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocU"(i64 0) + %7 = alloca %"github.com/goplus/llgo/internal/runtime.Slice", align 8 + %8 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %7, i32 0, i32 0 + store ptr %6, ptr %8, align 8 + %9 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %7, i32 0, i32 1 + store i64 0, ptr %9, align 4 + %10 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %7, i32 0, i32 2 + store i64 0, ptr %10, align 4 + %11 = load %"github.com/goplus/llgo/internal/runtime.Slice", ptr %7, align 8 + %12 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocU"(i64 0) + %13 = alloca %"github.com/goplus/llgo/internal/runtime.Slice", align 8 + %14 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %13, i32 0, i32 0 + store ptr %12, ptr %14, align 8 + %15 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %13, i32 0, i32 1 + store i64 0, ptr %15, align 4 + %16 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %13, i32 0, i32 2 + store i64 0, ptr %16, align 4 + %17 = load %"github.com/goplus/llgo/internal/runtime.Slice", ptr %13, align 8 + %18 = call ptr @"github.com/goplus/llgo/internal/runtime.Func"(%"github.com/goplus/llgo/internal/runtime.Slice" %11, %"github.com/goplus/llgo/internal/runtime.Slice" %17, i1 false) + store ptr %18, ptr @"_llgo_func$2_iS07vIlF2_rZqWB5eU0IvP_9HviM4MYZNkXZDvbac", align 8 + br label %_llgo_4 + +_llgo_4: ; preds = %_llgo_3, %_llgo_2 + %19 = load ptr, ptr @"*_llgo_int", align 8 + %20 = icmp eq ptr %19, null + br i1 %20, label %_llgo_5, label %_llgo_6 + +_llgo_5: ; preds = %_llgo_4 + %21 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 2) + %22 = call ptr @"github.com/goplus/llgo/internal/runtime.PointerTo"(ptr %21) + store ptr %22, ptr @"*_llgo_int", align 8 + br label %_llgo_6 + +_llgo_6: ; preds = %_llgo_5, %_llgo_4 + %23 = load ptr, ptr @"[][0]_llgo_int", align 8 + %24 = icmp eq ptr %23, null + br i1 %24, label %_llgo_7, label %_llgo_8 + +_llgo_7: ; preds = %_llgo_6 + %25 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 2) + %26 = call ptr @"github.com/goplus/llgo/internal/runtime.ArrayOf"(i64 0, ptr %25) + %27 = call ptr @"github.com/goplus/llgo/internal/runtime.SliceOf"(ptr %26) + store ptr %27, ptr @"[][0]_llgo_int", align 8 + br label %_llgo_8 + +_llgo_8: ; preds = %_llgo_7, %_llgo_6 + %28 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %29 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %28, i32 0, i32 0 + store ptr @1, ptr %29, align 8 + %30 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %28, i32 0, i32 1 + store i64 1, ptr %30, align 4 + %31 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %28, align 8 + %32 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 3) + %33 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %34 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %33, i32 0, i32 0 + store ptr @2, ptr %34, align 8 + %35 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %33, i32 0, i32 1 + store i64 0, ptr %35, align 4 + %36 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %33, align 8 + %37 = call %"github.com/goplus/llgo/internal/abi.StructField" @"github.com/goplus/llgo/internal/runtime.StructField"(%"github.com/goplus/llgo/internal/runtime.String" %31, ptr %32, i64 0, %"github.com/goplus/llgo/internal/runtime.String" %36, i1 false) + %38 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %39 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %38, i32 0, i32 0 + store ptr @3, ptr %39, align 8 + %40 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %38, i32 0, i32 1 + store i64 1, ptr %40, align 4 + %41 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %38, align 8 + %42 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 2) + %43 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %44 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %43, i32 0, i32 0 + store ptr @4, ptr %44, align 8 + %45 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %43, i32 0, i32 1 + store i64 0, ptr %45, align 4 + %46 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %43, align 8 + %47 = call %"github.com/goplus/llgo/internal/abi.StructField" @"github.com/goplus/llgo/internal/runtime.StructField"(%"github.com/goplus/llgo/internal/runtime.String" %41, ptr %42, i64 8, %"github.com/goplus/llgo/internal/runtime.String" %46, i1 false) + %48 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %49 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %48, i32 0, i32 0 + store ptr @5, ptr %49, align 8 + %50 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %48, i32 0, i32 1 + store i64 1, ptr %50, align 4 + %51 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %48, align 8 + %52 = call ptr @"github.com/goplus/llgo/internal/runtime.Basic"(i64 2) + %53 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %54 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %53, i32 0, i32 0 + store ptr @6, ptr %54, align 8 + %55 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %53, i32 0, i32 1 + store i64 0, ptr %55, align 4 + %56 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %53, align 8 + %57 = call %"github.com/goplus/llgo/internal/abi.StructField" @"github.com/goplus/llgo/internal/runtime.StructField"(%"github.com/goplus/llgo/internal/runtime.String" %51, ptr %52, i64 16, %"github.com/goplus/llgo/internal/runtime.String" %56, i1 false) + %58 = alloca %"github.com/goplus/llgo/internal/runtime.String", align 8 + %59 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %58, i32 0, i32 0 + store ptr @7, ptr %59, align 8 + %60 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.String", ptr %58, i32 0, i32 1 + store i64 4, ptr %60, align 4 + %61 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %58, align 8 + %62 = call ptr @"github.com/goplus/llgo/internal/runtime.AllocU"(i64 168) + %63 = getelementptr %"github.com/goplus/llgo/internal/abi.StructField", ptr %62, i64 0 + store %"github.com/goplus/llgo/internal/abi.StructField" %37, ptr %63, align 8 + %64 = getelementptr %"github.com/goplus/llgo/internal/abi.StructField", ptr %62, i64 1 + store %"github.com/goplus/llgo/internal/abi.StructField" %47, ptr %64, align 8 + %65 = getelementptr %"github.com/goplus/llgo/internal/abi.StructField", ptr %62, i64 2 + store %"github.com/goplus/llgo/internal/abi.StructField" %57, ptr %65, align 8 + %66 = alloca %"github.com/goplus/llgo/internal/runtime.Slice", align 8 + %67 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %66, i32 0, i32 0 + store ptr %62, ptr %67, align 8 + %68 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %66, i32 0, i32 1 + store i64 3, ptr %68, align 4 + %69 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.Slice", ptr %66, i32 0, i32 2 + store i64 3, ptr %69, align 4 + %70 = load %"github.com/goplus/llgo/internal/runtime.Slice", ptr %66, align 8 + %71 = call ptr @"github.com/goplus/llgo/internal/runtime.Struct"(%"github.com/goplus/llgo/internal/runtime.String" %61, i64 24, %"github.com/goplus/llgo/internal/runtime.Slice" %70) + store ptr %71, ptr @"main.struct$RKbUG45GE4henGMAdmt0Rju0JptyR8NsX7IZLsOI0OM", align 8 + ret void +} + +declare ptr @"github.com/goplus/llgo/internal/runtime.ArrayOf"(i64, ptr) + +declare ptr @"github.com/goplus/llgo/internal/runtime.Func"(%"github.com/goplus/llgo/internal/runtime.Slice", %"github.com/goplus/llgo/internal/runtime.Slice", i1) + +declare ptr @"github.com/goplus/llgo/internal/runtime.PointerTo"(ptr) + +declare ptr @"github.com/goplus/llgo/internal/runtime.SliceOf"(ptr) + +declare ptr @"github.com/goplus/llgo/internal/runtime.Struct"(%"github.com/goplus/llgo/internal/runtime.String", i64, %"github.com/goplus/llgo/internal/runtime.Slice") + +declare %"github.com/goplus/llgo/internal/abi.StructField" @"github.com/goplus/llgo/internal/runtime.StructField"(%"github.com/goplus/llgo/internal/runtime.String", ptr, i64, %"github.com/goplus/llgo/internal/runtime.String", i1) diff --git a/internal/runtime/llgo_autogen.lla b/internal/runtime/llgo_autogen.lla index ad8344718cc84f1450f55f4fdfdfb17a01af0583..5c05c17cb4e294aa06ea03f9350b22c2bc60c152 100644 GIT binary patch delta 12310 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 delta 12099 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 Date: Mon, 27 May 2024 07:29:10 +0800 Subject: [PATCH 2/2] ssa: use DefaultTargetTriple for targetData --- chore/gentests/gentests.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/chore/gentests/gentests.go b/chore/gentests/gentests.go index d13eaee2..66f31ce2 100644 --- a/chore/gentests/gentests.go +++ b/chore/gentests/gentests.go @@ -21,9 +21,8 @@ import ( "os" "strings" - "github.com/goplus/llgo/ssa" - "github.com/goplus/llgo/internal/llgen" + "github.com/goplus/llgo/ssa" "github.com/goplus/mod" )