From 3f8a6941553ae007638335cb6af0b6a702adf64f Mon Sep 17 00:00:00 2001 From: Cherry Mui Date: Fri, 18 Mar 2022 17:02:52 -0400 Subject: [PATCH] cmd/compile: remove regabi magic names When developing register ABI, for early testing the compiler recognized a few magic names to trigger enabling register ABI. After the development it is disabled (changed to a name that cannot be spelled in the source code). Later in the development of register ABI for ARM64 and PPC64, I don't think the magic names were used. I think they can now be removed. Keep the magic pragma for now in case it helps development. Change-Id: Icbc34e2786a80fd8fffe4a464c569dc03a54cd09 Reviewed-on: https://go-review.googlesource.com/c/go/+/393877 Trust: Cherry Mui Run-TryBot: Cherry Mui TryBot-Result: Gopher Robot Reviewed-by: David Chase --- src/cmd/compile/internal/ssagen/ssa.go | 53 -------------------------- 1 file changed, 53 deletions(-) diff --git a/src/cmd/compile/internal/ssagen/ssa.go b/src/cmd/compile/internal/ssagen/ssa.go index 60747d93ca..a214a1e8f9 100644 --- a/src/cmd/compile/internal/ssagen/ssa.go +++ b/src/cmd/compile/internal/ssagen/ssa.go @@ -224,11 +224,6 @@ func AbiForBodylessFuncStackMap(fn *ir.Func) *abi.ABIConfig { return ssaConfig.ABI0.Copy() // No idea what races will result, be safe } -// These are disabled but remain ready for use in case they are needed for the next regabi port. -// TODO if they are not needed for 1.18 / next register abi port, delete them. -const magicNameDotSuffix = ".*disabled*MagicMethodNameForTestingRegisterABI" -const magicLastTypeName = "*disabled*MagicLastTypeNameForTestingRegisterABI" - // abiForFunc implements ABI policy for a function, but does not return a copy of the ABI. // Passing a nil function returns the default ABI based on experiment configuration. func abiForFunc(fn *ir.Func, abi0, abi1 *abi.ABIConfig) *abi.ABIConfig { @@ -251,36 +246,13 @@ func abiForFunc(fn *ir.Func, abi0, abi1 *abi.ABIConfig) *abi.ABIConfig { a := abi0 if fn != nil { - name := ir.FuncName(fn) - magicName := strings.HasSuffix(name, magicNameDotSuffix) if fn.Pragma&ir.RegisterParams != 0 { // TODO(register args) remove after register abi is working - if strings.Contains(name, ".") { - if !magicName { - base.ErrorfAt(fn.Pos(), "Calls to //go:registerparams method %s won't work, remove the pragma from the declaration.", name) - } - } - a = abi1 - } else if magicName { - if base.FmtPos(fn.Pos()) == ":1" { - // no way to put a pragma here, and it will error out in the real source code if they did not do it there. - a = abi1 - } else { - base.ErrorfAt(fn.Pos(), "Methods with magic name %s (method %s) must also specify //go:registerparams", magicNameDotSuffix[1:], name) - } - } - if regAbiForFuncType(fn.Type().FuncType()) { - // fmt.Printf("Saw magic last type name for function %s\n", name) a = abi1 } } return a } -func regAbiForFuncType(ft *types.Func) bool { - np := ft.Params.NumFields() - return np > 0 && strings.Contains(ft.Params.FieldType(np-1).String(), magicLastTypeName) -} - // dvarint writes a varint v to the funcdata in symbol x and returns the new offset func dvarint(x *obj.LSym, off int, v int64) int { if v < 0 || v > 1e9 { @@ -4950,24 +4922,6 @@ func (s *state) call(n *ir.CallExpr, k callKind, returnResultAddr bool) *ssa.Val callABI := s.f.ABIDefault - if !buildcfg.Experiment.RegabiArgs { - var magicFnNameSym *types.Sym - if fn.Name() != nil { - magicFnNameSym = fn.Name().Sym() - ss := magicFnNameSym.Name - if strings.HasSuffix(ss, magicNameDotSuffix) { - callABI = s.f.ABI1 - } - } - if magicFnNameSym == nil && n.Op() == ir.OCALLINTER { - magicFnNameSym = fn.(*ir.SelectorExpr).Sym() - ss := magicFnNameSym.Name - if strings.HasSuffix(ss, magicNameDotSuffix[1:]) { - callABI = s.f.ABI1 - } - } - } - if k != callNormal && k != callTail && (len(n.Args) != 0 || n.Op() == ir.OCALLINTER || n.X.Type().NumResults() != 0) { s.Fatalf("go/defer call with arguments: %v", n) } @@ -5016,13 +4970,6 @@ func (s *state) call(n *ir.CallExpr, k callKind, returnResultAddr bool) *ssa.Val } } - if !buildcfg.Experiment.RegabiArgs { - if regAbiForFuncType(n.X.Type().FuncType()) { - // Magic last type in input args to call - callABI = s.f.ABI1 - } - } - params := callABI.ABIAnalyze(n.X.Type(), false /* Do not set (register) nNames from caller side -- can cause races. */) types.CalcSize(fn.Type()) stksize := params.ArgWidth() // includes receiver, args, and results -- 2.50.0