mirror of https://github.com/golang/go.git
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:
parent
3e77efc720
commit
8354f6b5bb
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue