From 43f6fc430de66f416944b784896ec763ca0909f7 Mon Sep 17 00:00:00 2001 From: visualfc Date: Wed, 25 Sep 2024 10:32:25 +0800 Subject: [PATCH] cl: PkgLinkIR/PkgLinkExtern support init if not using cgo --- cl/_testlibc/demangle/out.ll | 3 +++ cl/_testlibc/sqlite/out.ll | 3 +++ cl/_testpy/callpy/out.ll | 3 +++ cl/_testpy/gcd/out.ll | 3 +++ cl/_testpy/math/out.ll | 3 +++ cl/_testpy/matrix/out.ll | 3 +++ cl/_testpy/max/out.ll | 3 +++ cl/_testpy/pow/out.ll | 3 +++ cl/instr.go | 23 ++++++++++++++++++++++- py/llgo_autogen.lla | Bin 533 -> 533 bytes py/math/llgo_autogen.lla | Bin 558 -> 569 bytes 11 files changed, 46 insertions(+), 1 deletion(-) diff --git a/cl/_testlibc/demangle/out.ll b/cl/_testlibc/demangle/out.ll index a3886f6a9..e11b1ae3a 100644 --- a/cl/_testlibc/demangle/out.ll +++ b/cl/_testlibc/demangle/out.ll @@ -17,6 +17,7 @@ _llgo_0: _llgo_1: ; preds = %_llgo_0 store i1 true, ptr @"main.init$guard", align 1 + call void @"github.com/goplus/llgo/cpp/llvm.init"() br label %_llgo_2 _llgo_2: ; preds = %_llgo_1, %_llgo_0 @@ -58,6 +59,8 @@ _llgo_3: ; preds = %_llgo_0 br label %_llgo_2 } +declare void @"github.com/goplus/llgo/cpp/llvm.init"() + declare void @"github.com/goplus/llgo/internal/runtime.init"() declare ptr @_ZN4llvm15itaniumDemangleENSt3__117basic_string_viewIcNS0_11char_traitsIcEEEEb(%"github.com/goplus/llgo/internal/runtime.String", i1) diff --git a/cl/_testlibc/sqlite/out.ll b/cl/_testlibc/sqlite/out.ll index 2d19d3a06..cb2113041 100644 --- a/cl/_testlibc/sqlite/out.ll +++ b/cl/_testlibc/sqlite/out.ll @@ -29,6 +29,7 @@ _llgo_0: _llgo_1: ; preds = %_llgo_0 store i1 true, ptr @"main.init$guard", align 1 + call void @"github.com/goplus/llgo/c/sqlite.init"() br label %_llgo_2 _llgo_2: ; preds = %_llgo_1, %_llgo_0 @@ -55,6 +56,8 @@ declare i32 @printf(ptr, ...) declare void @exit(i32) +declare void @"github.com/goplus/llgo/c/sqlite.init"() + declare void @"github.com/goplus/llgo/internal/runtime.init"() declare { ptr, i32 } @"github.com/goplus/llgo/c/sqlite.OpenV2"(ptr, i32, ptr) diff --git a/cl/_testpy/callpy/out.ll b/cl/_testpy/callpy/out.ll index 25ccfebb0..3780de0b2 100644 --- a/cl/_testpy/callpy/out.ll +++ b/cl/_testpy/callpy/out.ll @@ -23,6 +23,7 @@ _llgo_0: _llgo_1: ; preds = %_llgo_0 store i1 true, ptr @"main.init$guard", align 1 + call void @"github.com/goplus/llgo/py.init"() call void @"github.com/goplus/llgo/py/math.init"() call void @"github.com/goplus/llgo/py/os.init"() call void @"github.com/goplus/llgo/py/std.init"() @@ -58,6 +59,8 @@ _llgo_0: ret i32 0 } +declare void @"github.com/goplus/llgo/py.init"() + declare void @"github.com/goplus/llgo/py/math.init"() declare void @"github.com/goplus/llgo/py/os.init"() diff --git a/cl/_testpy/gcd/out.ll b/cl/_testpy/gcd/out.ll index fbc248870..d15eaa48b 100644 --- a/cl/_testpy/gcd/out.ll +++ b/cl/_testpy/gcd/out.ll @@ -16,6 +16,7 @@ _llgo_0: _llgo_1: ; preds = %_llgo_0 store i1 true, ptr @"main.init$guard", align 1 + call void @"github.com/goplus/llgo/py.init"() call void @"github.com/goplus/llgo/py/math.init"() %1 = load ptr, ptr @__llgo_py.math, align 8 call void (ptr, ...) @llgoLoadPyModSyms(ptr %1, ptr @1, ptr @__llgo_py.math.gcd, ptr null) @@ -42,6 +43,8 @@ _llgo_0: ret i32 0 } +declare void @"github.com/goplus/llgo/py.init"() + declare void @"github.com/goplus/llgo/py/math.init"() declare void @"github.com/goplus/llgo/internal/runtime.init"() diff --git a/cl/_testpy/math/out.ll b/cl/_testpy/math/out.ll index 746b550c2..9e99e1835 100644 --- a/cl/_testpy/math/out.ll +++ b/cl/_testpy/math/out.ll @@ -12,6 +12,7 @@ _llgo_0: _llgo_1: ; preds = %_llgo_0 store i1 true, ptr @"math.init$guard", align 1 + call void @"github.com/goplus/llgo/py.init"() %1 = load ptr, ptr @__llgo_py.math, align 8 %2 = icmp ne ptr %1, null br i1 %2, label %_llgo_2, label %_llgo_3 @@ -25,4 +26,6 @@ _llgo_3: ; preds = %_llgo_1 br label %_llgo_2 } +declare void @"github.com/goplus/llgo/py.init"() + declare ptr @PyImport_ImportModule(ptr) diff --git a/cl/_testpy/matrix/out.ll b/cl/_testpy/matrix/out.ll index 20548694e..dfef59a23 100644 --- a/cl/_testpy/matrix/out.ll +++ b/cl/_testpy/matrix/out.ll @@ -18,6 +18,7 @@ _llgo_0: _llgo_1: ; preds = %_llgo_0 store i1 true, ptr @"main.init$guard", align 1 + call void @"github.com/goplus/llgo/py.init"() call void @"github.com/goplus/llgo/py/numpy.init"() %1 = load ptr, ptr @__llgo_py.numpy, align 8 call void (ptr, ...) @llgoLoadPyModSyms(ptr %1, ptr @3, ptr @__llgo_py.numpy.add, ptr null) @@ -98,6 +99,8 @@ _llgo_0: ret i32 0 } +declare void @"github.com/goplus/llgo/py.init"() + declare void @"github.com/goplus/llgo/py/numpy.init"() declare void @"github.com/goplus/llgo/internal/runtime.init"() diff --git a/cl/_testpy/max/out.ll b/cl/_testpy/max/out.ll index 3eae5bed2..1ff28f74e 100644 --- a/cl/_testpy/max/out.ll +++ b/cl/_testpy/max/out.ll @@ -19,6 +19,7 @@ _llgo_0: _llgo_1: ; preds = %_llgo_0 store i1 true, ptr @"main.init$guard", align 1 + call void @"github.com/goplus/llgo/py.init"() call void @"github.com/goplus/llgo/py/std.init"() %1 = load ptr, ptr @__llgo_py.builtins, align 8 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: ret i32 0 } +declare void @"github.com/goplus/llgo/py.init"() + declare void @"github.com/goplus/llgo/py/std.init"() declare void @"github.com/goplus/llgo/internal/runtime.init"() diff --git a/cl/_testpy/pow/out.ll b/cl/_testpy/pow/out.ll index 5807c6f31..1b1d61d70 100644 --- a/cl/_testpy/pow/out.ll +++ b/cl/_testpy/pow/out.ll @@ -16,6 +16,7 @@ _llgo_0: _llgo_1: ; preds = %_llgo_0 store i1 true, ptr @"main.init$guard", align 1 + call void @"github.com/goplus/llgo/py.init"() call void @"github.com/goplus/llgo/py/math.init"() %1 = load ptr, ptr @__llgo_py.math, align 8 call void (ptr, ...) @llgoLoadPyModSyms(ptr %1, ptr @1, ptr @__llgo_py.math.pow, ptr null) @@ -41,6 +42,8 @@ _llgo_0: ret i32 0 } +declare void @"github.com/goplus/llgo/py.init"() + declare void @"github.com/goplus/llgo/py/math.init"() declare void @"github.com/goplus/llgo/internal/runtime.init"() diff --git a/cl/instr.go b/cl/instr.go index 67d0e2c69..87dc0dcce 100644 --- a/cl/instr.go +++ b/cl/instr.go @@ -300,10 +300,31 @@ func (p *context) funcKind(vfn ssa.Value) int { return fnNormal } +func usingCgo(pkg *types.Package) bool { + var n int + for _, im := range pkg.Imports() { + switch im.Path() { + case "syscall", "runtime/cgo": + n++ + if n == 2 { + return true + } + } + } + return false +} + func (p *context) pkgNoInit(pkg *types.Package) bool { p.ensureLoaded(pkg) if i, ok := p.loaded[pkg]; ok { - return i.kind >= PkgNoInit + switch i.kind { + case PkgNoInit, PkgDeclOnly: + return true + case PkgLinkIR, PkgLinkExtern: + if usingCgo(pkg) { + return true + } + } } return false } diff --git a/py/llgo_autogen.lla b/py/llgo_autogen.lla index 1ac2b598a790aeeb8e5986ffcecd01fa33aaaf55..58e62158f3fc249236bb5c23a298d42fbf14fb5f 100644 GIT binary patch delta 51 zcmbQrGL?ldz?+#xgn@y9gJDOQW#mLY6?U8I&uO;RpEp|8GO~cgChuZ2Vg?FMe$S`| E0AVZ;1^@s6 delta 51 zcmbQrGL?ldz?+#xgn@y9gJIK@ClM3*RM_*Y+tLcF+csL(GO~cgChuZ2Vg?FMe$S`| E0D(FY9RL6T diff --git a/py/math/llgo_autogen.lla b/py/math/llgo_autogen.lla index c40da50081c6a028843bc5ccc00d880ffc60586a..a400b2d6edfb038922d7a74ab7cab0ddd9acec89 100644 GIT binary patch delta 514 zcmZ3-vXiAgz?+#xgn@y9gCRQ1GIEN3#EMo%28JdU1_pix8HSvk^!)h5(vtl2)I7bM zoX`+X2Ik(X&uRTYTw1}+z{v6ys2Xg*(#Z$2n+-&cz5l5#XOzhul$#n5#b*2F(&2>f zxgJ?T(%*bkj%_mfwqO6^s%-wPi{nh5)V}}yslGamRlh6rg!%aoEQ@_+)NY--OpD(* zG$FLDV>|V>9xIRw^4KY4%b|xTKvuVb` zzNC}P3p9*4jW_uTse5-lzH%~0lk4ZolvB~Zi6$qwHeS^^VYMl>Rg68$BIHtP8fU7H z^Qx506(;o`zH!7Wh{;c=TKBeEq;ju%VvV{=d$SNvo>hnWyaVQ$lia+S9_;2=p|RPW z>s7~p#!K#uH?rK1_A@!`ddgAv*l2&m?JLXsRqy;+qoaDxOZw{-)lF?n17}(LFV?P$ z|29R5FDQr6Dr@t!S*5m-^Uv>>-?Vn#?W~EspPVu$o2-B4)&F{J#wFiPYQp@Nwj4PZ xI8nY_Flb5D5495GHzL=W{Z8lycr!A|F=L6+$#)nvL6J9^gGqty95C7#7y#ZW*FFFM literal 558 zcmWIWW@Zs#U|`^2IOcmUqRwYKYZW5{g8~Z!13!ZdLrzY5etcqSNq%~2o?cE)Xb2|* z^Wz2CX-|Q;w1S&~k>x8;HQ0cqlkaCAG7va^|8uxZs%vY~>QseO3;3%)CT{qiJLSd^ zsWM-$S*KFo)W=_vFXNic_xqCE&fV|7+f85hz;mP2&tHOa2~)T?uQtEzBbvC*Yt3o_ z!|=pP4(_Zn<)D>O={9${o=g(EGp(Y2dPR$hc+fH@uHxy}LyXUxoe9jz;)b>7o_{!9qAtIk*PxgE_U3yU=`^dgD$4MuaO^tf9@?n7Y^O;Mh81l}X zGMKHIr%ec%(`SuG#ePLTQLWw0YlAm66Z|B_YjG?oM9VgZ3^?p#vc z{~3)U7;j{_AMIyy*!7U3Zncqp_uAL*k~zcewY@txpNe|B%Oz}skyr8Z%#ySDpWmIY z;@akY{Z+~Q!8s}Y9IbKW;KZyClY5>m+bO)) zqo&*Au==(_w~c#`ocx>^JH>1EmfEfRU+l2#QagUuB;`@JiSEYWkSC{O-|%E!e_Xzk z^Cw$?HzSiAGp