9916feeddf
Transform (ADDQconst SP) into (LEA SP), because lea is rematerializeable, so this avoids register spill. We can't mark ADDQconst as rematerializeable, because it clobbers flags. This makes go binary ~2kb smaller. For reference here is generated code for function from bug report. Before: CALL "".g(SB) MOVBLZX (SP), AX LEAQ 8(SP), DI TESTB AX, AX JEQ 15 MOVQ "".p(SP), SI DUFFCOPY $196 MOVQ $0, (SP) PCDATA $0, $1 CALL "".h(SB) RET MOVQ DI, ""..autotmp_2-8(SP) // extra spill PCDATA $0, $2 CALL "".g(SB) MOVQ ""..autotmp_2-8(SP), DI // extra register fill MOVQ "".p(SP), SI DUFFCOPY $196 MOVQ $1, (SP) PCDATA $0, $1 CALL "".h(SB) JMP 14 END After: CALL "".g(SB) MOVBLZX (SP), AX TESTB AX, AX JEQ 15 LEAQ 8(SP), DI MOVQ "".p(SP), SI DUFFCOPY $196 MOVQ $0, (SP) PCDATA $0, $1 CALL "".h(SB) RET PCDATA $0, $0 // no spill CALL "".g(SB) LEAQ 8(SP), DI // rematerialized instead MOVQ "".p(SP), SI DUFFCOPY $196 MOVQ $1, (SP) PCDATA $0, $1 CALL "".h(SB) JMP 14 END Fixes #22947 Change-Id: I8f33b860dc6c8828373477171b172ca2ce30074f Reviewed-on: https://go-review.googlesource.com/81815 Run-TryBot: Ilya Tocar <ilya.tocar@intel.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Keith Randall <khr@golang.org> |
||
---|---|---|
.github | ||
api | ||
doc | ||
lib/time | ||
misc | ||
src | ||
test | ||
.gitattributes | ||
.gitignore | ||
AUTHORS | ||
CONTRIBUTING.md | ||
CONTRIBUTORS | ||
favicon.ico | ||
LICENSE | ||
PATENTS | ||
README.md | ||
robots.txt |
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 hundreds 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.