Skip to content

Commit b7215e7

Browse files
committed
cl: PkgLinkIR/PkgLinkExtern support init if not using cgo
1 parent fec7688 commit b7215e7

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
@@ -58,6 +59,8 @@ _llgo_3: ; preds = %_llgo_0
5859
br label %_llgo_2
5960
}
6061

62+
declare void @"github.com/goplus/llgo/cpp/llvm.init"()
63+
6164
declare void @"github.com/goplus/llgo/internal/runtime.init"()
6265

6366
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"()
@@ -58,6 +59,8 @@ _llgo_0:
5859
ret i32 0
5960
}
6061

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

6366
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)
@@ -42,6 +43,8 @@ _llgo_0:
4243
ret i32 0
4344
}
4445

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

4750
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 @"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)
@@ -98,6 +99,8 @@ _llgo_0:
9899
ret i32 0
99100
}
100101

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

103106
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)
@@ -74,6 +75,8 @@ _llgo_0:
7475
ret i32 0
7576
}
7677

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

7982
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)
@@ -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/instr.go

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

303+
func usingCgo(pkg *types.Package) bool {
304+
var n int
305+
for _, im := range pkg.Imports() {
306+
switch im.Path() {
307+
case "syscall", "runtime/cgo":
308+
n++
309+
if n == 2 {
310+
return true
311+
}
312+
}
313+
}
314+
return false
315+
}
316+
303317
func (p *context) pkgNoInit(pkg *types.Package) bool {
304318
p.ensureLoaded(pkg)
305319
if i, ok := p.loaded[pkg]; ok {
306-
return i.kind >= PkgNoInit
320+
switch i.kind {
321+
case PkgNoInit, PkgDeclOnly:
322+
return true
323+
case PkgLinkIR, PkgLinkExtern:
324+
if usingCgo(pkg) {
325+
return true
326+
}
327+
}
307328
}
308329
return false
309330
}

0 commit comments

Comments
 (0)