36dbdbe9bd
In the deadcode pass, we use a work queue for the flood algorithm. Currently this is a simple LIFO queue. In this order, there is poor locality in accessing object files. Since the global indices are assigned in package DAG order, edges are mostly either within a package or from a smaller index to a larger one. (With named symbols, there can be backward edges, but shouldn't be too many.) Using a min-heap for the work queue, we access all symbols in one object, then move to next one. It rarely needs to revisit an object that is already visted. This should result in better locality. Benchmark result from Than (thanks!): name old time/op new time/op delta LinkCompiler 1.74s ±11% 1.61s ± 9% -7.80% (p=0.000 n=20+19) LinkWithoutDebugCompiler 1.27s ±11% 1.15s ± 9% -9.02% (p=0.000 n=20+20) Currently this uses the container/heap package, which uses interface elements. If this allocates too much, we may consider to hand-code the min heap. Change-Id: I216d5291c432fe1f40b0b8f4f1b9d388807bf6c5 Reviewed-on: https://go-review.googlesource.com/c/go/+/204438 Reviewed-by: Jeremy Faller <jeremy@golang.org> |
||
---|---|---|
.github | ||
api | ||
doc | ||
lib/time | ||
misc | ||
src | ||
test | ||
.gitattributes | ||
.gitignore | ||
AUTHORS | ||
CONTRIBUTING.md | ||
CONTRIBUTORS | ||
favicon.ico | ||
LICENSE | ||
PATENTS | ||
README.md | ||
robots.txt | ||
SECURITY.md |
The Go Programming Language
Go is an open source programming language that makes it easy to build simple, reliable, and efficient software.
Gopher image by Renee French, licensed under Creative Commons 3.0 Attributions license.
Our canonical Git repository is located at https://go.googlesource.com/go. There is a mirror of the repository at https://github.com/golang/go.
Unless otherwise noted, the Go source files are distributed under the BSD-style license found in the LICENSE file.
Download and Install
Binary Distributions
Official binary distributions are available at https://golang.org/dl/.
After downloading a binary release, visit https://golang.org/doc/install or load doc/install.html in your web browser for installation instructions.
Install From Source
If a binary distribution is not available for your combination of operating system and architecture, visit https://golang.org/doc/install/source or load doc/install-source.html in your web browser for source installation instructions.
Contributing
Go is the work of thousands of contributors. We appreciate your help!
To contribute, please read the contribution guidelines: https://golang.org/doc/contribute.html
Note that the Go project uses the issue tracker for bug reports and proposals only. See https://golang.org/wiki/Questions for a list of places to ask questions about the Go language.