go/src/cmd
Josh Bleecher Snyder eb5cd0fb40 cmd/compile: mark Lsyms as readonly earlier
The SSA backend has rules to read the contents of readonly Lsyms.
However, this rule was failing to trigger for many readonly Lsyms.
This is because the readonly attribute that was set on the Node.Name
was not propagated to its Lsym until the dump globals phase, after SSA runs.

To work around this phase ordering problem, introduce Node.SetReadonly,
which sets Node.Name.Readonly and also configures the Lsym
enough that SSA can use it.

This change also fixes a latent problem in the rewrite rule function,
namely that reads past the end of lsym.P were treated as entirely zero,
instead of merely requiring padding with trailing zeros.

This change also adds an amd64 rule needed to fully optimize
the results of this change. It would be better not to need this,
but the zero extension that should handle this for us
gets optimized away too soon (see #36897 for a similar problem).
I have not investigated whether other platforms also need new
rules to take full advantage of the new optimizations.

Compiled code for (interface{})(true) on amd64 goes from:

LEAQ	type.bool(SB), AX
MOVBLZX	""..stmp_0(SB), BX
LEAQ	runtime.staticbytes(SB), CX
ADDQ	CX, BX

to

LEAQ	type.bool(SB), AX
LEAQ	runtime.staticbytes+1(SB), BX

Prior to this change, the readonly symbol rewrite rules
fired a total of 884 times during make.bash.
Afterwards they fire 1807 times.

file    before    after     Δ       %
cgo     4827832   4823736   -4096   -0.085%
compile 24907768  24895656  -12112  -0.049%
fix     3376952   3368760   -8192   -0.243%
pprof   14751700  14747604  -4096   -0.028%
total   120343528 120315032 -28496  -0.024%

Change-Id: I59ea52138276c37840f69e30fb109fd376d579ec
Reviewed-on: https://go-review.googlesource.com/c/go/+/220499
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Keith Randall <khr@golang.org>
2020-02-26 19:30:21 +00:00
..
addr2line
api
asm cmd/asm: add asimd instruction 'rev16' on arm64 2020-02-25 18:40:19 +00:00
buildid
cgo cmd/cgo: better handling for '.' in pkgpath for gccgo 2019-11-19 19:38:07 +00:00
compile cmd/compile: mark Lsyms as readonly earlier 2020-02-26 19:30:21 +00:00
cover syscall: respect permission bits on file opening on Windows 2019-10-22 10:09:39 +00:00
dist cmd/dist: test cgo internal linking PIE 2020-02-21 23:11:00 +00:00
doc cmd/doc: flag usage() inconsistency 2019-12-18 17:57:19 +00:00
fix cmd/fix: eliminate data races in TestRewrite and gofmt 2019-11-18 15:11:03 +00:00
go cmd/go: escape $WORK in ccompile when -n is set 2020-02-26 15:51:45 +00:00
gofmt cmd/fix, cmd/go, cmd/gofmt: refactor common code into new internal diff package 2019-10-28 23:59:10 +00:00
internal cmd/link: default to internal linking for android/arm64 2020-02-26 09:47:21 +00:00
link cmd/link/internal/ld: bump NetBSD ABI version to 7.0 2020-02-26 18:56:51 +00:00
nm all: base64-encode binaries that will cause Apple notarization to fail 2019-11-21 14:55:12 +00:00
objdump cmd/objdump: disable unsupported tests on riscv64 2020-01-25 05:48:12 +00:00
pack
pprof all: fix a number of misuses of the word "an" 2019-12-10 16:23:10 +00:00
test2json
trace cmd/trace: update to use WebComponents V0 polyfill 2020-02-20 19:12:11 +00:00
vendor all: update module dependencies 2020-02-19 21:26:10 +00:00
vet cmd/vet: add test for loading complex values with a single instruction 2019-11-05 01:01:31 +00:00
README.vendor
go.mod all: update module dependencies 2020-02-19 21:26:10 +00:00
go.sum all: update module dependencies 2020-02-19 21:26:10 +00:00

README.vendor

See src/README.vendor for information on loading vendored packages
and updating the vendor directory.