cl: support go:linkname

This commit is contained in:
xushiwei
2024-04-22 15:09:08 +08:00
parent 2142e14b6d
commit 5343a55395
11 changed files with 114 additions and 24 deletions

8
cl/_testdata/apkg/in.go Normal file
View File

@@ -0,0 +1,8 @@
package apkg
func Max(a, b float64) float64 {
if a > b {
return a
}
return b
}

29
cl/_testdata/apkg/out.ll Normal file
View File

@@ -0,0 +1,29 @@
; ModuleID = 'apkg'
source_filename = "apkg"
@"init$guard" = global ptr null
define void @apkg.init() {
_llgo_0:
%0 = load i1, ptr @"init$guard", align 1
br i1 %0, label %_llgo_2, label %_llgo_1
_llgo_1: ; preds = %_llgo_0
store i1 true, ptr @"init$guard", align 1
br label %_llgo_2
_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

@@ -3,7 +3,7 @@ source_filename = "main"
@"init$guard" = global ptr null
define void @init() {
define void @main.init() {
_llgo_0:
%0 = load i1, ptr @"init$guard", align 1
br i1 %0, label %_llgo_2, label %_llgo_1
@@ -16,7 +16,7 @@ _llgo_2: ; preds = %_llgo_1, %_llgo_0
ret void
}
define i64 @max(i64 %0, i64 %1) {
define i64 @main.max(i64 %0, i64 %1) {
_llgo_0:
%2 = icmp sgt i64 %0, %1
br i1 %2, label %_llgo_1, label %_llgo_2
@@ -30,7 +30,7 @@ _llgo_2: ; preds = %_llgo_0
define void @main() {
_llgo_0:
call void @init()
%0 = call i64 @max(i64 1, i64 2)
call void @main.init()
%0 = call i64 @main.max(i64 1, i64 2)
ret void
}

View File

@@ -2,7 +2,7 @@ package main
import _ "unsafe"
//go:linkname printf _printf
//go:linkname printf printf
func printf(format *int8, __llgo_va_list ...any)
var hello = [...]int8{'H', 'e', 'l', 'l', 'o', '\n', 0}

View File

@@ -4,7 +4,7 @@ source_filename = "main"
@"init$guard" = global ptr null
@hello = global ptr null
define void @init() {
define void @main.init() {
_llgo_0:
%0 = load i1, ptr @"init$guard", align 1
br i1 %0, label %_llgo_2, label %_llgo_1
@@ -28,7 +28,7 @@ declare void @printf(ptr, ...)
define void @main() {
_llgo_0:
call void @init()
call void @main.init()
call void (ptr, ...) @printf(ptr @hello)
ret void
}

View File

@@ -4,7 +4,7 @@ source_filename = "main"
@"init$guard" = global ptr null
@a = global ptr null
define void @init() {
define void @main.init() {
_llgo_0:
%0 = load i1, ptr @"init$guard", align 1
br i1 %0, label %_llgo_2, label %_llgo_1
@@ -20,7 +20,7 @@ _llgo_2: ; preds = %_llgo_1, %_llgo_0
define void @main() {
_llgo_0:
call void @init()
call void @main.init()
%0 = load i64, ptr @a, align 4
%1 = add i64 %0, 1
store i64 %1, ptr @a, align 4