]> Cypherpunks.ru repositories - gostls13.git/commit
[dev.typeparams] cmd/compile: do not schedule in-register args late, even for block...
authorCherry Mui <cherryyz@google.com>
Tue, 25 May 2021 23:49:08 +0000 (19:49 -0400)
committerCherry Mui <cherryyz@google.com>
Wed, 26 May 2021 23:26:51 +0000 (23:26 +0000)
commitcf23daeda3792eb2ba07c30823d5a0c8667f5083
tree82eae11e0816ee98e061cf7a4303c48fcce4e143
parent4ed6317e735af24093b96077d1e813cc8b7dee6a
[dev.typeparams] cmd/compile: do not schedule in-register args late, even for block control

In the scheduler we have the logic that if a Value is used as the
block's control, we schedule it at the end, except for Phis and
Args. Even the comment says so, the code doesn't exclude
in-register Args (OpArgXXXReg).

Change to check for score instead, which includes OpArgXXXRegs.
It also includes GetClosurePtr, which must be scheduled early.
We just happen to never use it as block control.

Found when working on ARM64 register ABI. In theory this could
apply to AMD64 as well. But on AMD64 we never use in-register
Value as block control, as conditional branch is always based on
FLAGS, never based on registers, so it doesn't actually cause any
problem.

Change-Id: I167a550309772639574f7468caf91bd805eb74c6
Reviewed-on: https://go-review.googlesource.com/c/go/+/322849
Trust: Cherry Mui <cherryyz@google.com>
Run-TryBot: Cherry Mui <cherryyz@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Than McIntosh <thanm@google.com>
Reviewed-by: David Chase <drchase@google.com>
src/cmd/compile/internal/ssa/schedule.go