Skip to content

Commit 22f3594

Browse files
committed
cl: PkgLinkIR/PkgLinkExtern support init if not using cgo
1 parent f20d74c commit 22f3594

File tree

9 files changed

+46
-1
lines changed

9 files changed

+46
-1
lines changed

cl/_testlibc/demangle/out.ll

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ _llgo_0:
1717

1818
_llgo_1: ; preds = %_llgo_0
1919
store i1 true, ptr @"main.init$guard", align 1
20+
call void @"github.com/goplus/llgo/cpp/llvm.init"()
2021
br label %_llgo_2
2122

2223
_llgo_2: ; preds = %_llgo_1, %_llgo_0
@@ -46,6 +47,8 @@ _llgo_3: ; preds = %_llgo_0
4647
br label %_llgo_2
4748
}
4849

50+
declare void @"github.com/goplus/llgo/cpp/llvm.init"()
51+
4952
declare void @"github.com/goplus/llgo/internal/runtime.init"()
5053

5154
declare ptr @_ZN4llvm15itaniumDemangleENSt3__117basic_string_viewIcNS0_11char_traitsIcEEEEb(%"github.com/goplus/llgo/internal/runtime.String", i1)

cl/_testlibc/sqlite/out.ll

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ _llgo_0:
2929

3030
_llgo_1: ; preds = %_llgo_0
3131
store i1 true, ptr @"main.init$guard", align 1
32+
call void @"github.com/goplus/llgo/c/sqlite.init"()
3233
br label %_llgo_2
3334

3435
_llgo_2: ; preds = %_llgo_1, %_llgo_0
@@ -55,6 +56,8 @@ declare i32 @printf(ptr, ...)
5556

5657
declare void @exit(i32)
5758

59+
declare void @"github.com/goplus/llgo/c/sqlite.init"()
60+
5861
declare void @"github.com/goplus/llgo/internal/runtime.init"()
5962

6063
declare { ptr, i32 } @"github.com/goplus/llgo/c/sqlite.OpenV2"(ptr, i32, ptr)

cl/_testpy/callpy/out.ll

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ _llgo_0:
2323

2424
_llgo_1: ; preds = %_llgo_0
2525
store i1 true, ptr @"main.init$guard", align 1
26+
call void @"github.com/goplus/llgo/py.init"()
2627
call void @"github.com/goplus/llgo/py/math.init"()
2728
call void @"github.com/goplus/llgo/py/os.init"()
2829
call void @"github.com/goplus/llgo/py/std.init"()
@@ -57,6 +58,8 @@ _llgo_0:
5758
ret i32 0
5859
}
5960

61+
declare void @"github.com/goplus/llgo/py.init"()
62+
6063
declare void @"github.com/goplus/llgo/py/math.init"()
6164

6265
declare void @"github.com/goplus/llgo/py/os.init"()

cl/_testpy/gcd/out.ll

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ _llgo_0:
1616

1717
_llgo_1: ; preds = %_llgo_0
1818
store i1 true, ptr @"main.init$guard", align 1
19+
call void @"github.com/goplus/llgo/py.init"()
1920
call void @"github.com/goplus/llgo/py/math.init"()
2021
%1 = load ptr, ptr @__llgo_py.math, align 8
2122
call void (ptr, ...) @llgoLoadPyModSyms(ptr %1, ptr @1, ptr @__llgo_py.math.gcd, ptr null)
@@ -41,6 +42,8 @@ _llgo_0:
4142
ret i32 0
4243
}
4344

45+
declare void @"github.com/goplus/llgo/py.init"()
46+
4447
declare void @"github.com/goplus/llgo/py/math.init"()
4548

4649
declare void @"github.com/goplus/llgo/internal/runtime.init"()

cl/_testpy/math/out.ll

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ _llgo_0:
1212

1313
_llgo_1: ; preds = %_llgo_0
1414
store i1 true, ptr @"github.com/goplus/llgo/cl/_testpy/math.init$guard", align 1
15+
call void @"github.com/goplus/llgo/py.init"()
1516
%1 = load ptr, ptr @__llgo_py.math, align 8
1617
%2 = icmp ne ptr %1, null
1718
br i1 %2, label %_llgo_2, label %_llgo_3
@@ -25,4 +26,6 @@ _llgo_3: ; preds = %_llgo_1
2526
br label %_llgo_2
2627
}
2728

29+
declare void @"github.com/goplus/llgo/py.init"()
30+
2831
declare ptr @PyImport_ImportModule(ptr)

cl/_testpy/matrix/out.ll

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ _llgo_0:
1818

1919
_llgo_1: ; preds = %_llgo_0
2020
store i1 true, ptr @"main.init$guard", align 1
21+
call void @"github.com/goplus/llgo/py.init"()
2122
call void @"github.com/goplus/llgo/py/numpy.init"()
2223
%1 = load ptr, ptr @__llgo_py.numpy, align 8
2324
call void (ptr, ...) @llgoLoadPyModSyms(ptr %1, ptr @3, ptr @__llgo_py.numpy.add, ptr null)
@@ -97,6 +98,8 @@ _llgo_0:
9798
ret i32 0
9899
}
99100

101+
declare void @"github.com/goplus/llgo/py.init"()
102+
100103
declare void @"github.com/goplus/llgo/py/numpy.init"()
101104

102105
declare void @"github.com/goplus/llgo/internal/runtime.init"()

cl/_testpy/max/out.ll

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ _llgo_0:
1919

2020
_llgo_1: ; preds = %_llgo_0
2121
store i1 true, ptr @"main.init$guard", align 1
22+
call void @"github.com/goplus/llgo/py.init"()
2223
call void @"github.com/goplus/llgo/py/std.init"()
2324
%1 = load ptr, ptr @__llgo_py.builtins, align 8
2425
call void (ptr, ...) @llgoLoadPyModSyms(ptr %1, ptr @0, ptr @__llgo_py.builtins.iter, ptr @1, ptr @__llgo_py.builtins.max, ptr @2, ptr @__llgo_py.builtins.print, ptr null)
@@ -73,6 +74,8 @@ _llgo_0:
7374
ret i32 0
7475
}
7576

77+
declare void @"github.com/goplus/llgo/py.init"()
78+
7679
declare void @"github.com/goplus/llgo/py/std.init"()
7780

7881
declare void @"github.com/goplus/llgo/internal/runtime.init"()

cl/_testpy/pow/out.ll

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ _llgo_0:
1616

1717
_llgo_1: ; preds = %_llgo_0
1818
store i1 true, ptr @"main.init$guard", align 1
19+
call void @"github.com/goplus/llgo/py.init"()
1920
call void @"github.com/goplus/llgo/py/math.init"()
2021
%1 = load ptr, ptr @__llgo_py.math, align 8
2122
call void (ptr, ...) @llgoLoadPyModSyms(ptr %1, ptr @1, ptr @__llgo_py.math.pow, ptr null)
@@ -40,6 +41,8 @@ _llgo_0:
4041
ret i32 0
4142
}
4243

44+
declare void @"github.com/goplus/llgo/py.init"()
45+
4346
declare void @"github.com/goplus/llgo/py/math.init"()
4447

4548
declare void @"github.com/goplus/llgo/internal/runtime.init"()

cl/instr.go

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -384,10 +384,31 @@ func (p *context) funcKind(vfn ssa.Value) int {
384384
return fnNormal
385385
}
386386

387+
func usingCgo(pkg *types.Package) bool {
388+
var n int
389+
for _, im := range pkg.Imports() {
390+
switch im.Path() {
391+
case "syscall", "runtime/cgo":
392+
n++
393+
if n == 2 {
394+
return true
395+
}
396+
}
397+
}
398+
return false
399+
}
400+
387401
func (p *context) pkgNoInit(pkg *types.Package) bool {
388402
p.ensureLoaded(pkg)
389403
if i, ok := p.loaded[pkg]; ok {
390-
return i.kind >= PkgNoInit
404+
switch i.kind {
405+
case PkgNoInit, PkgDeclOnly:
406+
return true
407+
case PkgLinkIR, PkgLinkExtern:
408+
if usingCgo(pkg) {
409+
return true
410+
}
411+
}
391412
}
392413
return false
393414
}

0 commit comments

Comments
 (0)