cmd/compile: use a boolean as a avoid clobbering flags mov marker

The Value type implements Aux interface because it is being used as a
"avoid clobbering flags" marker by amd64, x86 and s390x SSA parts.

Create a boolean that implements the Aux interface. Use it as the marker
instead. We no longer need Value to implement Aux.

Resolves a TODO.

See CL 275756 for more info.

Change-Id: I8a1eddf7e738b8aa31e82f3c4c590bafd2cdc56b
Reviewed-on: https://go-review.googlesource.com/c/go/+/461156
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Keith Randall <khr@google.com>
Run-TryBot: Jakub Ciolek <jakub@ciolek.dev>
Reviewed-by: Keith Randall <khr@golang.org>
Reviewed-by: Cherry Mui <cherryyz@google.com>
This commit is contained in:
Jakub Ciolek 2023-01-10 08:36:00 +01:00 committed by Keith Randall
parent 3e77efc720
commit 8354f6b5bb
5 changed files with 10 additions and 6 deletions

View File

@ -30,7 +30,7 @@ func ssaMarkMoves(s *ssagen.State, b *ssa.Block) {
v := b.Values[i]
if flive && (v.Op == ssa.OpAMD64MOVLconst || v.Op == ssa.OpAMD64MOVQconst) {
// The "mark" is any non-nil Aux value.
v.Aux = v
v.Aux = ssa.AuxMark
}
if v.Type.IsFlags() {
flive = false

View File

@ -26,7 +26,7 @@ func ssaMarkMoves(s *ssagen.State, b *ssa.Block) {
v := b.Values[i]
if flive && v.Op == ssa.OpS390XMOVDconst {
// The "mark" is any non-nil Aux value.
v.Aux = v
v.Aux = ssa.AuxMark
}
if v.Type.IsFlags() {
flive = false

View File

@ -729,6 +729,13 @@ type Aux interface {
CanBeAnSSAAux()
}
// for now only used to mark moves that need to avoid clobbering flags
type auxMark bool
func (auxMark) CanBeAnSSAAux() {}
var AuxMark auxMark
// stringAux wraps string values for use in Aux.
type stringAux string

View File

@ -554,9 +554,6 @@ func (v *Value) removeable() bool {
return true
}
// TODO(mdempsky): Shouldn't be necessary; see discussion at golang.org/cl/275756
func (*Value) CanBeAnSSAAux() {}
// AutoVar returns a *Name and int64 representing the auto variable and offset within it
// where v should be spilled.
func AutoVar(v *Value) (*ir.Name, int64) {

View File

@ -28,7 +28,7 @@ func ssaMarkMoves(s *ssagen.State, b *ssa.Block) {
v := b.Values[i]
if flive && v.Op == ssa.Op386MOVLconst {
// The "mark" is any non-nil Aux value.
v.Aux = v
v.Aux = ssa.AuxMark
}
if v.Type.IsFlags() {
flive = false