Skip to content

Commit e2b0386

Browse files
committed
skip redundant SSA program builds
1 parent fefd062 commit e2b0386

1 file changed

Lines changed: 17 additions & 10 deletions

File tree

internal/build/build.go

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1774,6 +1774,7 @@ func buildSSAPkgs(ctx *context, initial []*packages.Package, verbose bool) ([]*a
17741774
prog := ctx.progSSA
17751775
var all []*aPackage
17761776
var errs []*packages.Package
1777+
var createdSSA bool
17771778
packages.Visit(initial, nil, func(p *packages.Package) {
17781779
if p.Types != nil && !p.IllTyped {
17791780
pkgPath := p.PkgPath
@@ -1782,7 +1783,10 @@ func buildSSAPkgs(ctx *context, initial []*packages.Package, verbose bool) ([]*a
17821783
return
17831784
}
17841785
var altPkg *packages.Cached
1785-
var ssaPkg = createSSAPkg(ctx, prog, p, verbose)
1786+
ssaPkg, created := createSSAPkg(ctx, prog, p, verbose)
1787+
if created {
1788+
createdSSA = true
1789+
}
17861790
if ctx.hasAltPkg(pkgPath) {
17871791
if altPkg = ctx.dedup.Check(altPkgPathPrefix + pkgPath); altPkg == nil {
17881792
return
@@ -1816,7 +1820,9 @@ func buildSSAPkgs(ctx *context, initial []*packages.Package, verbose bool) ([]*a
18161820
}
18171821
return nil, fmt.Errorf("cannot build SSA for packages")
18181822
}
1819-
prog.Build()
1823+
if createdSSA {
1824+
prog.Build()
1825+
}
18201826
for _, pkg := range all {
18211827
fixSSAOrder(pkg.SSA, pkg.Syntax)
18221828
}
@@ -1927,16 +1933,17 @@ func applyPatches(ctx *context, p *packages.Package, verbose bool) {
19271933
}
19281934
}
19291935

1930-
func createSSAPkg(ctx *context, prog *ssa.Program, p *packages.Package, verbose bool) *ssa.Package {
1936+
func createSSAPkg(ctx *context, prog *ssa.Program, p *packages.Package, verbose bool) (*ssa.Package, bool) {
19311937
pkgSSA := prog.ImportedPackage(p.ID)
1932-
if pkgSSA == nil {
1933-
if debugBuild || verbose {
1934-
log.Println("==> BuildSSA", p.ID)
1935-
}
1936-
applyPatches(ctx, p, verbose)
1937-
pkgSSA = prog.CreatePackage(p.Types, p.Syntax, p.TypesInfo, true)
1938+
if pkgSSA != nil {
1939+
return pkgSSA, false
1940+
}
1941+
if debugBuild || verbose {
1942+
log.Println("==> BuildSSA", p.ID)
19381943
}
1939-
return pkgSSA
1944+
applyPatches(ctx, p, verbose)
1945+
pkgSSA = prog.CreatePackage(p.Types, p.Syntax, p.TypesInfo, true)
1946+
return pkgSSA, true
19401947
}
19411948

19421949
/*

0 commit comments

Comments
 (0)