ssa: temp disable Finalize; cl: decls sort by name

This commit is contained in:
xushiwei
2024-04-26 03:25:11 +08:00
parent a3d6a94600
commit 91d1d71f6d
16 changed files with 92 additions and 80 deletions

View File

@@ -1,9 +1,9 @@
; ModuleID = 'main'
source_filename = "main"
@"main.init$guard" = global ptr null
@main._Cgo_always_false = global ptr null
@main.format = global ptr null
@"main.init$guard" = global ptr null
define void @main.init() {
_llgo_0:
@@ -28,10 +28,6 @@ _llgo_2: ; preds = %_llgo_1, %_llgo_0
ret void
}
declare void @printf(ptr, ...)
declare i32 @strlen(ptr)
define void @main() {
_llgo_0:
call void @main.init()
@@ -39,3 +35,7 @@ _llgo_0:
call void (ptr, ...) @printf(ptr @main.format, i32 %0)
ret void
}
declare void @printf(ptr, ...)
declare i32 @strlen(ptr)

View File

@@ -3,6 +3,18 @@ source_filename = "apkg"
@"apkg.init$guard" = global ptr null
define double @apkg.Max(double %0, double %1) {
_llgo_0:
%2 = fcmp ogt double %0, %1
br i1 %2, label %_llgo_1, label %_llgo_2
_llgo_1: ; preds = %_llgo_0
ret double %0
_llgo_2: ; preds = %_llgo_0
ret double %1
}
define void @apkg.init() {
_llgo_0:
%0 = load i1, ptr @"apkg.init$guard", align 1
@@ -15,15 +27,3 @@ _llgo_1: ; preds = %_llgo_0
_llgo_2: ; preds = %_llgo_1, %_llgo_0
ret void
}
define double @apkg.Max(double %0, double %1) {
_llgo_0:
%2 = fcmp ogt double %0, %1
br i1 %2, label %_llgo_1, label %_llgo_2
_llgo_1: ; preds = %_llgo_0
ret double %0
_llgo_2: ; preds = %_llgo_0
ret double %1
}

View File

@@ -16,6 +16,13 @@ _llgo_2: ; preds = %_llgo_1, %_llgo_0
ret void
}
define void @main() {
_llgo_0:
call void @main.init()
%0 = call i64 @main.max(i64 1, i64 2)
ret void
}
define i64 @main.max(i64 %0, i64 %1) {
_llgo_0:
%2 = icmp sgt i64 %0, %1
@@ -27,10 +34,3 @@ _llgo_1: ; preds = %_llgo_0
_llgo_2: ; preds = %_llgo_0
ret i64 %1
}
define void @main() {
_llgo_0:
call void @main.init()
%0 = call i64 @main.max(i64 1, i64 2)
ret void
}

View File

@@ -1,8 +1,8 @@
; ModuleID = 'main'
source_filename = "main"
@"main.init$guard" = global ptr null
@main.hello = global ptr null
@"main.init$guard" = global ptr null
define void @main.init() {
_llgo_0:

View File

@@ -1,8 +1,21 @@
; ModuleID = 'main'
source_filename = "main"
@"main.init$guard" = global ptr null
@main.format = global ptr null
@"main.init$guard" = global ptr null
define i64 @"(T).Add"(i64 %0, i64 %1) {
_llgo_0:
%2 = add i64 %0, %1
ret i64 %2
}
define i64 @"(*T).Add"(ptr %0, i64 %1) {
_llgo_0:
%2 = load i64, ptr %0, align 4
%3 = call i64 @"(T).Add"(i64 %2, i64 %1)
ret i64 %3
}
define void @main.init() {
_llgo_0:
@@ -27,25 +40,12 @@ _llgo_2: ; preds = %_llgo_1, %_llgo_0
ret void
}
define i64 @"(main.T).Add"(i64 %0, i64 %1) {
_llgo_0:
%2 = add i64 %0, %1
ret i64 %2
}
define i64 @"(*main.T).Add"(ptr %0, i64 %1) {
_llgo_0:
%2 = load i64, ptr %0, align 4
%3 = call i64 @"(main.T).Add"(i64 %2, i64 %1)
ret i64 %3
}
declare void @printf(ptr, ...)
define void @main() {
_llgo_0:
call void @main.init()
%0 = call i64 @"(main.T).Add"(i64 1, i64 2)
%0 = call i64 @"(T).Add"(i64 1, i64 2)
call void (ptr, ...) @printf(ptr @main.format, i64 %0)
ret void
}
declare void @printf(ptr, ...)

View File

@@ -1,8 +1,8 @@
; ModuleID = 'main'
source_filename = "main"
@"main.init$guard" = global ptr null
@main.hello = global ptr null
@"main.init$guard" = global ptr null
define void @main.init() {
_llgo_0:
@@ -24,11 +24,11 @@ _llgo_2: ; preds = %_llgo_1, %_llgo_0
ret void
}
declare void @printf(ptr, ...)
define void @main() {
_llgo_0:
call void @main.init()
call void (ptr, ...) @printf(ptr @main.hello)
ret void
}
declare void @printf(ptr, ...)

View File

@@ -1,8 +1,8 @@
; ModuleID = 'main'
source_filename = "main"
@"main.init$guard" = global ptr null
@main.format = global ptr null
@"main.init$guard" = global ptr null
define void @main.init() {
_llgo_0:
@@ -27,11 +27,11 @@ _llgo_2: ; preds = %_llgo_1, %_llgo_0
ret void
}
declare void @printf(ptr, ...)
define void @main() {
_llgo_0:
call void @main.init()
call void (ptr, ...) @printf(ptr @main.format, i64 100)
ret void
}
declare void @printf(ptr, ...)

View File

@@ -1,8 +1,14 @@
; ModuleID = 'main'
source_filename = "main"
@"main.init$guard" = global ptr null
@main.format = global ptr null
@"main.init$guard" = global ptr null
define void @"(*T).Print"(ptr %0, i64 %1) {
_llgo_0:
call void (ptr, ...) @printf(ptr %0, i64 %1)
ret void
}
define void @main.init() {
_llgo_0:
@@ -27,17 +33,11 @@ _llgo_2: ; preds = %_llgo_1, %_llgo_0
ret void
}
declare void @printf(ptr, ...)
define void @"(*main.T).Print"(ptr %0, i64 %1) {
_llgo_0:
call void (ptr, ...) @printf(ptr %0, i64 %1)
ret void
}
define void @main() {
_llgo_0:
call void @main.init()
call void @"(*main.T).Print"(ptr @main.format, i64 100)
call void @"(*T).Print"(ptr @main.format, i64 100)
ret void
}
declare void @printf(ptr, ...)

View File

@@ -1,8 +1,8 @@
; ModuleID = 'main'
source_filename = "main"
@"main.init$guard" = global ptr null
@main.a = global ptr null
@"main.init$guard" = global ptr null
define void @main.init() {
_llgo_0:

View File

@@ -428,17 +428,12 @@ func NewPackage(prog llssa.Program, pkg *ssa.Package, files []*ast.File) (ret ll
val ssa.Member
}
// Sort by position, so that the order of the functions in the IR matches
// the order of functions in the source file. This is useful for testing,
// for example.
var members []*namedMember
members := make([]*namedMember, 0, len(pkg.Members))
for name, v := range pkg.Members {
members = append(members, &namedMember{name, v})
}
sort.Slice(members, func(i, j int) bool {
iPos := members[i].val.Pos()
jPos := members[j].val.Pos()
return iPos < jPos
return members[i].name < members[j].name
})
pkgProg := pkg.Prog

View File

@@ -28,7 +28,7 @@ func testCompile(t *testing.T, src, expected string) {
}
func TestFromTestcgo(t *testing.T) {
cltest.FromDir(t, "strlen", "./_testcgo", true)
cltest.FromDir(t, "", "./_testcgo", true)
}
func TestFromTestdata(t *testing.T) {
@@ -42,8 +42,8 @@ var a int
`, `; ModuleID = 'foo'
source_filename = "foo"
@"foo.init$guard" = global ptr null
@foo.a = global ptr null
@"foo.init$guard" = global ptr null
define void @foo.init() {
_llgo_0:
@@ -71,6 +71,11 @@ source_filename = "foo"
@"foo.init$guard" = global ptr null
define i64 @foo.fn(i64 %0, double %1) {
_llgo_0:
ret i64 1
}
define void @foo.init() {
_llgo_0:
%0 = load i1, ptr @"foo.init$guard", align 1
@@ -83,10 +88,5 @@ _llgo_1: ; preds = %_llgo_0
_llgo_2: ; preds = %_llgo_1, %_llgo_0
ret void
}
define i64 @foo.fn(i64 %0, double %1) {
_llgo_0:
ret i64 1
}
`)
}

View File

@@ -117,12 +117,18 @@ func fullName(pkg *types.Package, name string) string {
}
// func: pkg.name
// method: (pkg.T).name
// method: (pkg.T).name, (*pkg.T).name
func funcName(pkg *types.Package, fn *ssa.Function) string {
sig := fn.Signature
name := fn.Name()
if recv := sig.Recv(); recv != nil {
return "(" + recv.Type().String() + ")." + name
var tName string
t := recv.Type()
if tp, ok := t.(*types.Pointer); ok {
t, tName = tp.Elem(), "*"
}
tName += t.(*types.Named).Obj().Name()
return "(" + tName + ")." + name
}
ret := fullName(pkg, name)
if ret == "main.main" {