llgo/ssa: llvmSignature/castPtr/castInt bugfix; link: runtime
This commit is contained in:
636
internal/abi/llgo_autogen.ll
Normal file
636
internal/abi/llgo_autogen.ll
Normal file
@@ -0,0 +1,636 @@
|
|||||||
|
; ModuleID = 'github.com/goplus/llgo/internal/abi'
|
||||||
|
source_filename = "github.com/goplus/llgo/internal/abi"
|
||||||
|
|
||||||
|
%"github.com/goplus/llgo/internal/abi.ArrayType" = type { %"github.com/goplus/llgo/internal/abi.Type", ptr, ptr, i64 }
|
||||||
|
%"github.com/goplus/llgo/internal/abi.Type" = type { i64, i64, i32, i8, i8, i8, i8, ptr, ptr, i32, i32 }
|
||||||
|
%"github.com/goplus/llgo/internal/abi.ChanType" = type { %"github.com/goplus/llgo/internal/abi.Type", ptr, i64 }
|
||||||
|
%"github.com/goplus/llgo/internal/abi.FuncType" = type { %"github.com/goplus/llgo/internal/abi.Type", i16, i16 }
|
||||||
|
%"github.com/goplus/llgo/internal/abi.InterfaceType" = type { %"github.com/goplus/llgo/internal/abi.Type", %"github.com/goplus/llgo/internal/abi.Name", %"github.com/goplus/llgo/internal/runtime.Slice" }
|
||||||
|
%"github.com/goplus/llgo/internal/abi.Name" = type { ptr }
|
||||||
|
%"github.com/goplus/llgo/internal/runtime.Slice" = type { ptr, i64, i64 }
|
||||||
|
%"github.com/goplus/llgo/internal/abi.MapType" = type { %"github.com/goplus/llgo/internal/abi.Type", ptr, ptr, ptr, ptr, i8, i8, i16, i32 }
|
||||||
|
%"github.com/goplus/llgo/internal/abi.PtrType" = type { %"github.com/goplus/llgo/internal/abi.Type", ptr }
|
||||||
|
%"github.com/goplus/llgo/internal/abi.SliceType" = type { %"github.com/goplus/llgo/internal/abi.Type", ptr }
|
||||||
|
%"github.com/goplus/llgo/internal/abi.StructType" = type { %"github.com/goplus/llgo/internal/abi.Type", %"github.com/goplus/llgo/internal/abi.Name", %"github.com/goplus/llgo/internal/runtime.Slice" }
|
||||||
|
|
||||||
|
@"github.com/goplus/llgo/internal/abi.init$guard" = global ptr null
|
||||||
|
|
||||||
|
define ptr @"(*github.com/goplus/llgo/internal/abi.ArrayType).ArrayType"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.ArrayType", ptr %0, i32 0, i32 0
|
||||||
|
%2 = call ptr @"(*github.com/goplus/llgo/internal/abi.Type).ArrayType"(ptr %1)
|
||||||
|
ret ptr %2
|
||||||
|
}
|
||||||
|
|
||||||
|
define ptr @"(*github.com/goplus/llgo/internal/abi.ArrayType).Common"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.ArrayType", ptr %0, i32 0, i32 0
|
||||||
|
%2 = call ptr @"(*github.com/goplus/llgo/internal/abi.Type).Common"(ptr %1)
|
||||||
|
ret ptr %2
|
||||||
|
}
|
||||||
|
|
||||||
|
define ptr @"(*github.com/goplus/llgo/internal/abi.ArrayType).FuncType"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.ArrayType", ptr %0, i32 0, i32 0
|
||||||
|
%2 = call ptr @"(*github.com/goplus/llgo/internal/abi.Type).FuncType"(ptr %1)
|
||||||
|
ret ptr %2
|
||||||
|
}
|
||||||
|
|
||||||
|
define ptr @"(*github.com/goplus/llgo/internal/abi.ArrayType).InterfaceType"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.ArrayType", ptr %0, i32 0, i32 0
|
||||||
|
%2 = call ptr @"(*github.com/goplus/llgo/internal/abi.Type).InterfaceType"(ptr %1)
|
||||||
|
ret ptr %2
|
||||||
|
}
|
||||||
|
|
||||||
|
define i64 @"(*github.com/goplus/llgo/internal/abi.ArrayType).Kind"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.ArrayType", ptr %0, i32 0, i32 0
|
||||||
|
%2 = call i64 @"(*github.com/goplus/llgo/internal/abi.Type).Kind"(ptr %1)
|
||||||
|
ret i64 %2
|
||||||
|
}
|
||||||
|
|
||||||
|
define ptr @"(*github.com/goplus/llgo/internal/abi.ArrayType).MapType"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.ArrayType", ptr %0, i32 0, i32 0
|
||||||
|
%2 = call ptr @"(*github.com/goplus/llgo/internal/abi.Type).MapType"(ptr %1)
|
||||||
|
ret ptr %2
|
||||||
|
}
|
||||||
|
|
||||||
|
define ptr @"(*github.com/goplus/llgo/internal/abi.ArrayType).StructType"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.ArrayType", ptr %0, i32 0, i32 0
|
||||||
|
%2 = call ptr @"(*github.com/goplus/llgo/internal/abi.Type).StructType"(ptr %1)
|
||||||
|
ret ptr %2
|
||||||
|
}
|
||||||
|
|
||||||
|
define ptr @"(*github.com/goplus/llgo/internal/abi.ChanType).ArrayType"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.ChanType", ptr %0, i32 0, i32 0
|
||||||
|
%2 = call ptr @"(*github.com/goplus/llgo/internal/abi.Type).ArrayType"(ptr %1)
|
||||||
|
ret ptr %2
|
||||||
|
}
|
||||||
|
|
||||||
|
define ptr @"(*github.com/goplus/llgo/internal/abi.ChanType).Common"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.ChanType", ptr %0, i32 0, i32 0
|
||||||
|
%2 = call ptr @"(*github.com/goplus/llgo/internal/abi.Type).Common"(ptr %1)
|
||||||
|
ret ptr %2
|
||||||
|
}
|
||||||
|
|
||||||
|
define ptr @"(*github.com/goplus/llgo/internal/abi.ChanType).FuncType"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.ChanType", ptr %0, i32 0, i32 0
|
||||||
|
%2 = call ptr @"(*github.com/goplus/llgo/internal/abi.Type).FuncType"(ptr %1)
|
||||||
|
ret ptr %2
|
||||||
|
}
|
||||||
|
|
||||||
|
define ptr @"(*github.com/goplus/llgo/internal/abi.ChanType).InterfaceType"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.ChanType", ptr %0, i32 0, i32 0
|
||||||
|
%2 = call ptr @"(*github.com/goplus/llgo/internal/abi.Type).InterfaceType"(ptr %1)
|
||||||
|
ret ptr %2
|
||||||
|
}
|
||||||
|
|
||||||
|
define i64 @"(*github.com/goplus/llgo/internal/abi.ChanType).Kind"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.ChanType", ptr %0, i32 0, i32 0
|
||||||
|
%2 = call i64 @"(*github.com/goplus/llgo/internal/abi.Type).Kind"(ptr %1)
|
||||||
|
ret i64 %2
|
||||||
|
}
|
||||||
|
|
||||||
|
define i64 @"(*github.com/goplus/llgo/internal/abi.ChanType).Len"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.ChanType", ptr %0, i32 0, i32 0
|
||||||
|
%2 = call i64 @"(*github.com/goplus/llgo/internal/abi.Type).Len"(ptr %1)
|
||||||
|
ret i64 %2
|
||||||
|
}
|
||||||
|
|
||||||
|
define ptr @"(*github.com/goplus/llgo/internal/abi.ChanType).MapType"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.ChanType", ptr %0, i32 0, i32 0
|
||||||
|
%2 = call ptr @"(*github.com/goplus/llgo/internal/abi.Type).MapType"(ptr %1)
|
||||||
|
ret ptr %2
|
||||||
|
}
|
||||||
|
|
||||||
|
define ptr @"(*github.com/goplus/llgo/internal/abi.ChanType).StructType"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.ChanType", ptr %0, i32 0, i32 0
|
||||||
|
%2 = call ptr @"(*github.com/goplus/llgo/internal/abi.Type).StructType"(ptr %1)
|
||||||
|
ret ptr %2
|
||||||
|
}
|
||||||
|
|
||||||
|
define ptr @"(*github.com/goplus/llgo/internal/abi.FuncType).ArrayType"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.FuncType", ptr %0, i32 0, i32 0
|
||||||
|
%2 = call ptr @"(*github.com/goplus/llgo/internal/abi.Type).ArrayType"(ptr %1)
|
||||||
|
ret ptr %2
|
||||||
|
}
|
||||||
|
|
||||||
|
define ptr @"(*github.com/goplus/llgo/internal/abi.FuncType).Common"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.FuncType", ptr %0, i32 0, i32 0
|
||||||
|
%2 = call ptr @"(*github.com/goplus/llgo/internal/abi.Type).Common"(ptr %1)
|
||||||
|
ret ptr %2
|
||||||
|
}
|
||||||
|
|
||||||
|
define ptr @"(*github.com/goplus/llgo/internal/abi.FuncType).Elem"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.FuncType", ptr %0, i32 0, i32 0
|
||||||
|
%2 = call ptr @"(*github.com/goplus/llgo/internal/abi.Type).Elem"(ptr %1)
|
||||||
|
ret ptr %2
|
||||||
|
}
|
||||||
|
|
||||||
|
define ptr @"(*github.com/goplus/llgo/internal/abi.FuncType).FuncType"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.FuncType", ptr %0, i32 0, i32 0
|
||||||
|
%2 = call ptr @"(*github.com/goplus/llgo/internal/abi.Type).FuncType"(ptr %1)
|
||||||
|
ret ptr %2
|
||||||
|
}
|
||||||
|
|
||||||
|
define ptr @"(*github.com/goplus/llgo/internal/abi.FuncType).InterfaceType"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.FuncType", ptr %0, i32 0, i32 0
|
||||||
|
%2 = call ptr @"(*github.com/goplus/llgo/internal/abi.Type).InterfaceType"(ptr %1)
|
||||||
|
ret ptr %2
|
||||||
|
}
|
||||||
|
|
||||||
|
define i64 @"(*github.com/goplus/llgo/internal/abi.FuncType).Kind"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.FuncType", ptr %0, i32 0, i32 0
|
||||||
|
%2 = call i64 @"(*github.com/goplus/llgo/internal/abi.Type).Kind"(ptr %1)
|
||||||
|
ret i64 %2
|
||||||
|
}
|
||||||
|
|
||||||
|
define i64 @"(*github.com/goplus/llgo/internal/abi.FuncType).Len"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.FuncType", ptr %0, i32 0, i32 0
|
||||||
|
%2 = call i64 @"(*github.com/goplus/llgo/internal/abi.Type).Len"(ptr %1)
|
||||||
|
ret i64 %2
|
||||||
|
}
|
||||||
|
|
||||||
|
define ptr @"(*github.com/goplus/llgo/internal/abi.FuncType).MapType"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.FuncType", ptr %0, i32 0, i32 0
|
||||||
|
%2 = call ptr @"(*github.com/goplus/llgo/internal/abi.Type).MapType"(ptr %1)
|
||||||
|
ret ptr %2
|
||||||
|
}
|
||||||
|
|
||||||
|
define ptr @"(*github.com/goplus/llgo/internal/abi.FuncType).StructType"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.FuncType", ptr %0, i32 0, i32 0
|
||||||
|
%2 = call ptr @"(*github.com/goplus/llgo/internal/abi.Type).StructType"(ptr %1)
|
||||||
|
ret ptr %2
|
||||||
|
}
|
||||||
|
|
||||||
|
define ptr @"(*github.com/goplus/llgo/internal/abi.InterfaceType).ArrayType"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.InterfaceType", ptr %0, i32 0, i32 0
|
||||||
|
%2 = call ptr @"(*github.com/goplus/llgo/internal/abi.Type).ArrayType"(ptr %1)
|
||||||
|
ret ptr %2
|
||||||
|
}
|
||||||
|
|
||||||
|
define ptr @"(*github.com/goplus/llgo/internal/abi.InterfaceType).Common"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.InterfaceType", ptr %0, i32 0, i32 0
|
||||||
|
%2 = call ptr @"(*github.com/goplus/llgo/internal/abi.Type).Common"(ptr %1)
|
||||||
|
ret ptr %2
|
||||||
|
}
|
||||||
|
|
||||||
|
define ptr @"(*github.com/goplus/llgo/internal/abi.InterfaceType).Elem"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.InterfaceType", ptr %0, i32 0, i32 0
|
||||||
|
%2 = call ptr @"(*github.com/goplus/llgo/internal/abi.Type).Elem"(ptr %1)
|
||||||
|
ret ptr %2
|
||||||
|
}
|
||||||
|
|
||||||
|
define ptr @"(*github.com/goplus/llgo/internal/abi.InterfaceType).FuncType"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.InterfaceType", ptr %0, i32 0, i32 0
|
||||||
|
%2 = call ptr @"(*github.com/goplus/llgo/internal/abi.Type).FuncType"(ptr %1)
|
||||||
|
ret ptr %2
|
||||||
|
}
|
||||||
|
|
||||||
|
define ptr @"(*github.com/goplus/llgo/internal/abi.InterfaceType).InterfaceType"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.InterfaceType", ptr %0, i32 0, i32 0
|
||||||
|
%2 = call ptr @"(*github.com/goplus/llgo/internal/abi.Type).InterfaceType"(ptr %1)
|
||||||
|
ret ptr %2
|
||||||
|
}
|
||||||
|
|
||||||
|
define i64 @"(*github.com/goplus/llgo/internal/abi.InterfaceType).Kind"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.InterfaceType", ptr %0, i32 0, i32 0
|
||||||
|
%2 = call i64 @"(*github.com/goplus/llgo/internal/abi.Type).Kind"(ptr %1)
|
||||||
|
ret i64 %2
|
||||||
|
}
|
||||||
|
|
||||||
|
define i64 @"(*github.com/goplus/llgo/internal/abi.InterfaceType).Len"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.InterfaceType", ptr %0, i32 0, i32 0
|
||||||
|
%2 = call i64 @"(*github.com/goplus/llgo/internal/abi.Type).Len"(ptr %1)
|
||||||
|
ret i64 %2
|
||||||
|
}
|
||||||
|
|
||||||
|
define ptr @"(*github.com/goplus/llgo/internal/abi.InterfaceType).MapType"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.InterfaceType", ptr %0, i32 0, i32 0
|
||||||
|
%2 = call ptr @"(*github.com/goplus/llgo/internal/abi.Type).MapType"(ptr %1)
|
||||||
|
ret ptr %2
|
||||||
|
}
|
||||||
|
|
||||||
|
define ptr @"(*github.com/goplus/llgo/internal/abi.InterfaceType).StructType"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.InterfaceType", ptr %0, i32 0, i32 0
|
||||||
|
%2 = call ptr @"(*github.com/goplus/llgo/internal/abi.Type).StructType"(ptr %1)
|
||||||
|
ret ptr %2
|
||||||
|
}
|
||||||
|
|
||||||
|
define ptr @"(*github.com/goplus/llgo/internal/abi.MapType).ArrayType"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.MapType", ptr %0, i32 0, i32 0
|
||||||
|
%2 = call ptr @"(*github.com/goplus/llgo/internal/abi.Type).ArrayType"(ptr %1)
|
||||||
|
ret ptr %2
|
||||||
|
}
|
||||||
|
|
||||||
|
define ptr @"(*github.com/goplus/llgo/internal/abi.MapType).Common"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.MapType", ptr %0, i32 0, i32 0
|
||||||
|
%2 = call ptr @"(*github.com/goplus/llgo/internal/abi.Type).Common"(ptr %1)
|
||||||
|
ret ptr %2
|
||||||
|
}
|
||||||
|
|
||||||
|
define ptr @"(*github.com/goplus/llgo/internal/abi.MapType).FuncType"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.MapType", ptr %0, i32 0, i32 0
|
||||||
|
%2 = call ptr @"(*github.com/goplus/llgo/internal/abi.Type).FuncType"(ptr %1)
|
||||||
|
ret ptr %2
|
||||||
|
}
|
||||||
|
|
||||||
|
define ptr @"(*github.com/goplus/llgo/internal/abi.MapType).InterfaceType"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.MapType", ptr %0, i32 0, i32 0
|
||||||
|
%2 = call ptr @"(*github.com/goplus/llgo/internal/abi.Type).InterfaceType"(ptr %1)
|
||||||
|
ret ptr %2
|
||||||
|
}
|
||||||
|
|
||||||
|
define i64 @"(*github.com/goplus/llgo/internal/abi.MapType).Kind"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.MapType", ptr %0, i32 0, i32 0
|
||||||
|
%2 = call i64 @"(*github.com/goplus/llgo/internal/abi.Type).Kind"(ptr %1)
|
||||||
|
ret i64 %2
|
||||||
|
}
|
||||||
|
|
||||||
|
define i64 @"(*github.com/goplus/llgo/internal/abi.MapType).Len"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.MapType", ptr %0, i32 0, i32 0
|
||||||
|
%2 = call i64 @"(*github.com/goplus/llgo/internal/abi.Type).Len"(ptr %1)
|
||||||
|
ret i64 %2
|
||||||
|
}
|
||||||
|
|
||||||
|
define ptr @"(*github.com/goplus/llgo/internal/abi.MapType).MapType"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.MapType", ptr %0, i32 0, i32 0
|
||||||
|
%2 = call ptr @"(*github.com/goplus/llgo/internal/abi.Type).MapType"(ptr %1)
|
||||||
|
ret ptr %2
|
||||||
|
}
|
||||||
|
|
||||||
|
define ptr @"(*github.com/goplus/llgo/internal/abi.MapType).StructType"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.MapType", ptr %0, i32 0, i32 0
|
||||||
|
%2 = call ptr @"(*github.com/goplus/llgo/internal/abi.Type).StructType"(ptr %1)
|
||||||
|
ret ptr %2
|
||||||
|
}
|
||||||
|
|
||||||
|
define ptr @"(*github.com/goplus/llgo/internal/abi.PtrType).ArrayType"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.PtrType", ptr %0, i32 0, i32 0
|
||||||
|
%2 = call ptr @"(*github.com/goplus/llgo/internal/abi.Type).ArrayType"(ptr %1)
|
||||||
|
ret ptr %2
|
||||||
|
}
|
||||||
|
|
||||||
|
define ptr @"(*github.com/goplus/llgo/internal/abi.PtrType).Common"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.PtrType", ptr %0, i32 0, i32 0
|
||||||
|
%2 = call ptr @"(*github.com/goplus/llgo/internal/abi.Type).Common"(ptr %1)
|
||||||
|
ret ptr %2
|
||||||
|
}
|
||||||
|
|
||||||
|
define ptr @"(*github.com/goplus/llgo/internal/abi.PtrType).FuncType"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.PtrType", ptr %0, i32 0, i32 0
|
||||||
|
%2 = call ptr @"(*github.com/goplus/llgo/internal/abi.Type).FuncType"(ptr %1)
|
||||||
|
ret ptr %2
|
||||||
|
}
|
||||||
|
|
||||||
|
define ptr @"(*github.com/goplus/llgo/internal/abi.PtrType).InterfaceType"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.PtrType", ptr %0, i32 0, i32 0
|
||||||
|
%2 = call ptr @"(*github.com/goplus/llgo/internal/abi.Type).InterfaceType"(ptr %1)
|
||||||
|
ret ptr %2
|
||||||
|
}
|
||||||
|
|
||||||
|
define i64 @"(*github.com/goplus/llgo/internal/abi.PtrType).Kind"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.PtrType", ptr %0, i32 0, i32 0
|
||||||
|
%2 = call i64 @"(*github.com/goplus/llgo/internal/abi.Type).Kind"(ptr %1)
|
||||||
|
ret i64 %2
|
||||||
|
}
|
||||||
|
|
||||||
|
define i64 @"(*github.com/goplus/llgo/internal/abi.PtrType).Len"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.PtrType", ptr %0, i32 0, i32 0
|
||||||
|
%2 = call i64 @"(*github.com/goplus/llgo/internal/abi.Type).Len"(ptr %1)
|
||||||
|
ret i64 %2
|
||||||
|
}
|
||||||
|
|
||||||
|
define ptr @"(*github.com/goplus/llgo/internal/abi.PtrType).MapType"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.PtrType", ptr %0, i32 0, i32 0
|
||||||
|
%2 = call ptr @"(*github.com/goplus/llgo/internal/abi.Type).MapType"(ptr %1)
|
||||||
|
ret ptr %2
|
||||||
|
}
|
||||||
|
|
||||||
|
define ptr @"(*github.com/goplus/llgo/internal/abi.PtrType).StructType"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.PtrType", ptr %0, i32 0, i32 0
|
||||||
|
%2 = call ptr @"(*github.com/goplus/llgo/internal/abi.Type).StructType"(ptr %1)
|
||||||
|
ret ptr %2
|
||||||
|
}
|
||||||
|
|
||||||
|
define ptr @"(*github.com/goplus/llgo/internal/abi.SliceType).ArrayType"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.SliceType", ptr %0, i32 0, i32 0
|
||||||
|
%2 = call ptr @"(*github.com/goplus/llgo/internal/abi.Type).ArrayType"(ptr %1)
|
||||||
|
ret ptr %2
|
||||||
|
}
|
||||||
|
|
||||||
|
define ptr @"(*github.com/goplus/llgo/internal/abi.SliceType).Common"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.SliceType", ptr %0, i32 0, i32 0
|
||||||
|
%2 = call ptr @"(*github.com/goplus/llgo/internal/abi.Type).Common"(ptr %1)
|
||||||
|
ret ptr %2
|
||||||
|
}
|
||||||
|
|
||||||
|
define ptr @"(*github.com/goplus/llgo/internal/abi.SliceType).FuncType"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.SliceType", ptr %0, i32 0, i32 0
|
||||||
|
%2 = call ptr @"(*github.com/goplus/llgo/internal/abi.Type).FuncType"(ptr %1)
|
||||||
|
ret ptr %2
|
||||||
|
}
|
||||||
|
|
||||||
|
define ptr @"(*github.com/goplus/llgo/internal/abi.SliceType).InterfaceType"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.SliceType", ptr %0, i32 0, i32 0
|
||||||
|
%2 = call ptr @"(*github.com/goplus/llgo/internal/abi.Type).InterfaceType"(ptr %1)
|
||||||
|
ret ptr %2
|
||||||
|
}
|
||||||
|
|
||||||
|
define i64 @"(*github.com/goplus/llgo/internal/abi.SliceType).Kind"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.SliceType", ptr %0, i32 0, i32 0
|
||||||
|
%2 = call i64 @"(*github.com/goplus/llgo/internal/abi.Type).Kind"(ptr %1)
|
||||||
|
ret i64 %2
|
||||||
|
}
|
||||||
|
|
||||||
|
define i64 @"(*github.com/goplus/llgo/internal/abi.SliceType).Len"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.SliceType", ptr %0, i32 0, i32 0
|
||||||
|
%2 = call i64 @"(*github.com/goplus/llgo/internal/abi.Type).Len"(ptr %1)
|
||||||
|
ret i64 %2
|
||||||
|
}
|
||||||
|
|
||||||
|
define ptr @"(*github.com/goplus/llgo/internal/abi.SliceType).MapType"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.SliceType", ptr %0, i32 0, i32 0
|
||||||
|
%2 = call ptr @"(*github.com/goplus/llgo/internal/abi.Type).MapType"(ptr %1)
|
||||||
|
ret ptr %2
|
||||||
|
}
|
||||||
|
|
||||||
|
define ptr @"(*github.com/goplus/llgo/internal/abi.SliceType).StructType"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.SliceType", ptr %0, i32 0, i32 0
|
||||||
|
%2 = call ptr @"(*github.com/goplus/llgo/internal/abi.Type).StructType"(ptr %1)
|
||||||
|
ret ptr %2
|
||||||
|
}
|
||||||
|
|
||||||
|
define ptr @"(*github.com/goplus/llgo/internal/abi.StructType).ArrayType"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.StructType", ptr %0, i32 0, i32 0
|
||||||
|
%2 = call ptr @"(*github.com/goplus/llgo/internal/abi.Type).ArrayType"(ptr %1)
|
||||||
|
ret ptr %2
|
||||||
|
}
|
||||||
|
|
||||||
|
define ptr @"(*github.com/goplus/llgo/internal/abi.StructType).Common"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.StructType", ptr %0, i32 0, i32 0
|
||||||
|
%2 = call ptr @"(*github.com/goplus/llgo/internal/abi.Type).Common"(ptr %1)
|
||||||
|
ret ptr %2
|
||||||
|
}
|
||||||
|
|
||||||
|
define ptr @"(*github.com/goplus/llgo/internal/abi.StructType).Elem"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.StructType", ptr %0, i32 0, i32 0
|
||||||
|
%2 = call ptr @"(*github.com/goplus/llgo/internal/abi.Type).Elem"(ptr %1)
|
||||||
|
ret ptr %2
|
||||||
|
}
|
||||||
|
|
||||||
|
define ptr @"(*github.com/goplus/llgo/internal/abi.StructType).FuncType"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.StructType", ptr %0, i32 0, i32 0
|
||||||
|
%2 = call ptr @"(*github.com/goplus/llgo/internal/abi.Type).FuncType"(ptr %1)
|
||||||
|
ret ptr %2
|
||||||
|
}
|
||||||
|
|
||||||
|
define ptr @"(*github.com/goplus/llgo/internal/abi.StructType).InterfaceType"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.StructType", ptr %0, i32 0, i32 0
|
||||||
|
%2 = call ptr @"(*github.com/goplus/llgo/internal/abi.Type).InterfaceType"(ptr %1)
|
||||||
|
ret ptr %2
|
||||||
|
}
|
||||||
|
|
||||||
|
define i64 @"(*github.com/goplus/llgo/internal/abi.StructType).Kind"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.StructType", ptr %0, i32 0, i32 0
|
||||||
|
%2 = call i64 @"(*github.com/goplus/llgo/internal/abi.Type).Kind"(ptr %1)
|
||||||
|
ret i64 %2
|
||||||
|
}
|
||||||
|
|
||||||
|
define i64 @"(*github.com/goplus/llgo/internal/abi.StructType).Len"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.StructType", ptr %0, i32 0, i32 0
|
||||||
|
%2 = call i64 @"(*github.com/goplus/llgo/internal/abi.Type).Len"(ptr %1)
|
||||||
|
ret i64 %2
|
||||||
|
}
|
||||||
|
|
||||||
|
define ptr @"(*github.com/goplus/llgo/internal/abi.StructType).MapType"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.StructType", ptr %0, i32 0, i32 0
|
||||||
|
%2 = call ptr @"(*github.com/goplus/llgo/internal/abi.Type).MapType"(ptr %1)
|
||||||
|
ret ptr %2
|
||||||
|
}
|
||||||
|
|
||||||
|
define ptr @"(*github.com/goplus/llgo/internal/abi.StructType).StructType"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.StructType", ptr %0, i32 0, i32 0
|
||||||
|
%2 = call ptr @"(*github.com/goplus/llgo/internal/abi.Type).StructType"(ptr %1)
|
||||||
|
ret ptr %2
|
||||||
|
}
|
||||||
|
|
||||||
|
define ptr @"(*github.com/goplus/llgo/internal/abi.Type).ArrayType"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = call i64 @"(*github.com/goplus/llgo/internal/abi.Type).Kind"(ptr %0)
|
||||||
|
%2 = icmp ne i64 %1, 17
|
||||||
|
br i1 %2, label %_llgo_1, label %_llgo_2
|
||||||
|
|
||||||
|
_llgo_1: ; preds = %_llgo_0
|
||||||
|
ret ptr null
|
||||||
|
|
||||||
|
_llgo_2: ; preds = %_llgo_0
|
||||||
|
ret ptr %0
|
||||||
|
}
|
||||||
|
|
||||||
|
define ptr @"(*github.com/goplus/llgo/internal/abi.Type).Common"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
ret ptr %0
|
||||||
|
}
|
||||||
|
|
||||||
|
define ptr @"(*github.com/goplus/llgo/internal/abi.Type).Elem"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = call i64 @"(*github.com/goplus/llgo/internal/abi.Type).Kind"(ptr %0)
|
||||||
|
%2 = icmp eq i64 %1, 17
|
||||||
|
br i1 %2, label %_llgo_1, label %_llgo_3
|
||||||
|
|
||||||
|
_llgo_1: ; preds = %_llgo_0
|
||||||
|
%3 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.ArrayType", ptr %0, i32 0, i32 1
|
||||||
|
%4 = load ptr, ptr %3, align 8
|
||||||
|
ret ptr %4
|
||||||
|
|
||||||
|
_llgo_2: ; preds = %_llgo_3
|
||||||
|
%5 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.ChanType", ptr %0, i32 0, i32 1
|
||||||
|
%6 = load ptr, ptr %5, align 8
|
||||||
|
ret ptr %6
|
||||||
|
|
||||||
|
_llgo_3: ; preds = %_llgo_0
|
||||||
|
%7 = icmp eq i64 %1, 18
|
||||||
|
br i1 %7, label %_llgo_2, label %_llgo_5
|
||||||
|
|
||||||
|
_llgo_4: ; preds = %_llgo_5
|
||||||
|
%8 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.MapType", ptr %0, i32 0, i32 2
|
||||||
|
%9 = load ptr, ptr %8, align 8
|
||||||
|
ret ptr %9
|
||||||
|
|
||||||
|
_llgo_5: ; preds = %_llgo_3
|
||||||
|
%10 = icmp eq i64 %1, 21
|
||||||
|
br i1 %10, label %_llgo_4, label %_llgo_7
|
||||||
|
|
||||||
|
_llgo_6: ; preds = %_llgo_7
|
||||||
|
%11 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.PtrType", ptr %0, i32 0, i32 1
|
||||||
|
%12 = load ptr, ptr %11, align 8
|
||||||
|
ret ptr %12
|
||||||
|
|
||||||
|
_llgo_7: ; preds = %_llgo_5
|
||||||
|
%13 = icmp eq i64 %1, 22
|
||||||
|
br i1 %13, label %_llgo_6, label %_llgo_9
|
||||||
|
|
||||||
|
_llgo_8: ; preds = %_llgo_9
|
||||||
|
%14 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.SliceType", ptr %0, i32 0, i32 1
|
||||||
|
%15 = load ptr, ptr %14, align 8
|
||||||
|
ret ptr %15
|
||||||
|
|
||||||
|
_llgo_9: ; preds = %_llgo_7
|
||||||
|
%16 = icmp eq i64 %1, 23
|
||||||
|
br i1 %16, label %_llgo_8, label %_llgo_10
|
||||||
|
|
||||||
|
_llgo_10: ; preds = %_llgo_9
|
||||||
|
ret ptr null
|
||||||
|
}
|
||||||
|
|
||||||
|
define ptr @"(*github.com/goplus/llgo/internal/abi.Type).FuncType"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = call i64 @"(*github.com/goplus/llgo/internal/abi.Type).Kind"(ptr %0)
|
||||||
|
%2 = icmp ne i64 %1, 19
|
||||||
|
br i1 %2, label %_llgo_1, label %_llgo_2
|
||||||
|
|
||||||
|
_llgo_1: ; preds = %_llgo_0
|
||||||
|
ret ptr null
|
||||||
|
|
||||||
|
_llgo_2: ; preds = %_llgo_0
|
||||||
|
ret ptr %0
|
||||||
|
}
|
||||||
|
|
||||||
|
define ptr @"(*github.com/goplus/llgo/internal/abi.Type).InterfaceType"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = call i64 @"(*github.com/goplus/llgo/internal/abi.Type).Kind"(ptr %0)
|
||||||
|
%2 = icmp ne i64 %1, 20
|
||||||
|
br i1 %2, label %_llgo_1, label %_llgo_2
|
||||||
|
|
||||||
|
_llgo_1: ; preds = %_llgo_0
|
||||||
|
ret ptr null
|
||||||
|
|
||||||
|
_llgo_2: ; preds = %_llgo_0
|
||||||
|
ret ptr %0
|
||||||
|
}
|
||||||
|
|
||||||
|
define i64 @"(*github.com/goplus/llgo/internal/abi.Type).Kind"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.Type", ptr %0, i32 0, i32 6
|
||||||
|
%2 = load i8, ptr %1, align 1
|
||||||
|
%3 = and i8 %2, 31
|
||||||
|
%castInt = sext i8 %3 to i64
|
||||||
|
ret i64 %castInt
|
||||||
|
}
|
||||||
|
|
||||||
|
define i64 @"(*github.com/goplus/llgo/internal/abi.Type).Len"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = call i64 @"(*github.com/goplus/llgo/internal/abi.Type).Kind"(ptr %0)
|
||||||
|
%2 = icmp eq i64 %1, 17
|
||||||
|
br i1 %2, label %_llgo_1, label %_llgo_2
|
||||||
|
|
||||||
|
_llgo_1: ; preds = %_llgo_0
|
||||||
|
%3 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.ArrayType", ptr %0, i32 0, i32 3
|
||||||
|
%4 = load i64, ptr %3, align 4
|
||||||
|
ret i64 %4
|
||||||
|
|
||||||
|
_llgo_2: ; preds = %_llgo_0
|
||||||
|
ret i64 0
|
||||||
|
}
|
||||||
|
|
||||||
|
define ptr @"(*github.com/goplus/llgo/internal/abi.Type).MapType"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = call i64 @"(*github.com/goplus/llgo/internal/abi.Type).Kind"(ptr %0)
|
||||||
|
%2 = icmp ne i64 %1, 21
|
||||||
|
br i1 %2, label %_llgo_1, label %_llgo_2
|
||||||
|
|
||||||
|
_llgo_1: ; preds = %_llgo_0
|
||||||
|
ret ptr null
|
||||||
|
|
||||||
|
_llgo_2: ; preds = %_llgo_0
|
||||||
|
ret ptr %0
|
||||||
|
}
|
||||||
|
|
||||||
|
define ptr @"(*github.com/goplus/llgo/internal/abi.Type).StructType"(ptr %0) {
|
||||||
|
_llgo_0:
|
||||||
|
%1 = call i64 @"(*github.com/goplus/llgo/internal/abi.Type).Kind"(ptr %0)
|
||||||
|
%2 = icmp ne i64 %1, 25
|
||||||
|
br i1 %2, label %_llgo_1, label %_llgo_2
|
||||||
|
|
||||||
|
_llgo_1: ; preds = %_llgo_0
|
||||||
|
ret ptr null
|
||||||
|
|
||||||
|
_llgo_2: ; preds = %_llgo_0
|
||||||
|
ret ptr %0
|
||||||
|
}
|
||||||
|
|
||||||
|
define void @"github.com/goplus/llgo/internal/abi.init"() {
|
||||||
|
_llgo_0:
|
||||||
|
%0 = load i1, ptr @"github.com/goplus/llgo/internal/abi.init$guard", align 1
|
||||||
|
br i1 %0, label %_llgo_2, label %_llgo_1
|
||||||
|
|
||||||
|
_llgo_1: ; preds = %_llgo_0
|
||||||
|
store i1 true, ptr @"github.com/goplus/llgo/internal/abi.init$guard", align 1
|
||||||
|
br label %_llgo_2
|
||||||
|
|
||||||
|
_llgo_2: ; preds = %_llgo_1, %_llgo_0
|
||||||
|
ret void
|
||||||
|
}
|
||||||
@@ -89,7 +89,7 @@ const (
|
|||||||
func Do(args []string, conf *Config) {
|
func Do(args []string, conf *Config) {
|
||||||
flags, patterns, verbose := ParseArgs(args, buildFlags)
|
flags, patterns, verbose := ParseArgs(args, buildFlags)
|
||||||
cfg := &packages.Config{
|
cfg := &packages.Config{
|
||||||
Mode: loadSyntax | packages.NeedDeps | packages.NeedExportFile,
|
Mode: loadSyntax | packages.NeedDeps | packages.NeedModule | packages.NeedExportFile,
|
||||||
BuildFlags: flags,
|
BuildFlags: flags,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -119,16 +119,14 @@ func Do(args []string, conf *Config) {
|
|||||||
}
|
}
|
||||||
buildAllPkgs(prog, initial, mode, verbose)
|
buildAllPkgs(prog, initial, mode, verbose)
|
||||||
|
|
||||||
var runtime *packages.Package
|
var runtimeFiles []string
|
||||||
if rt != nil {
|
if rt != nil {
|
||||||
buildAllPkgs(prog, rt, mode, verbose)
|
runtimeFiles = allLinkFiles(rt)
|
||||||
runtime = rt[0]
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if mode != ModeBuild {
|
if mode != ModeBuild {
|
||||||
for _, pkg := range initial {
|
for _, pkg := range initial {
|
||||||
if pkg.Name == "main" {
|
if pkg.Name == "main" {
|
||||||
linkMainPkg(pkg, runtime, conf, mode, verbose)
|
linkMainPkg(pkg, runtimeFiles, conf, mode, verbose)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -146,7 +144,7 @@ func buildAllPkgs(prog llssa.Program, initial []*packages.Package, mode Mode, ve
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func linkMainPkg(pkg, runtime *packages.Package, conf *Config, mode Mode, verbose bool) {
|
func linkMainPkg(pkg *packages.Package, runtimeFiles []string, conf *Config, mode Mode, verbose bool) {
|
||||||
pkgPath := pkg.PkgPath
|
pkgPath := pkg.PkgPath
|
||||||
name := path.Base(pkgPath)
|
name := path.Base(pkgPath)
|
||||||
app := conf.OutFile
|
app := conf.OutFile
|
||||||
@@ -154,12 +152,12 @@ func linkMainPkg(pkg, runtime *packages.Package, conf *Config, mode Mode, verbos
|
|||||||
app = filepath.Join(conf.BinPath, name+conf.AppExt)
|
app = filepath.Join(conf.BinPath, name+conf.AppExt)
|
||||||
}
|
}
|
||||||
const N = 3
|
const N = 3
|
||||||
args := make([]string, N, len(pkg.Imports)+(N+2))
|
args := make([]string, N, len(pkg.Imports)+len(runtimeFiles)+(N+1))
|
||||||
args[0] = "-o"
|
args[0] = "-o"
|
||||||
args[1] = app
|
args[1] = app
|
||||||
args[2] = "-Wno-override-module"
|
args[2] = "-Wno-override-module"
|
||||||
if runtime != nil {
|
if runtimeFiles != nil {
|
||||||
args = append(args, runtime.ExportFile+".ll")
|
args = append(args, runtimeFiles...)
|
||||||
}
|
}
|
||||||
packages.Visit([]*packages.Package{pkg}, nil, func(p *packages.Package) {
|
packages.Visit([]*packages.Package{pkg}, nil, func(p *packages.Package) {
|
||||||
if p.PkgPath != "unsafe" { // TODO(xsw): maybe can remove this special case
|
if p.PkgPath != "unsafe" { // TODO(xsw): maybe can remove this special case
|
||||||
@@ -282,6 +280,39 @@ func checkFlag(arg string, i *int, verbose *bool, swflags map[string]bool) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func allLinkFiles(rt []*packages.Package) (outFiles []string) {
|
||||||
|
outFiles = make([]string, 0, len(rt))
|
||||||
|
root := rootLLGo(rt[0])
|
||||||
|
packages.Visit(rt, nil, func(p *packages.Package) {
|
||||||
|
if isPkgInLLGo(p.PkgPath) {
|
||||||
|
outFile := filepath.Join(root+p.PkgPath[len(llgoModPath):], "llgo_autogen.ll")
|
||||||
|
outFiles = append(outFiles, outFile)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO(xsw): llgo root dir
|
||||||
|
func rootLLGo(runtime *packages.Package) string {
|
||||||
|
return runtime.Module.Dir
|
||||||
|
}
|
||||||
|
|
||||||
|
const (
|
||||||
|
llgoModPath = "github.com/goplus/llgo"
|
||||||
|
)
|
||||||
|
|
||||||
|
func isPkgInLLGo(pkgPath string) bool {
|
||||||
|
return isPkgInMod(pkgPath, llgoModPath)
|
||||||
|
}
|
||||||
|
|
||||||
|
func isPkgInMod(pkgPath, modPath string) bool {
|
||||||
|
if strings.HasPrefix(pkgPath, modPath) {
|
||||||
|
suffix := pkgPath[len(modPath):]
|
||||||
|
return suffix == "" || suffix[0] == '/'
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
func check(err error) {
|
func check(err error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ source_filename = "github.com/goplus/llgo/internal/runtime"
|
|||||||
%"github.com/goplus/llgo/internal/runtime.itab" = type { ptr, ptr, i32, [4 x i8], [1 x i64] }
|
%"github.com/goplus/llgo/internal/runtime.itab" = type { ptr, ptr, i32, [4 x i8], [1 x i64] }
|
||||||
%"github.com/goplus/llgo/internal/runtime.String" = type { ptr, i64 }
|
%"github.com/goplus/llgo/internal/runtime.String" = type { ptr, i64 }
|
||||||
%"github.com/goplus/llgo/internal/abi.InterfaceType" = type { %"github.com/goplus/llgo/internal/abi.Type", %"github.com/goplus/llgo/internal/abi.Name", %"github.com/goplus/llgo/internal/runtime.Slice" }
|
%"github.com/goplus/llgo/internal/abi.InterfaceType" = type { %"github.com/goplus/llgo/internal/abi.Type", %"github.com/goplus/llgo/internal/abi.Name", %"github.com/goplus/llgo/internal/runtime.Slice" }
|
||||||
%"github.com/goplus/llgo/internal/abi.Type" = type { i64, i64, i32, i8, i8, i8, i8, i1 (ptr, ptr), ptr, i32, i32 }
|
%"github.com/goplus/llgo/internal/abi.Type" = type { i64, i64, i32, i8, i8, i8, i8, ptr, ptr, i32, i32 }
|
||||||
%"github.com/goplus/llgo/internal/abi.Name" = type { ptr }
|
%"github.com/goplus/llgo/internal/abi.Name" = type { ptr }
|
||||||
%"github.com/goplus/llgo/internal/runtime.Slice" = type { ptr, i64, i64 }
|
%"github.com/goplus/llgo/internal/runtime.Slice" = type { ptr, i64, i64 }
|
||||||
|
|
||||||
@@ -41,8 +41,8 @@ _llgo_0:
|
|||||||
_llgo_1: ; preds = %_llgo_0
|
_llgo_1: ; preds = %_llgo_0
|
||||||
%8 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %2, i32 0, i32 1
|
%8 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %2, i32 0, i32 1
|
||||||
%9 = load ptr, ptr %8, align 8
|
%9 = load ptr, ptr %8, align 8
|
||||||
%castInt = sext ptr %9 to i64
|
%ptr2int = ptrtoint ptr %9 to i64
|
||||||
%mrv = insertvalue { i64, i1 } poison, i64 %castInt, 0
|
%mrv = insertvalue { i64, i1 } poison, i64 %ptr2int, 0
|
||||||
%mrv1 = insertvalue { i64, i1 } %mrv, i1 true, 1
|
%mrv1 = insertvalue { i64, i1 } %mrv, i1 true, 1
|
||||||
ret { i64, i1 } %mrv1
|
ret { i64, i1 } %mrv1
|
||||||
|
|
||||||
@@ -75,8 +75,8 @@ _llgo_0:
|
|||||||
_llgo_1: ; preds = %_llgo_0
|
_llgo_1: ; preds = %_llgo_0
|
||||||
%8 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %2, i32 0, i32 1
|
%8 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %2, i32 0, i32 1
|
||||||
%9 = load ptr, ptr %8, align 8
|
%9 = load ptr, ptr %8, align 8
|
||||||
%castInt = sext ptr %9 to i64
|
%ptr2int = ptrtoint ptr %9 to i64
|
||||||
ret i64 %castInt
|
ret i64 %ptr2int
|
||||||
|
|
||||||
_llgo_2: ; preds = %_llgo_0
|
_llgo_2: ; preds = %_llgo_0
|
||||||
%10 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyString"([21 x i8] c"I2Int: type mismatch\00")
|
%10 = call %"github.com/goplus/llgo/internal/runtime.iface" @"github.com/goplus/llgo/internal/runtime.MakeAnyString"([21 x i8] c"I2Int: type mismatch\00")
|
||||||
@@ -229,9 +229,9 @@ _llgo_0:
|
|||||||
store i32 0, ptr %8, align 4
|
store i32 0, ptr %8, align 4
|
||||||
store i64 0, ptr %10, align 4
|
store i64 0, ptr %10, align 4
|
||||||
%11 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %2, i32 0, i32 1
|
%11 = getelementptr inbounds %"github.com/goplus/llgo/internal/runtime.iface", ptr %2, i32 0, i32 1
|
||||||
%castPtr = addrspacecast i64 %1 to ptr
|
%int2ptr = inttoptr i64 %1 to ptr
|
||||||
store ptr %4, ptr %3, align 8
|
store ptr %4, ptr %3, align 8
|
||||||
store ptr %castPtr, ptr %11, align 8
|
store ptr %int2ptr, ptr %11, align 8
|
||||||
%12 = load %"github.com/goplus/llgo/internal/runtime.iface", ptr %2, align 8
|
%12 = load %"github.com/goplus/llgo/internal/runtime.iface", ptr %2, align 8
|
||||||
ret %"github.com/goplus/llgo/internal/runtime.iface" %12
|
ret %"github.com/goplus/llgo/internal/runtime.iface" %12
|
||||||
}
|
}
|
||||||
@@ -322,9 +322,9 @@ _llgo_0:
|
|||||||
%3 = getelementptr inbounds i64, ptr @"github.com/goplus/llgo/internal/runtime.sizeBasicTypes", i64 %0
|
%3 = getelementptr inbounds i64, ptr @"github.com/goplus/llgo/internal/runtime.sizeBasicTypes", i64 %0
|
||||||
%4 = load i64, ptr %3, align 4
|
%4 = load i64, ptr %3, align 4
|
||||||
%5 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.Type", ptr %1, i32 0, i32 6
|
%5 = getelementptr inbounds %"github.com/goplus/llgo/internal/abi.Type", ptr %1, i32 0, i32 6
|
||||||
%castInt = trunc i64 %0 to i8
|
%truncInt = trunc i64 %0 to i8
|
||||||
store i64 %4, ptr %2, align 4
|
store i64 %4, ptr %2, align 4
|
||||||
store i8 %castInt, ptr %5, align 1
|
store i8 %truncInt, ptr %5, align 1
|
||||||
ret ptr %1
|
ret ptr %1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
24
ssa/expr.go
24
ssa/expr.go
@@ -494,19 +494,37 @@ func (b Builder) Convert(t Type, x Expr) (ret Expr) {
|
|||||||
kind := und.Kind()
|
kind := und.Kind()
|
||||||
switch {
|
switch {
|
||||||
case kind >= types.Int && kind <= types.Uintptr:
|
case kind >= types.Int && kind <= types.Uintptr:
|
||||||
ret.impl = b.impl.CreateIntCast(x.impl, t.ll, "castInt")
|
ret.impl = castInt(b.impl, x.impl, t.ll)
|
||||||
return
|
return
|
||||||
case kind == types.UnsafePointer:
|
case kind == types.UnsafePointer:
|
||||||
ret.impl = b.impl.CreatePointerCast(x.impl, t.ll, "castPtr")
|
ret.impl = castPtr(b.impl, x.impl, t.ll)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
case *types.Pointer:
|
case *types.Pointer:
|
||||||
ret.impl = b.impl.CreatePointerCast(x.impl, t.ll, "castPtr")
|
ret.impl = castPtr(b.impl, x.impl, t.ll)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
panic("todo")
|
panic("todo")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func castInt(b llvm.Builder, x llvm.Value, t llvm.Type) llvm.Value {
|
||||||
|
xt := x.Type()
|
||||||
|
if xt.TypeKind() == llvm.PointerTypeKind {
|
||||||
|
return b.CreatePtrToInt(x, t, "ptr2int")
|
||||||
|
}
|
||||||
|
if xt.IntTypeWidth() <= t.IntTypeWidth() {
|
||||||
|
return b.CreateIntCast(x, t, "castInt")
|
||||||
|
}
|
||||||
|
return b.CreateTrunc(x, t, "truncInt")
|
||||||
|
}
|
||||||
|
|
||||||
|
func castPtr(b llvm.Builder, x llvm.Value, t llvm.Type) llvm.Value {
|
||||||
|
if x.Type().TypeKind() == llvm.PointerTypeKind {
|
||||||
|
return b.CreatePointerCast(x, t, "castPtr")
|
||||||
|
}
|
||||||
|
return b.CreateIntToPtr(x, t, "int2ptr")
|
||||||
|
}
|
||||||
|
|
||||||
// MakeInterface constructs an instance of an interface type from a
|
// MakeInterface constructs an instance of an interface type from a
|
||||||
// value of a concrete type.
|
// value of a concrete type.
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -305,7 +305,7 @@ func (p Package) NewFunc(name string, sig *types.Signature) Function {
|
|||||||
if v, ok := p.fns[name]; ok {
|
if v, ok := p.fns[name]; ok {
|
||||||
return v
|
return v
|
||||||
}
|
}
|
||||||
t := p.prog.llvmSignature(sig)
|
t := p.prog.llvmSignature(sig, false)
|
||||||
fn := llvm.AddFunction(p.mod, name, t.ll)
|
fn := llvm.AddFunction(p.mod, name, t.ll)
|
||||||
ret := newFunction(fn, t, p, p.prog)
|
ret := newFunction(fn, t, p, p.prog)
|
||||||
p.fns[name] = ret
|
p.fns[name] = ret
|
||||||
|
|||||||
11
ssa/type.go
11
ssa/type.go
@@ -124,7 +124,7 @@ func (p Program) Field(typ Type, i int) Type {
|
|||||||
|
|
||||||
func (p Program) Type(typ types.Type) Type {
|
func (p Program) Type(typ types.Type) Type {
|
||||||
if sig, ok := typ.(*types.Signature); ok { // should methodToFunc
|
if sig, ok := typ.(*types.Signature); ok { // should methodToFunc
|
||||||
return p.llvmSignature(sig)
|
return p.llvmSignature(sig, true)
|
||||||
}
|
}
|
||||||
if v := p.typs.At(typ); v != nil {
|
if v := p.typs.At(typ); v != nil {
|
||||||
return v.(Type)
|
return v.(Type)
|
||||||
@@ -134,12 +134,12 @@ func (p Program) Type(typ types.Type) Type {
|
|||||||
return ret
|
return ret
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p Program) llvmSignature(sig *types.Signature) Type {
|
func (p Program) llvmSignature(sig *types.Signature, isPtr bool) Type {
|
||||||
sig = methodToFunc(sig)
|
sig = methodToFunc(sig)
|
||||||
if v := p.typs.At(sig); v != nil {
|
if v := p.typs.At(sig); v != nil {
|
||||||
return v.(Type)
|
return v.(Type)
|
||||||
}
|
}
|
||||||
ret := p.toLLVMFunc(sig)
|
ret := p.toLLVMFunc(sig, isPtr)
|
||||||
p.typs.Set(sig, ret)
|
p.typs.Set(sig, ret)
|
||||||
return ret
|
return ret
|
||||||
}
|
}
|
||||||
@@ -301,7 +301,7 @@ func (p Program) toLLVMTypes(t *types.Tuple, n int) (ret []llvm.Type) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p Program) toLLVMFunc(sig *types.Signature) Type {
|
func (p Program) toLLVMFunc(sig *types.Signature, isPtr bool) Type {
|
||||||
tParams := sig.Params()
|
tParams := sig.Params()
|
||||||
n := tParams.Len()
|
n := tParams.Len()
|
||||||
hasVArg := HasVArg(tParams, n)
|
hasVArg := HasVArg(tParams, n)
|
||||||
@@ -320,6 +320,9 @@ func (p Program) toLLVMFunc(sig *types.Signature) Type {
|
|||||||
ret = p.toLLVMTuple(out)
|
ret = p.toLLVMTuple(out)
|
||||||
}
|
}
|
||||||
ft := llvm.FunctionType(ret, params, hasVArg)
|
ft := llvm.FunctionType(ret, params, hasVArg)
|
||||||
|
if isPtr {
|
||||||
|
ft = llvm.PointerType(ft, 0)
|
||||||
|
}
|
||||||
return &aType{ft, sig, vkFunc}
|
return &aType{ft, sig, vkFunc}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user