1
0
mirror of https://github.com/golang/go synced 2024-11-17 20:54:48 -07:00

cmd/compile/internal/ir: remove AsNode

Except for a single call site in escape analysis, every use of
ir.AsNode involves a types.Object that's known to contain
an *ir.Name. Asserting directly to that type makes the code simpler
and more efficient.

The one use in escape analysis is extended to handle nil correctly
without it.

Change-Id: I694ae516903e541341d82c2f65a9155e4b0a9809
Reviewed-on: https://go-review.googlesource.com/c/go/+/520775
TryBot-Bypass: Matthew Dempsky <mdempsky@google.com>
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
Auto-Submit: Matthew Dempsky <mdempsky@google.com>
Reviewed-by: Cuong Manh Le <cuong.manhle.vn@gmail.com>
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
This commit is contained in:
Matthew Dempsky 2023-08-18 00:09:06 -07:00 committed by Gopher Robot
parent 4089b6a5b1
commit 7af28fa90e
6 changed files with 13 additions and 17 deletions

View File

@ -321,7 +321,10 @@ func (e *escape) tagHole(ks []hole, fn *ir.Name, param *types.Field) hole {
}
if e.inMutualBatch(fn) {
return e.addr(ir.AsNode(param.Nname))
if param.Nname == nil {
return e.discardHole()
}
return e.addr(param.Nname.(*ir.Name))
}
// Call to previously tagged function.

View File

@ -1110,7 +1110,7 @@ func IsReflectHeaderDataField(l Node) bool {
func ParamNames(ft *types.Type) []Node {
args := make([]Node, ft.NumParams())
for i, f := range ft.Params().FieldSlice() {
args[i] = AsNode(f.Nname)
args[i] = f.Nname.(*Name)
}
return args
}

View File

@ -462,13 +462,6 @@ const (
)
func AsNode(n types.Object) Node {
if n == nil {
return nil
}
return n.(Node)
}
var BlankNode *Name
func IsConst(n Node, ct constant.Kind) bool {

View File

@ -153,8 +153,8 @@ func hashFunc(t *types.Type) *ir.Func {
sym.Def = fn.Nname
fn.Pragma |= ir.Noinline // TODO(mdempsky): We need to emit this during the unified frontend instead, to allow inlining.
np := ir.AsNode(fn.Type().Params().Field(0).Nname)
nh := ir.AsNode(fn.Type().Params().Field(1).Nname)
np := fn.Type().Params().Field(0).Nname.(*ir.Name)
nh := fn.Type().Params().Field(1).Nname.(*ir.Name)
switch t.Kind() {
case types.TARRAY:
@ -375,9 +375,9 @@ func eqFunc(t *types.Type) *ir.Func {
sym.Def = fn.Nname
fn.Pragma |= ir.Noinline // TODO(mdempsky): We need to emit this during the unified frontend instead, to allow inlining.
np := ir.AsNode(fn.Type().Params().Field(0).Nname)
nq := ir.AsNode(fn.Type().Params().Field(1).Nname)
nr := ir.AsNode(fn.Type().Results().Field(0).Nname)
np := fn.Type().Params().Field(0).Nname.(*ir.Name)
nq := fn.Type().Params().Field(1).Nname.(*ir.Name)
nr := fn.Type().Results().Field(0).Nname.(*ir.Name)
// Label to jump to if an equality test fails.
neq := typecheck.AutoLabel(".neq")

View File

@ -76,7 +76,7 @@ func tokenize(src string) []string {
}
func verifyParamResultOffset(t *testing.T, f *types.Field, r abi.ABIParamAssignment, which string, idx int) int {
n := ir.AsNode(f.Nname).(*ir.Name)
n := f.Nname.(*ir.Name)
if n.FrameOffset() != int64(r.Offset()) {
t.Errorf("%s %d: got offset %d wanted %d t=%v",
which, idx, r.Offset(), n.Offset_, f.Type)

View File

@ -16,7 +16,7 @@ func LookupRuntime(name string) *ir.Name {
if s == nil || s.Def == nil {
base.Fatalf("LookupRuntime: can't find runtime.%s", name)
}
return ir.AsNode(s.Def).(*ir.Name)
return s.Def.(*ir.Name)
}
// SubstArgTypes substitutes the given list of types for
@ -126,5 +126,5 @@ func LookupCoverage(name string) *ir.Name {
if sym == nil {
base.Fatalf("LookupCoverage: can't find runtime/coverage.%s", name)
}
return ir.AsNode(sym.Def).(*ir.Name)
return sym.Def.(*ir.Name)
}