]> Cypherpunks.ru repositories - gostls13.git/commit
cmd/compile: enable address folding for globals on ARM64, just not -dynlink mode
authorCherry Mui <cherryyz@google.com>
Tue, 7 Mar 2023 20:32:30 +0000 (15:32 -0500)
committerCherry Mui <cherryyz@google.com>
Tue, 7 Mar 2023 21:29:30 +0000 (21:29 +0000)
commitb675a75c3d7c221d8f5734203e25bd690a9a1f83
tree93f10b5c1d9125f87639e7c96068c48838a96a78
parenta4cf4fde466035e6a485c29bd12450d51bc7d4e1
cmd/compile: enable address folding for globals on ARM64, just not -dynlink mode

On ARM64, in -dynlink mode (building a shared library or a plugin),
accessing global variable is made using the GOT. Currently, the
GOT accessing instruction sequence our assembler generates doesn't
handle large offset well, so we don't fold the offset into loads
and stores in the compiler. Currently, the rewrite rules are
guarded with the -shared flag. However, the GOT access
instructions are only generated in the -dynlink mode (which
implies -shared, but not the other direction).

CL 445535 attempted to remove the guard althgether. But that
causes build failure for -dynlink mode for the reason above. This
CL changes it to guard specifically on -dynlink mode, allowing
the optimization in more cases (-shared but not -dynlink build
modes).

Updates #58826.

Change-Id: I1391db6a33e8d0455a304e7cae7fcfdeb49bfdab
Reviewed-on: https://go-review.googlesource.com/c/go/+/473999
Run-TryBot: Cherry Mui <cherryyz@google.com>
Reviewed-by: Keith Randall <khr@golang.org>
Reviewed-by: Keith Randall <khr@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
src/cmd/compile/internal/ssa/_gen/ARM64.rules
src/cmd/compile/internal/ssa/rewriteARM64.go
test/fixedbugs/issue58826.go [new file with mode: 0644]