Skip to content

Commit 60e0404

Browse files
committed
skip redundant SSA program builds
1 parent c0ff171 commit 60e0404

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
@@ -1770,6 +1770,7 @@ func buildSSAPkgs(ctx *context, initial []*packages.Package, verbose bool) ([]*a
17701770
prog := ctx.progSSA
17711771
var all []*aPackage
17721772
var errs []*packages.Package
1773+
var createdSSA bool
17731774
packages.Visit(initial, nil, func(p *packages.Package) {
17741775
if p.Types != nil && !p.IllTyped {
17751776
pkgPath := p.PkgPath
@@ -1778,7 +1779,10 @@ func buildSSAPkgs(ctx *context, initial []*packages.Package, verbose bool) ([]*a
17781779
return
17791780
}
17801781
var altPkg *packages.Cached
1781-
var ssaPkg = createSSAPkg(ctx, prog, p, verbose)
1782+
ssaPkg, created := createSSAPkg(ctx, prog, p, verbose)
1783+
if created {
1784+
createdSSA = true
1785+
}
17821786
if ctx.hasAltPkg(pkgPath) {
17831787
if altPkg = ctx.dedup.Check(altPkgPathPrefix + pkgPath); altPkg == nil {
17841788
return
@@ -1812,7 +1816,9 @@ func buildSSAPkgs(ctx *context, initial []*packages.Package, verbose bool) ([]*a
18121816
}
18131817
return nil, fmt.Errorf("cannot build SSA for packages")
18141818
}
1815-
prog.Build()
1819+
if createdSSA {
1820+
prog.Build()
1821+
}
18161822
for _, pkg := range all {
18171823
fixSSAOrder(pkg.SSA, pkg.Syntax)
18181824
}
@@ -1923,16 +1929,17 @@ func applyPatches(ctx *context, p *packages.Package, verbose bool) {
19231929
}
19241930
}
19251931

1926-
func createSSAPkg(ctx *context, prog *ssa.Program, p *packages.Package, verbose bool) *ssa.Package {
1932+
func createSSAPkg(ctx *context, prog *ssa.Program, p *packages.Package, verbose bool) (*ssa.Package, bool) {
19271933
pkgSSA := prog.ImportedPackage(p.ID)
1928-
if pkgSSA == nil {
1929-
if debugBuild || verbose {
1930-
log.Println("==> BuildSSA", p.ID)
1931-
}
1932-
applyPatches(ctx, p, verbose)
1933-
pkgSSA = prog.CreatePackage(p.Types, p.Syntax, p.TypesInfo, true)
1934+
if pkgSSA != nil {
1935+
return pkgSSA, false
1936+
}
1937+
if debugBuild || verbose {
1938+
log.Println("==> BuildSSA", p.ID)
19341939
}
1935-
return pkgSSA
1940+
applyPatches(ctx, p, verbose)
1941+
pkgSSA = prog.CreatePackage(p.Types, p.Syntax, p.TypesInfo, true)
1942+
return pkgSSA, true
19361943
}
19371944

19381945
/*

0 commit comments

Comments
 (0)