From 31d5a8ac104150e05e233c5c8b12e7ea8457d611 Mon Sep 17 00:00:00 2001 From: xushiwei Date: Mon, 13 May 2024 00:41:42 +0800 Subject: [PATCH 1/3] compileBlock bugfix: pyMod --- cl/compile.go | 28 +++++++++++++++------------- py/math/llgo_autogen.lla | Bin 628 -> 563 bytes py/os/llgo_autogen.lla | Bin 627 -> 560 bytes 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/cl/compile.go b/cl/compile.go index a786981b..771f3029 100644 --- a/cl/compile.go +++ b/cl/compile.go @@ -347,20 +347,22 @@ func (p *context) compileBlock(b llssa.Builder, block *ssa.BasicBlock, n int, do if pyModInit = p.pyMod != ""; pyModInit { last = len(instrs) - 1 instrs = instrs[:last] + } else { + // TODO(xsw): confirm pyMod don't need to call LoadPyModSyms + p.inits = append(p.inits, func() { + if objs := pkg.PyObjs(); len(objs) > 0 { + mods := make(map[string][]llssa.PyObjRef) + for name, obj := range objs { + modName := modOf(name) + mods[modName] = append(mods[modName], obj) + } + b.SetBlockEx(ret, llssa.AfterInit) + for modName, objs := range mods { + b.LoadPyModSyms(modName, objs...) + } + } + }) } - p.inits = append(p.inits, func() { - if objs := pkg.PyObjs(); len(objs) > 0 { - mods := make(map[string][]llssa.PyObjRef) - for name, obj := range objs { - modName := modOf(name) - mods[modName] = append(mods[modName], obj) - } - b.SetBlockEx(ret, llssa.AfterInit) - for modName, objs := range mods { - b.LoadPyModSyms(modName, objs...) - } - } - }) } else if doMainInit { fn := p.fn argc := pkg.NewVar("__llgo_argc", types.NewPointer(types.Typ[types.Int32]), llssa.InC) diff --git a/py/math/llgo_autogen.lla b/py/math/llgo_autogen.lla index 8eaa159b98b5e33266d9b6d3708f3d6a34c2f8c9..44b7ad79f23add336a1f0ba99a3590860ede996f 100644 GIT binary patch literal 563 zcmWIWW@Zs#U|`^2;9y-F@k(Z2LOmk`gCz?C13!ZdLrzY5etcqSNq%~2o?cE)Xb2|* z^M?-(X`g_&w1S&~k>x8;HQ0cqlLNC48Hlvr|E#T-y2$BbmSl&~heUllo^ShlCz)+* zTk1JoZBftP?{~L^r5`tIul1aKuln4{=_QQ(vn)@Be=lJF8*`)A+kK|qv7LHLS04*{ zRu%K^IP2Egb}P3SOZs1PDstuS(>?fJmr?Pw%13R_o$^1Y27XP`G5a+4saqiD&MTUH zOHEULw%_v5NX##C=j9G~bcOSj=grbXT$)!_he`gAlX`glQitwVnK_?kCvv8qaab0b zx^mNp5^igO&EhAR)_;?6b>s-?iaFRKaO}EM;f<_=4;I}xn85LV38%zaPKWdE6J{9+ zOy1!4ZT{Q&ix`%$sRrn?cn0e&yuQQ7y4a_-V&>ta=b1DM!xFDFd$qJpz1mjopDnXr zuR8xyki*pGD?bglT{VukJ(@L9R8^rm{TR_8nXDO!%?Q;!QhupFaL~mB!YMp2jBs-!1qj!rQMNJh}7#lFlRN0w?mVJMJ30WyIB E06XB|u>b%7 delta 574 zcmV-E0>S;W1oQ-dP)h>@6aWAK2mtrItXL5TS`EMf001xr000jF8~|)=XK!C&b#!lM zWo|BPY*kbV00Y9}KxV|^KxTD#3jhHG^#K3?1QY-O0HsvHYTPgoz3VFm( zNGSNwOQ3~7k8LqpOL0WUk}Jz0ru5%ClI`7Wnq;%AFS6u+nfGSiJoy^F8quS?`3#@n ztXA&6-=vjkmbGcI@0N(QS+>Kn;qLy7b*8tKEbkOb%^OK6(c38zV?|l|ld>IBf0A~; zt)oQw=%m#gp+>WzrFE7S2hdWbmHSZl+=_@GcA21i#OF*DflB`}x|08gX7shS>VZ26 zz4pzBk_%yfp)$I2Ts!#w5gtKZ{)8&>Xg{(nN`RxPHRPfi@06DCV3dG& zwH=+u@P~~JW>*Yg;afn%1*kj;ogE|Jt`vZcB?!Vx0Qp8DEJl{qvprQkyr+U=tS)FDMi8XA9d4S|SXYkA_#X<=7g@Y@Nl@nEpqixEzEte5zho8i z3FCDqx_B2jUdI>xFq(z^15ir=0v-bt000080QbDCSP=(W4Zr~a05AoU;sGcE!s3$* M0wD$o0ssI20R7Dc4gdfE diff --git a/py/os/llgo_autogen.lla b/py/os/llgo_autogen.lla index d9ad409c2d002012a98d356d4be56f0651eecd7a..e88a4ffa3f069814f8cbdf5f9f3f98ed75b333f4 100644 GIT binary patch literal 560 zcmWIWW@Zs#U|`^2kYZgMv0riKnHok022~aY27U$^hMb)A{P@JulKk}4JiVNp&=5`r zW|5B$X`(<}TEWf0$nq7a8f?JQ$)~dp8wj|5|J8NyiV9=0^+z=okxehux}Cn~8g5#$ zW6`FR6iZ)?zu)`fE2nO2tWf5kwX^)0N7SLk54Q@vX5Y~ssCPGdZtEG5z&x+e@QFb? zJ5SZ7tP))5lRMMHJc!emyOH%?Jgc1IYLnbYTkf8)S+RE|sLwZnCZ#2%?&-B^ntI+W{hLDpnho=bWnFVp*kUIIWt8MQ`7CX=DQF{~^>XO&C(tWck|+Cv>b^U1oH%cP)h>@6aWAK2mlAYtXN@Di`>5f000~X000jF8~|)=XK!C&b#!lM zWo|BPY*kbV00Z9QKxW|LKxTD#3jhHG^#K3?1QY-O0Hst-Yuqppz3W#Drb}WlUV9yA zNGSNwOQ3;3k4Z3ENpVGG$;fgV6Z+pXlI{IS)9k|fA`8ubyf^dSNY`*{c(26GclZWp zwRFGwb;?Y$tWB%>ZmCplmhG@K-5KdjZ<(l`q!OAo0u!Ro5+Xv%s`C4)9a7V!wQ%eY z$29Tcgw<3*t;`yi)>%@1ij_(&-IuzjmPZJ%%>&&lwa+=wtrfCeNkNtrFcLUD; z&!Or3A>vM8`3IoW>?WH@ihU)k<11Md7%N%R0=ggQQ0g#}8!w6jUKFzzt5du{mf726 z*B>ifP--SAP9X_CUEn?#5QMoKZkpCuSB=Z~>IC7-EZ)pVQ0C%*mZ;ahP~@+_SWM9g z;s0bN@iuV0f*;PpI4I-|P)h*<9s?8r000O82feIVVNr|RzX1RM90il#0Vo3A;*$vi LAqEHn00000kW~ZL From a337136389f4c4f7e5ce9c7efba83457f0e8c33f Mon Sep 17 00:00:00 2001 From: xushiwei Date: Mon, 13 May 2024 00:45:41 +0800 Subject: [PATCH 2/3] _testpy --- cl/_testpy/callpy/out.ll | 14 +++++++------- cl/_testpy/math/out.ll | 13 ++++--------- 2 files changed, 11 insertions(+), 16 deletions(-) diff --git a/cl/_testpy/callpy/out.ll b/cl/_testpy/callpy/out.ll index 1f6d541c..5971bcf1 100644 --- a/cl/_testpy/callpy/out.ll +++ b/cl/_testpy/callpy/out.ll @@ -8,10 +8,10 @@ source_filename = "main" @__llgo_py.os.getcwd = linkonce global ptr null @0 = private unnamed_addr constant [14 x i8] c"sqrt(2) = %f\0A\00", align 1 @1 = private unnamed_addr constant [10 x i8] c"cwd = %s\0A\00", align 1 -@__llgo_py.math = external global ptr -@2 = private unnamed_addr constant [5 x i8] c"sqrt\00", align 1 @__llgo_py.os = external global ptr -@3 = private unnamed_addr constant [7 x i8] c"getcwd\00", align 1 +@2 = private unnamed_addr constant [7 x i8] c"getcwd\00", align 1 +@__llgo_py.math = external global ptr +@3 = private unnamed_addr constant [5 x i8] c"sqrt\00", align 1 define void @main.init() { _llgo_0: @@ -22,10 +22,10 @@ _llgo_1: ; preds = %_llgo_0 store i1 true, ptr @"main.init$guard", align 1 call void @"github.com/goplus/llgo/py/math.init"() call void @"github.com/goplus/llgo/py/os.init"() - %1 = load ptr, ptr @__llgo_py.math, align 8 - call void (ptr, ...) @llgoLoadPyModSyms(ptr %1, ptr @2, ptr @__llgo_py.math.sqrt, ptr null) - %2 = load ptr, ptr @__llgo_py.os, align 8 - call void (ptr, ...) @llgoLoadPyModSyms(ptr %2, ptr @3, ptr @__llgo_py.os.getcwd, ptr null) + %1 = load ptr, ptr @__llgo_py.os, align 8 + call void (ptr, ...) @llgoLoadPyModSyms(ptr %1, ptr @2, ptr @__llgo_py.os.getcwd, ptr null) + %2 = load ptr, ptr @__llgo_py.math, align 8 + call void (ptr, ...) @llgoLoadPyModSyms(ptr %2, ptr @3, ptr @__llgo_py.math.sqrt, ptr null) br label %_llgo_2 _llgo_2: ; preds = %_llgo_1, %_llgo_0 diff --git a/cl/_testpy/math/out.ll b/cl/_testpy/math/out.ll index 378284c6..f5feead3 100644 --- a/cl/_testpy/math/out.ll +++ b/cl/_testpy/math/out.ll @@ -5,7 +5,6 @@ source_filename = "math" @"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 -@1 = private unnamed_addr constant [5 x i8] c"sqrt\00", align 1 define void @math.init() { _llgo_0: @@ -15,20 +14,16 @@ _llgo_0: _llgo_1: ; preds = %_llgo_0 store i1 true, ptr @"math.init$guard", align 1 %1 = load ptr, ptr @__llgo_py.math, align 8 - call void (ptr, ...) @llgoLoadPyModSyms(ptr %1, ptr @1, ptr @__llgo_py.math.sqrt, ptr null) - %2 = load ptr, ptr @__llgo_py.math, align 8 - %3 = icmp ne ptr %2, null - br i1 %3, label %_llgo_2, label %_llgo_3 + %2 = icmp ne ptr %1, null + br i1 %2, label %_llgo_2, label %_llgo_3 _llgo_2: ; preds = %_llgo_3, %_llgo_1, %_llgo_0 ret void _llgo_3: ; preds = %_llgo_1 - %4 = call ptr @PyImport_ImportModule(ptr @0) - store ptr %4, ptr @__llgo_py.math, align 8 + %3 = call ptr @PyImport_ImportModule(ptr @0) + store ptr %3, ptr @__llgo_py.math, align 8 br label %_llgo_2 } declare ptr @PyImport_ImportModule(ptr) - -declare void @llgoLoadPyModSyms(ptr, ...) From 388b19eed5b70046c34148f106f32d570bfef88c Mon Sep 17 00:00:00 2001 From: xushiwei Date: Mon, 13 May 2024 00:50:58 +0800 Subject: [PATCH 3/3] _testpy: sort by module name --- cl/_testpy/callpy/out.ll | 14 +++++++------- cl/compile.go | 11 ++++++++++- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/cl/_testpy/callpy/out.ll b/cl/_testpy/callpy/out.ll index 5971bcf1..1f6d541c 100644 --- a/cl/_testpy/callpy/out.ll +++ b/cl/_testpy/callpy/out.ll @@ -8,10 +8,10 @@ source_filename = "main" @__llgo_py.os.getcwd = linkonce global ptr null @0 = private unnamed_addr constant [14 x i8] c"sqrt(2) = %f\0A\00", align 1 @1 = private unnamed_addr constant [10 x i8] c"cwd = %s\0A\00", align 1 -@__llgo_py.os = external global ptr -@2 = private unnamed_addr constant [7 x i8] c"getcwd\00", align 1 @__llgo_py.math = external global ptr -@3 = private unnamed_addr constant [5 x i8] c"sqrt\00", align 1 +@2 = private unnamed_addr constant [5 x i8] c"sqrt\00", align 1 +@__llgo_py.os = external global ptr +@3 = private unnamed_addr constant [7 x i8] c"getcwd\00", align 1 define void @main.init() { _llgo_0: @@ -22,10 +22,10 @@ _llgo_1: ; preds = %_llgo_0 store i1 true, ptr @"main.init$guard", align 1 call void @"github.com/goplus/llgo/py/math.init"() call void @"github.com/goplus/llgo/py/os.init"() - %1 = load ptr, ptr @__llgo_py.os, align 8 - call void (ptr, ...) @llgoLoadPyModSyms(ptr %1, ptr @2, ptr @__llgo_py.os.getcwd, ptr null) - %2 = load ptr, ptr @__llgo_py.math, align 8 - call void (ptr, ...) @llgoLoadPyModSyms(ptr %2, ptr @3, ptr @__llgo_py.math.sqrt, ptr null) + %1 = load ptr, ptr @__llgo_py.math, align 8 + call void (ptr, ...) @llgoLoadPyModSyms(ptr %1, ptr @2, ptr @__llgo_py.math.sqrt, ptr null) + %2 = load ptr, ptr @__llgo_py.os, align 8 + call void (ptr, ...) @llgoLoadPyModSyms(ptr %2, ptr @3, ptr @__llgo_py.os.getcwd, ptr null) br label %_llgo_2 _llgo_2: ; preds = %_llgo_1, %_llgo_0 diff --git a/cl/compile.go b/cl/compile.go index 771f3029..78dbb47b 100644 --- a/cl/compile.go +++ b/cl/compile.go @@ -356,8 +356,17 @@ func (p *context) compileBlock(b llssa.Builder, block *ssa.BasicBlock, n int, do modName := modOf(name) mods[modName] = append(mods[modName], obj) } + + // sort by module name + modNames := make([]string, 0, len(mods)) + for modName := range mods { + modNames = append(modNames, modName) + } + sort.Strings(modNames) + b.SetBlockEx(ret, llssa.AfterInit) - for modName, objs := range mods { + for _, modName := range modNames { + objs := mods[modName] b.LoadPyModSyms(modName, objs...) } }