mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
cmd/compile: do not allow regalloc to LoadReg G register
On architectures where G is stored in a register, it is possible for a variable to allocated to it, and subsequently that variable may be spilled and reloaded, for example because of an intervening call. If such an allocation reaches a join point and it is the primary predecessor, it becomes the target of a reload, which is only usually right. Fix: guard all the LoadReg ops, and spill value in the G register (if any) before merges (in the same way that 387 FP registers are freed between blocks). Includes test. Fixes #25504. Change-Id: I0482a53e20970c7315bf09c0e407ae5bba2fe05d Reviewed-on: https://go-review.googlesource.com/114695 Run-TryBot: David Chase <drchase@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Keith Randall <khr@golang.org>
This commit is contained in:
parent
d5bc3b96c6
commit
31e1c30f55
3 changed files with 67 additions and 0 deletions
|
|
@ -28,6 +28,7 @@ var testCtxts = map[string]*obj.Link{
|
|||
|
||||
func testConfig(tb testing.TB) *Conf { return testConfigArch(tb, "amd64") }
|
||||
func testConfigS390X(tb testing.TB) *Conf { return testConfigArch(tb, "s390x") }
|
||||
func testConfigARM64(tb testing.TB) *Conf { return testConfigArch(tb, "arm64") }
|
||||
|
||||
func testConfigArch(tb testing.TB, arch string) *Conf {
|
||||
ctxt, ok := testCtxts[arch]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue