diff options
Diffstat (limited to 'src/cmd/compile/internal/devirtualize')
| -rw-r--r-- | src/cmd/compile/internal/devirtualize/pgo.go | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/cmd/compile/internal/devirtualize/pgo.go b/src/cmd/compile/internal/devirtualize/pgo.go index 0a43135420..783940cbc2 100644 --- a/src/cmd/compile/internal/devirtualize/pgo.go +++ b/src/cmd/compile/internal/devirtualize/pgo.go @@ -364,11 +364,15 @@ func constructCallStat(p *pgoir.Profile, fn *ir.Func, name string, call *ir.Call return e.Dst.Name() < stat.Hottest } + callerNode := p.WeightedCG.IRNodes[name] + if callerNode == nil { + return nil + } + // Sum of all edges from this callsite, regardless of callee. // For direct calls, this should be the same as the single edge // weight (except for multiple calls on one line, which we // can't distinguish). - callerNode := p.WeightedCG.IRNodes[name] for _, edge := range callerNode.OutEdges { if edge.CallSiteOffset != offset { continue @@ -656,6 +660,10 @@ func findHotConcreteCallee(p *pgoir.Profile, caller *ir.Func, call *ir.CallExpr, callerNode := p.WeightedCG.IRNodes[callerName] callOffset := pgoir.NodeLineOffset(call, caller) + if callerNode == nil { + return nil, 0 + } + var hottest *pgoir.IREdge // Returns true if e is hotter than hottest. |
