From 06839e3c9a014da580c2cdcd11263e2b08991b74 Mon Sep 17 00:00:00 2001 From: Cherry Zhang Date: Sat, 17 Oct 2020 14:00:35 -0400 Subject: [PATCH] cmd/link: run generator functions along with symbol writing MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Like we do for applying relocations, for generator symbols, run the generator function along with symbol writing. This will probably have better locality and parallelism. Linking cmd/compile, Asmb 29.9ms ± 5% 19.1ms ±12% -36.18% (p=0.000 n=10+9) TotalTime 351ms ± 3% 339ms ± 2% -3.51% (p=0.000 n=11+10) Change-Id: I9cda6718bf70b3bcf1b7a501a845d6136234d2ee Reviewed-on: https://go-review.googlesource.com/c/go/+/263640 Trust: Cherry Zhang Run-TryBot: Cherry Zhang TryBot-Result: Go Bot Reviewed-by: Jeremy Faller Reviewed-by: Than McIntosh --- src/cmd/link/internal/ld/data.go | 3 +++ src/cmd/link/internal/ld/main.go | 12 ------------ 2 files changed, 3 insertions(+), 12 deletions(-) diff --git a/src/cmd/link/internal/ld/data.go b/src/cmd/link/internal/ld/data.go index 84e03a4011..00130044ab 100644 --- a/src/cmd/link/internal/ld/data.go +++ b/src/cmd/link/internal/ld/data.go @@ -951,6 +951,9 @@ func writeBlock(ctxt *Link, out *OutBuf, ldr *loader.Loader, syms []loader.Sym, } P := out.WriteSym(ldr, s) st.relocsym(s, P) + if f, ok := ctxt.generatorSyms[s]; ok { + f(ctxt, s) + } addr += int64(len(P)) siz := ldr.SymSize(s) if addr < val+siz { diff --git a/src/cmd/link/internal/ld/main.go b/src/cmd/link/internal/ld/main.go index 5ae57d1992..5c8293810f 100644 --- a/src/cmd/link/internal/ld/main.go +++ b/src/cmd/link/internal/ld/main.go @@ -36,14 +36,12 @@ import ( "cmd/internal/objabi" "cmd/internal/sys" "cmd/link/internal/benchmark" - "cmd/link/internal/loader" "flag" "log" "os" "runtime" "runtime/pprof" "strings" - "sync" ) var ( @@ -331,16 +329,6 @@ func Main(arch *sys.Arch, theArch Arch) { // will be applied directly there. bench.Start("Asmb") asmb(ctxt) - // Generate large symbols. - var wg sync.WaitGroup - for s, f := range ctxt.generatorSyms { - wg.Add(1) - go func(f generatorFunc, s loader.Sym) { - defer wg.Done() - f(ctxt, s) - }(f, s) - } - wg.Wait() // Generate additional symbols for the native symbol table just prior // to code generation. -- 2.50.0