From 8a0189b0794293d3e32b9fe50cf81b06d45ddffe Mon Sep 17 00:00:00 2001 From: xushiwei Date: Sun, 12 May 2024 11:51:46 +0800 Subject: [PATCH 1/2] TestFromTestpymath --- cl/compile_test.go | 4 ++++ py/math/llgo_autogen.lla | Bin 563 -> 557 bytes py/os/llgo_autogen.lla | Bin 560 -> 554 bytes 3 files changed, 4 insertions(+) diff --git a/cl/compile_test.go b/cl/compile_test.go index 14ad7339..9430b561 100644 --- a/cl/compile_test.go +++ b/cl/compile_test.go @@ -48,6 +48,10 @@ func TestSqlite(t *testing.T) { cltest.Pkg(t, "github.com/goplus/llgo/x/sqlite", "../x/sqlite/sqlite.ll") } +func TestFromTestpymath(t *testing.T) { + cltest.Pkg(t, ssa.PkgPython+"/math", "../py/math/llgo_autogen.ll") +} + func TestRuntime(t *testing.T) { cltest.Pkg(t, ssa.PkgRuntime, "../internal/runtime/llgo_autogen.ll") } diff --git a/py/math/llgo_autogen.lla b/py/math/llgo_autogen.lla index 1daa2e16ed71aae6a33a4adb82f10a7b636a6f76..56d53f34ef4070230e22a9445888ebbbf7782100 100644 GIT binary patch delta 502 zcmdnYvX-Sjz?+#xgn@y9gJEXOnuufXi;h(?GBDV&Ffi~l$S~yOr02&cmX_qFr{?M9 zjW-Xl*fcnzD9h%7)N6hg>%{Kjg3rkT#gB*l@vJfGhaH z;}xFY=D)3XXN<^HfA~d7pyDV?%i7aVGTsE0%Ny_bG1JQZ)u#}v;5+; z*y*-1-$mwlsh3vt)PB7Z?jK{Sp32&{cRjD{u4fM4Mf%EXZO+A2aZS$FNVzyK>&xVx zv}HSm_j;D~dLC9UPHu9oE*J0Lof@f``{~=&e+LeyY0AF!U#2*D?$VbXvWuMN|4R~X mwC>&i*6js%fHxzP95a?^ocxec6BJ>Sd6^X04gsTzfdK%?XxO0u delta 508 zcmZ3>vYDkmz?+#xgn@y9gF#~d>WEh|`x5FI85k^C7#R2&WEgUC((~gJOH1<8Q}gt4 zazaBm8JHcW+NU`JacKoN10%~Au}^Kq%)>{|GiervC0=RvYH6E# zwXNDeTV}srb^fIwhpEk1ej0AOY8-ESG;5-$szP=AZRe7&jdCfPCFOVL9@lMsX)5yQ zgNNxKuVV$#_dBnt>^rvPnebzq#hZ5SK7IV}DvhlhJ&jHNzgzH6gtuQkcyj0eC7nmk t1y1Cz-)QW~FJ*t5_oRA&HzSiAGnUAle49}d6m65)nH1Pg03(cn0RVoC*-QWc diff --git a/py/os/llgo_autogen.lla b/py/os/llgo_autogen.lla index b018d58d72fbda97648a80784eb46a63b2fced9d..e37b4105076cc8dc45e5ec49cc4aa74d58dee5af 100644 GIT binary patch delta 499 zcmdnMvWlfXz?+#xgn@y9gJF5hnuw~!4wuUq85p!!7#R2&WEgUC((~gJOH1<8Q}gt4 zazaBm8JIII9n!LaxU_9=|W;BrQ9= zccv~3Ss!J{ z$oh)cb;TOSs|u5@MjnjN%FOR-lajNT8h`Y7T6%0yd6eYN#bFMM|LE8(pCg?Rb#?YW91#oZ>(N&Zo{@)9PcxImDjzr znZw62$4$Rv&mP6{cg5*?;hQ!w9lw*_#uv5w7<1$0PXEU_3I@@;+Z@DXJKT(y?cESO1PZ{x;CcGH0pkSz0&5D)NXWRhdX5{HxTF=~QhYcdy;0^5FIJTWi;0C$PihX4Qo delta 505 zcmZ3*vVo;Oz?+#xgn@y9gF$xx>WKY{Gtbm8GBBvJFfi~l$S~yOr02&cmX_qFr{?M9 zSQj`l#kyU}x7&xi!( zd4+~g4BFXwsy1bn;7Xs|nI7groW9(RtoPzs{b1juUw1Rq>ePqI1)X!n{JZdL()pX~wB)f%{Cx`q0E)A4=eJSr{+^ZdTyVTo*Gf%4g-{2DWe8GwE q;<+;y?LG89P52XUfHxzP95a@foP2{(6BK8YS(p^qjsjzgfdK$ Date: Sun, 12 May 2024 12:14:26 +0800 Subject: [PATCH 2/2] llgo/ssa: NewPyFunc add param doInit --- cl/_testpy/math/out.ll | 2 +- cl/compile.go | 12 ++++++------ py/math/llgo_autogen.lla | Bin 557 -> 563 bytes py/os/llgo_autogen.lla | Bin 554 -> 560 bytes ssa/decl.go | 8 +++++--- ssa/ssa_test.go | 4 ++-- 6 files changed, 14 insertions(+), 12 deletions(-) diff --git a/cl/_testpy/math/out.ll b/cl/_testpy/math/out.ll index 4fd8d274..f5feead3 100644 --- a/cl/_testpy/math/out.ll +++ b/cl/_testpy/math/out.ll @@ -1,7 +1,7 @@ ; ModuleID = 'math' source_filename = "math" -@__llgo_py.math.sqrt = linkonce global ptr null +@__llgo_py.math.sqrt = external global ptr @"math.init$guard" = global ptr null @__llgo_py.math = linkonce global ptr null @0 = private unnamed_addr constant [5 x i8] c"math\00", align 1 diff --git a/cl/compile.go b/cl/compile.go index 1b1a97bd..109126f4 100644 --- a/cl/compile.go +++ b/cl/compile.go @@ -176,7 +176,7 @@ func (p *context) compileMethods(pkg llssa.Package, typ types.Type) { for i, n := 0, mthds.Len(); i < n; i++ { mthd := mthds.At(i) if ssaMthd := prog.MethodValue(mthd); ssaMthd != nil { - p.compileFuncDecl(pkg, ssaMthd) + p.compileFuncDecl(pkg, ssaMthd, false) } } } @@ -211,13 +211,13 @@ var ( argvTy = types.NewPointer(types.NewPointer(types.Typ[types.Int8])) ) -func (p *context) compileFuncDecl(pkg llssa.Package, f *ssa.Function) (llssa.Function, llssa.PyFunction, int) { +func (p *context) compileFuncDecl(pkg llssa.Package, f *ssa.Function, call bool) (llssa.Function, llssa.PyFunction, int) { pkgTypes, name, ftype := p.funcName(f, true) if ftype != goFunc { if ftype == pyFunc { // TODO(xsw): pyMod == "" fnName := pysymPrefix + p.pyMod + "." + name - return nil, pkg.NewPyFunc(fnName, f.Signature), pyFunc + return nil, pkg.NewPyFunc(fnName, f.Signature, call), pyFunc } return nil, nil, ignoredFunc } @@ -292,7 +292,7 @@ func (p *context) funcOf(fn *ssa.Function) (aFn llssa.Function, pyFn llssa.PyFun pkg := p.pkg fnName := pysymPrefix + mod + "." + name if pyFn = pkg.PyFuncOf(fnName); pyFn == nil { - pyFn = pkg.NewPyFunc(fnName, fn.Signature) + pyFn = pkg.NewPyFunc(fnName, fn.Signature, true) return } } @@ -762,7 +762,7 @@ func (p *context) compileFunction(v *ssa.Function) (goFn llssa.Function, pyFn ll // v.Pkg == nil: means auto generated function? if v.Pkg == p.goPkg || v.Pkg == nil { // function in this package - goFn, pyFn, kind = p.compileFuncDecl(p.pkg, v) + goFn, pyFn, kind = p.compileFuncDecl(p.pkg, v, true) if kind != ignoredFunc { return } @@ -881,7 +881,7 @@ func NewPackage(prog llssa.Program, pkg *ssa.Package, files []*ast.File) (ret ll // Do not try to build generic (non-instantiated) functions. continue } - ctx.compileFuncDecl(ret, member) + ctx.compileFuncDecl(ret, member, false) case *ssa.Type: ctx.compileType(ret, member) case *ssa.Global: diff --git a/py/math/llgo_autogen.lla b/py/math/llgo_autogen.lla index 56d53f34ef4070230e22a9445888ebbbf7782100..7c9261cd20f8f5f5f93d81bbf0a054f81dcb7305 100644 GIT binary patch delta 507 zcmZ3>vYDkmz?+#xgn@y9gJD_Xnuu32`x5FI85k^C7#R2&WEgUC((~gJOH1<8Q}gt4 zazaBm8JMp-I;7nM;?fFk21b^zK-FLamQD`LK4c)$djGSwUg{#Ji&>H#MjsOO?RdWJ z>z!n_v2Cg6bhSl2f4|?|5|)14ti9HA^1bSFC+nw|F!Il`JQ@DIfc@| z>MdP;Ea+KP%)8^PTW8y?++r;0f6b}LmAg;(;Co$0#nUPuwLN#r|C}25HBHCt)7+=yS!n9Y`b{57xUB^?i=SXx|4qi#kt3ul=3tA!vFlESH?j^sSajoH0>}F$oDyd_ z9nQN?m}Mj|d4u1#`ETbhVpzha8lcbO8LYSP`VJrKVxQWInTL;_XVNSTOT5zT)zUWg zYFo8`w#ikPV4pW=2{50Hl)i~bvXx2ngRfX#K+s-9l8|6|oOUm!gJ+9mO(p2Qp z2M^OfUdIZe?{{8P*>`NoGvUWJi#P4uefs#{RT^72dK#Pjf4AVD2yef7@Z`?_OFEC7 u3!KPbztPx}U&{VA?@9FlZ$>6LW-O68`8J~_({;zmY)p!5CxG$AzyJXL2--RT delta 501 zcmdnYvX-Sjz?+#xgn@y9gJEXOnuufXi;h(?GBDV&Ffi~l$S~yOr02&cmX_qFr{?M9 zjW-Xl*fcnzD9h%7)N6hg>%{Kjg3rkT#gB*l@vJfGhaH z;}xFY=D)3XXN<^HfA~d7pyDV?%i7aVGTsE0%Ny_bG1JQZ)u#}v;5+; z*y*-1-$mwlsh3vt)PB7Z?jK{Sp32&{cRjD{u4fM4Mf%EXZO+A2aZS$FNVzyK>&xVx zv}HSm_j;D~dLC9UPHu9oE*J0Lof@f``{~=&e+LeyY0AF!U#2*D?$VbXvWuMN|4R~X nwC>&i*6js%fHxzP95a?^ocxeclPSn@G7pm?+aX{~F)#oC?{nB- diff --git a/py/os/llgo_autogen.lla b/py/os/llgo_autogen.lla index e37b4105076cc8dc45e5ec49cc4aa74d58dee5af..a8378f7bad00b6945832c09bb27594f0b9c86aee 100644 GIT binary patch delta 504 zcmZ3*vVo;Oz?+#xgn@y9gJFH*nuz_1Gtbm8GBBvJFfi~l$S~yOr02&cmX_qFr{?M9 z#%`<>-S$>2d}6wCR=}0QxVzpLap2B zd#>T8B|8>vN=dQw)%g3pFTQf>w#Eu&{#iTApVfOr9a{WwtI%uq9qoa7ccbUFo)HPm z^9l{07__tVRBg&C!IeI_Gd;|MIDNSrS?|TO$|PmX&5Z$gty*38+s z=wrz?vF#=A{MngST;!fBcW;7qeo^`i?Z`kTqkN;oCeusD$;?cOY)65S#lQdn6I$3> delta 498 zcmdnMvWlfXz?+#xgn@y9gJF5hnuw~!4wuUq85p!!7#R2&WEgUC((~gJOH1<8Q}gt4 zazaBm8JIII9n!LaxU_9=|W;BrQ9= zccv~3Ss!J{ z$oh)cb;TOSs|u5@MjnjN%FOR-lajNT8h`Y7T6%0yd6eYN#bFMM|LE8(pCg?Rb#?YW91#oZ>(N&Zo{@)9PcxImDjzr znZw62$4$Rv&mP6{cg5*?;hQ!w9lw*_#uv5w7<1$0PXEU_3I@@;+Z@DXJKT(y?cESO1PZ{x;CcGH0pkSz0&5D)NXWRhdX5{HxTF={epT2AI