@@ -5,7 +5,6 @@ source_filename = "math"
|
|||||||
@"math.init$guard" = global ptr null
|
@"math.init$guard" = global ptr null
|
||||||
@__llgo_py.math = linkonce global ptr null
|
@__llgo_py.math = linkonce global ptr null
|
||||||
@0 = private unnamed_addr constant [5 x i8] c"math\00", align 1
|
@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() {
|
define void @math.init() {
|
||||||
_llgo_0:
|
_llgo_0:
|
||||||
@@ -15,20 +14,16 @@ _llgo_0:
|
|||||||
_llgo_1: ; preds = %_llgo_0
|
_llgo_1: ; preds = %_llgo_0
|
||||||
store i1 true, ptr @"math.init$guard", align 1
|
store i1 true, ptr @"math.init$guard", align 1
|
||||||
%1 = load ptr, ptr @__llgo_py.math, align 8
|
%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 = icmp ne ptr %1, null
|
||||||
%2 = load ptr, ptr @__llgo_py.math, align 8
|
br i1 %2, label %_llgo_2, label %_llgo_3
|
||||||
%3 = icmp ne ptr %2, null
|
|
||||||
br i1 %3, label %_llgo_2, label %_llgo_3
|
|
||||||
|
|
||||||
_llgo_2: ; preds = %_llgo_3, %_llgo_1, %_llgo_0
|
_llgo_2: ; preds = %_llgo_3, %_llgo_1, %_llgo_0
|
||||||
ret void
|
ret void
|
||||||
|
|
||||||
_llgo_3: ; preds = %_llgo_1
|
_llgo_3: ; preds = %_llgo_1
|
||||||
%4 = call ptr @PyImport_ImportModule(ptr @0)
|
%3 = call ptr @PyImport_ImportModule(ptr @0)
|
||||||
store ptr %4, ptr @__llgo_py.math, align 8
|
store ptr %3, ptr @__llgo_py.math, align 8
|
||||||
br label %_llgo_2
|
br label %_llgo_2
|
||||||
}
|
}
|
||||||
|
|
||||||
declare ptr @PyImport_ImportModule(ptr)
|
declare ptr @PyImport_ImportModule(ptr)
|
||||||
|
|
||||||
declare void @llgoLoadPyModSyms(ptr, ...)
|
|
||||||
|
|||||||
@@ -347,7 +347,8 @@ func (p *context) compileBlock(b llssa.Builder, block *ssa.BasicBlock, n int, do
|
|||||||
if pyModInit = p.pyMod != ""; pyModInit {
|
if pyModInit = p.pyMod != ""; pyModInit {
|
||||||
last = len(instrs) - 1
|
last = len(instrs) - 1
|
||||||
instrs = instrs[:last]
|
instrs = instrs[:last]
|
||||||
}
|
} else {
|
||||||
|
// TODO(xsw): confirm pyMod don't need to call LoadPyModSyms
|
||||||
p.inits = append(p.inits, func() {
|
p.inits = append(p.inits, func() {
|
||||||
if objs := pkg.PyObjs(); len(objs) > 0 {
|
if objs := pkg.PyObjs(); len(objs) > 0 {
|
||||||
mods := make(map[string][]llssa.PyObjRef)
|
mods := make(map[string][]llssa.PyObjRef)
|
||||||
@@ -355,12 +356,22 @@ func (p *context) compileBlock(b llssa.Builder, block *ssa.BasicBlock, n int, do
|
|||||||
modName := modOf(name)
|
modName := modOf(name)
|
||||||
mods[modName] = append(mods[modName], obj)
|
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)
|
b.SetBlockEx(ret, llssa.AfterInit)
|
||||||
for modName, objs := range mods {
|
for _, modName := range modNames {
|
||||||
|
objs := mods[modName]
|
||||||
b.LoadPyModSyms(modName, objs...)
|
b.LoadPyModSyms(modName, objs...)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
}
|
||||||
} else if doMainInit {
|
} else if doMainInit {
|
||||||
fn := p.fn
|
fn := p.fn
|
||||||
argc := pkg.NewVar("__llgo_argc", types.NewPointer(types.Typ[types.Int32]), llssa.InC)
|
argc := pkg.NewVar("__llgo_argc", types.NewPointer(types.Typ[types.Int32]), llssa.InC)
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user