aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/compile/internal/ssa/schedule.go
diff options
context:
space:
mode:
authorCherry Zhang <cherryyz@google.com>2021-03-31 10:27:06 -0400
committerCherry Zhang <cherryyz@google.com>2021-03-31 18:01:39 +0000
commitcb42e3e979830ccaac72d02512f522a820c6a5e7 (patch)
tree31229b2ff7fc0ccd5f1a9a0ab34654bff912c315 /src/cmd/compile/internal/ssa/schedule.go
parent46fa8afca61cf60c64f006685cd6cbb94e080118 (diff)
downloadgo-cb42e3e979830ccaac72d02512f522a820c6a5e7.tar.gz
go-cb42e3e979830ccaac72d02512f522a820c6a5e7.zip
cmd/compile: schedule in-register OpArg first
OpArgXXXReg values must be scheduled at the very top, as their registers need to be live at the beginning before any other use of the register. Change-Id: Ic76768bb74da402adbe61db3b2d174ecd3f9fffc Reviewed-on: https://go-review.googlesource.com/c/go/+/306329 Trust: Cherry Zhang <cherryyz@google.com> Run-TryBot: Cherry Zhang <cherryyz@google.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Than McIntosh <thanm@google.com>
Diffstat (limited to 'src/cmd/compile/internal/ssa/schedule.go')
-rw-r--r--src/cmd/compile/internal/ssa/schedule.go9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/cmd/compile/internal/ssa/schedule.go b/src/cmd/compile/internal/ssa/schedule.go
index c987647131..4e3e5e75e3 100644
--- a/src/cmd/compile/internal/ssa/schedule.go
+++ b/src/cmd/compile/internal/ssa/schedule.go
@@ -137,7 +137,14 @@ func schedule(f *Func) {
case v.Op == OpVarDef:
// We want all the vardefs next.
score[v.ID] = ScoreVarDef
- case v.Op == OpArg || v.Op == OpArgIntReg || v.Op == OpArgFloatReg:
+ case v.Op == OpArgIntReg || v.Op == OpArgFloatReg:
+ // In-register args must be scheduled as early as possible to ensure that the
+ // context register is not stomped. They should only appear in the entry block.
+ if b != f.Entry {
+ f.Fatalf("%s appeared outside of entry block, b=%s", v.Op, b.String())
+ }
+ score[v.ID] = ScorePhi
+ case v.Op == OpArg:
// We want all the args as early as possible, for better debugging.
score[v.ID] = ScoreArg
case v.Type.IsMemory():