diff options
| author | David Chase <drchase@google.com> | 2022-09-30 17:16:06 -0400 |
|---|---|---|
| committer | David Chase <drchase@google.com> | 2022-10-01 02:15:39 +0000 |
| commit | 2b1c414fa8d409000a40305cd3d461be34d9a6a9 (patch) | |
| tree | 415216b60475defb25fc5e057eb379c521606162 /src/cmd/internal | |
| parent | 1baea0ddb32dbcce37d7d8e5863dbf7063439a74 (diff) | |
| download | go-2b1c414fa8d409000a40305cd3d461be34d9a6a9.tar.xz | |
cmd/internal/obj: hoist constant slice out of function called in loop
It's all local to a single file and responsible for 1.7% of total
space allocated summed over compilation of the bent benchmarks.
Showing nodes accounting for 27.16GB, 27.04% of 100.44GB total
Dropped 1622 nodes (cum <= 0.50GB)
Showing top 10 nodes out of 321
flat flat% sum% cum cum%
4.87GB 4.85% 4.85% 4.87GB 4.85% cmd/compile/internal/objw.init
4.79GB 4.77% 9.62% 4.81GB 4.79% runtime.allocm
4.72GB 4.70% 14.32% 4.72GB 4.70% cmd/compile/internal/types.newType
3.10GB 3.09% 17.41% 3.17GB 3.15% cmd/compile/internal/ssagen.InitConfig
1.86GB 1.85% 19.26% 2.61GB 2.60% cmd/compile/internal/ssa.cse
1.72GB 1.71% 20.97% 2.25GB 2.24% cmd/internal/obj.(*Link).traverseFuncAux
1.66GB 1.65% 22.62% 1.66GB 1.65% runtime.malg
1.61GB 1.61% 24.23% 1.64GB 1.63% cmd/compile/internal/ssa.schedule
1.42GB 1.41% 25.64% 1.42GB 1.41% cmd/compile/internal/ir.NewNameAt
Change-Id: Id18ee3b83cb23a7042d59714a0c1ca074e7bc7a8
Reviewed-on: https://go-review.googlesource.com/c/go/+/437297
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
Reviewed-by: Cherry Mui <cherryyz@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Run-TryBot: David Chase <drchase@google.com>
Diffstat (limited to 'src/cmd/internal')
| -rw-r--r-- | src/cmd/internal/obj/sym.go | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/src/cmd/internal/obj/sym.go b/src/cmd/internal/obj/sym.go index 40e5377a3d..b3eeedb59d 100644 --- a/src/cmd/internal/obj/sym.go +++ b/src/cmd/internal/obj/sym.go @@ -349,6 +349,7 @@ func (ctxt *Link) traverseSyms(flag traverseFlag, fn func(*LSym)) { } } lists := [][]*LSym{ctxt.Text, ctxt.Data} + files := ctxt.PosTable.FileTable() for _, list := range lists { for _, s := range list { if flag&traverseDefs != 0 { @@ -365,7 +366,7 @@ func (ctxt *Link) traverseSyms(flag traverseFlag, fn func(*LSym)) { f := func(parent *LSym, aux *LSym) { fn(aux) } - ctxt.traverseFuncAux(flag, s, f) + ctxt.traverseFuncAux(flag, s, f, files) } } if flag&traversePcdata != 0 && s.Type == objabi.STEXT { @@ -382,7 +383,7 @@ func (ctxt *Link) traverseSyms(flag traverseFlag, fn func(*LSym)) { } } -func (ctxt *Link) traverseFuncAux(flag traverseFlag, fsym *LSym, fn func(parent *LSym, aux *LSym)) { +func (ctxt *Link) traverseFuncAux(flag traverseFlag, fsym *LSym, fn func(parent *LSym, aux *LSym), files []string) { fninfo := fsym.Func() pc := &fninfo.Pcln if flag&traverseAux == 0 { @@ -395,7 +396,6 @@ func (ctxt *Link) traverseFuncAux(flag traverseFlag, fsym *LSym, fn func(parent fn(fsym, d) } } - files := ctxt.PosTable.FileTable() usedFiles := make([]goobj.CUFileIndex, 0, len(pc.UsedFiles)) for f := range pc.UsedFiles { usedFiles = append(usedFiles, f) @@ -435,6 +435,7 @@ func (ctxt *Link) traverseFuncAux(flag traverseFlag, fsym *LSym, fn func(parent // Traverse aux symbols, calling fn for each sym/aux pair. func (ctxt *Link) traverseAuxSyms(flag traverseFlag, fn func(parent *LSym, aux *LSym)) { lists := [][]*LSym{ctxt.Text, ctxt.Data} + files := ctxt.PosTable.FileTable() for _, list := range lists { for _, s := range list { if s.Gotype != nil { @@ -445,7 +446,7 @@ func (ctxt *Link) traverseAuxSyms(flag traverseFlag, fn func(parent *LSym, aux * if s.Type != objabi.STEXT { continue } - ctxt.traverseFuncAux(flag, s, fn) + ctxt.traverseFuncAux(flag, s, fn, files) } } } |
