1
0
mirror of https://github.com/golang/go synced 2024-11-23 14:50:07 -07:00

cmd/compile: ensure register args come before on-stack args in schedule

The register allocator doesn't like OpArg coming in between other
OpIntArg operations, as it doesn't put the spills in the right place
in that situation.

This is just a bug in the new scheduler, I didn't copy over the
proper score from the old scheduler correctly.

Change-Id: I3b4ee1754982fb360e99c5864b19e7408d60b5bc
Reviewed-on: https://go-review.googlesource.com/c/go/+/462858
Run-TryBot: Keith Randall <khr@golang.org>
Reviewed-by: Cherry Mui <cherryyz@google.com>
Reviewed-by: Keith Randall <khr@google.com>
Auto-Submit: Keith Randall <khr@golang.org>
TryBot-Result: Gopher Robot <gobot@golang.org>
This commit is contained in:
Keith Randall 2023-01-20 10:36:19 -08:00 committed by Gopher Robot
parent f07910bd57
commit b08d5ee5e9

View File

@ -135,7 +135,7 @@ func schedule(f *Func) {
if b != f.Entry { if b != f.Entry {
f.Fatalf("%s appeared outside of entry block, b=%s", v.Op, b.String()) f.Fatalf("%s appeared outside of entry block, b=%s", v.Op, b.String())
} }
score[v.ID] = ScoreArg score[v.ID] = ScorePhi
case v.Op == OpArg: case v.Op == OpArg:
// We want all the args as early as possible, for better debugging. // We want all the args as early as possible, for better debugging.
score[v.ID] = ScoreArg score[v.ID] = ScoreArg