diff options
| author | Keith Randall <khr@golang.org> | 2018-10-09 22:55:36 -0700 |
|---|---|---|
| committer | Keith Randall <khr@golang.org> | 2018-10-14 02:54:40 +0000 |
| commit | 653a4bd8d46a8a329f37e8a9fc909c3bb92b02bc (patch) | |
| tree | 4eb2f815a285575b41770a484b94387a5568308e /test/codegen/strings.go | |
| parent | df459d5e6cc14532961875058f5d4ba3d04b5ed4 (diff) | |
| download | go-653a4bd8d46a8a329f37e8a9fc909c3bb92b02bc.tar.xz | |
cmd/compile: optimize loads from readonly globals into constants
Instead of
MOVB go.string."foo"(SB), AX
do
MOVB $102, AX
When we know the global we're loading from is readonly, we can
do that read at compile time.
I've made this arch-dependent mostly because the cases where this
happens often are memory->memory moves, and those don't get
decomposed until lowering.
Did amd64/386/arm/arm64. Other architectures could follow.
Update #26498
Change-Id: I41b1dc831b2cd0a52dac9b97f4f4457888a46389
Reviewed-on: https://go-review.googlesource.com/c/141118
Run-TryBot: Keith Randall <khr@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com>
Diffstat (limited to 'test/codegen/strings.go')
| -rw-r--r-- | test/codegen/strings.go | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/test/codegen/strings.go b/test/codegen/strings.go index f4adfac0cc..39ee2e8b9f 100644 --- a/test/codegen/strings.go +++ b/test/codegen/strings.go @@ -20,3 +20,30 @@ func ToByteSlice() []byte { // Issue #24698 // amd64:-`.*runtime.stringtoslicebyte` return []byte("foo") } + +// Loading from read-only symbols should get transformed into constants. +func ConstantLoad() { + // 12592 = 0x3130 + // 50 = 0x32 + // amd64:`MOVW\t\$12592, \(`,`MOVB\t\$50, 2\(` + // 386:`MOVW\t\$12592, \(`,`MOVB\t\$50, 2\(` + // arm:`MOVW\t\$48`,`MOVW\t\$49`,`MOVW\t\$50` + // arm64:`MOVD\t\$12592`,`MOVD\t\$50` + bsink = []byte("012") + + // 858927408 = 0x33323130 + // 13620 = 0x3534 + // amd64:`MOVL\t\$858927408`,`MOVW\t\$13620, 4\(` + // 386:`MOVL\t\$858927408`,`MOVW\t\$13620, 4\(` + // arm64:`MOVD\t\$858927408`,`MOVD\t\$13620` + bsink = []byte("012345") + + // 3978425819141910832 = 0x3736353433323130 + // 7306073769690871863 = 0x6564636261393837 + // amd64:`MOVQ\t\$3978425819141910832`,`MOVQ\t\$7306073769690871863` + // 386:`MOVL\t\$858927408, \(`,`DUFFCOPY` + // arm64:`MOVD\t\$3978425819141910832`,`MOVD\t\$1650538808`,`MOVD\t\$25699`,`MOVD\t\$101` + bsink = []byte("0123456789abcde") +} + +var bsink []byte |
