builder: build SSA before compiling packages

This commit is contained in:
Jake Bailey
2026-08-07 19:52:19 -07:00
committed by Damian Gryski
parent 570a3deac2
commit c33682cf00
4 changed files with 18 additions and 7 deletions
+3 -3
View File
@@ -296,6 +296,9 @@ func Sizes(machine llvm.TargetMachine) types.Sizes {
}
// CompilePackage compiles a single package to a LLVM module.
//
// The SSA package must already be built. When packages are compiled
// concurrently, the entire SSA program must be built before compilation starts.
func CompilePackage(moduleName string, pkg *loader.Package, ssaPkg *ssa.Package, machine llvm.TargetMachine, config *Config, dumpSSA bool) (llvm.Module, []error) {
c := newCompilerContext(moduleName, machine, config, dumpSSA)
defer c.dispose()
@@ -306,9 +309,6 @@ func CompilePackage(moduleName string, pkg *loader.Package, ssaPkg *ssa.Package,
c.runtimePkg = ssaPkg.Prog.ImportedPackage("runtime").Pkg
c.program = ssaPkg.Prog
// Convert AST to SSA.
ssaPkg.Build()
// Assign names to function-local named types before compiling the
// package, so that types declared in different functions (or in
// different instantiations of a generic function) do not collide.
+3 -1
View File
@@ -413,5 +413,7 @@ func testCompilePackage(t *testing.T, options *compileopts.Options, file string)
// Compile AST to IR.
program := lprogram.LoadSSA()
pkg := lprogram.MainPkg()
return CompilePackage(file, pkg, program.Package(pkg.Pkg), machine, compilerConfig, false)
ssaPkg := program.Package(pkg.Pkg)
ssaPkg.Build()
return CompilePackage(file, pkg, ssaPkg, machine, compilerConfig, false)
}