mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
[dev.regabi] cmd/compile: add ssa.Aux tag interface for Value.Aux
It's currently hard to automate refactorings around the Value.Aux field, because we don't have any static typing information for it. Adding a tag interface will make subsequent CLs easier and safer. Passes buildall w/ toolstash -cmp. Updates #42982. Change-Id: I41ae8e411a66bda3195a0957b60c2fe8a8002893 Reviewed-on: https://go-review.googlesource.com/c/go/+/275756 Run-TryBot: Matthew Dempsky <mdempsky@google.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Keith Randall <khr@golang.org> Trust: Matthew Dempsky <mdempsky@google.com>
This commit is contained in:
parent
63722da46b
commit
1a98ab0e2d
20 changed files with 80 additions and 57 deletions
|
|
@ -678,43 +678,53 @@ func opToAuxInt(o Op) int64 {
|
|||
return int64(o)
|
||||
}
|
||||
|
||||
func auxToString(i interface{}) string {
|
||||
return i.(string)
|
||||
// Aux is an interface to hold miscellaneous data in Blocks and Values.
|
||||
type Aux interface {
|
||||
CanBeAnSSAAux()
|
||||
}
|
||||
func auxToSym(i interface{}) Sym {
|
||||
|
||||
// stringAux wraps string values for use in Aux.
|
||||
type stringAux string
|
||||
|
||||
func (stringAux) CanBeAnSSAAux() {}
|
||||
|
||||
func auxToString(i Aux) string {
|
||||
return string(i.(stringAux))
|
||||
}
|
||||
func auxToSym(i Aux) Sym {
|
||||
// TODO: kind of a hack - allows nil interface through
|
||||
s, _ := i.(Sym)
|
||||
return s
|
||||
}
|
||||
func auxToType(i interface{}) *types.Type {
|
||||
func auxToType(i Aux) *types.Type {
|
||||
return i.(*types.Type)
|
||||
}
|
||||
func auxToCall(i interface{}) *AuxCall {
|
||||
func auxToCall(i Aux) *AuxCall {
|
||||
return i.(*AuxCall)
|
||||
}
|
||||
func auxToS390xCCMask(i interface{}) s390x.CCMask {
|
||||
func auxToS390xCCMask(i Aux) s390x.CCMask {
|
||||
return i.(s390x.CCMask)
|
||||
}
|
||||
func auxToS390xRotateParams(i interface{}) s390x.RotateParams {
|
||||
func auxToS390xRotateParams(i Aux) s390x.RotateParams {
|
||||
return i.(s390x.RotateParams)
|
||||
}
|
||||
|
||||
func stringToAux(s string) interface{} {
|
||||
func StringToAux(s string) Aux {
|
||||
return stringAux(s)
|
||||
}
|
||||
func symToAux(s Sym) Aux {
|
||||
return s
|
||||
}
|
||||
func symToAux(s Sym) interface{} {
|
||||
func callToAux(s *AuxCall) Aux {
|
||||
return s
|
||||
}
|
||||
func callToAux(s *AuxCall) interface{} {
|
||||
return s
|
||||
}
|
||||
func typeToAux(t *types.Type) interface{} {
|
||||
func typeToAux(t *types.Type) Aux {
|
||||
return t
|
||||
}
|
||||
func s390xCCMaskToAux(c s390x.CCMask) interface{} {
|
||||
func s390xCCMaskToAux(c s390x.CCMask) Aux {
|
||||
return c
|
||||
}
|
||||
func s390xRotateParamsToAux(r s390x.RotateParams) interface{} {
|
||||
func s390xRotateParamsToAux(r s390x.RotateParams) Aux {
|
||||
return r
|
||||
}
|
||||
|
||||
|
|
@ -725,7 +735,7 @@ func uaddOvf(a, b int64) bool {
|
|||
|
||||
// de-virtualize an InterCall
|
||||
// 'sym' is the symbol for the itab
|
||||
func devirt(v *Value, aux interface{}, sym Sym, offset int64) *AuxCall {
|
||||
func devirt(v *Value, aux Aux, sym Sym, offset int64) *AuxCall {
|
||||
f := v.Block.Func
|
||||
n, ok := sym.(*obj.LSym)
|
||||
if !ok {
|
||||
|
|
@ -748,7 +758,7 @@ func devirt(v *Value, aux interface{}, sym Sym, offset int64) *AuxCall {
|
|||
|
||||
// de-virtualize an InterLECall
|
||||
// 'sym' is the symbol for the itab
|
||||
func devirtLESym(v *Value, aux interface{}, sym Sym, offset int64) *obj.LSym {
|
||||
func devirtLESym(v *Value, aux Aux, sym Sym, offset int64) *obj.LSym {
|
||||
n, ok := sym.(*obj.LSym)
|
||||
if !ok {
|
||||
return nil
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue