Documentation
¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
var LookupFunc = func(fullName string) (*ir.Func, error) { base.Fatalf("pgo.LookupMethodFunc not overridden") panic("unreachable") }
LookupFunc looks up a function or method in export data. It is expected to be overridden by package noder, to break a dependency cycle.
Functions ¶
func DirectCallee ¶
DirectCallee takes a function-typed expression and returns the underlying function that it refers to if statically known. Otherwise, it returns nil.
Equivalent to inline.inlCallee without calling CanInline on closures.
func NodeLineOffset ¶
NodeLineOffset returns the line offset of n in fn.
func WeightInPercentage ¶
WeightInPercentage converts profile weights to a percentage.
Types ¶
type CallSiteInfo ¶
type CallSiteInfo struct {
LineOffset int // Line offset from function start line.
Caller *ir.Func
Callee *ir.Func
}
CallSiteInfo captures call-site information and its caller/callee.
type IREdge ¶
type IREdge struct {
// Source and destination of the edge in IRNode.
Src, Dst *IRNode
Weight int64
CallSiteOffset int // Line offset from function start line.
}
IREdge represents a call edge in the IRGraph with source, destination, weight, callsite, and line number information.
type IRGraph ¶
type IRGraph struct {
// Nodes of the graph. Each node represents a function, keyed by linker
// symbol name.
IRNodes map[string]*IRNode
}
IRGraph is a call graph with nodes pointing to IRs of functions and edges carrying weights and callsite information.
Nodes for indirect calls may have missing IR (IRNode.AST == nil) if the node is not visible from this package (e.g., not in the transitive deps). Keeping these nodes allows determining the hottest edge from a call even if that callee is not available.
TODO(prattmic): Consider merging this data structure with Graph. This is effectively a copy of Graph aggregated to line number and pointing to IR.
type IRNode ¶
type IRNode struct {
// Pointer to the IR of the Function represented by this node.
AST *ir.Func
// Linker symbol name of the Function represented by this node.
// Populated only if AST == nil.
LinkerSymbolName string
// Set of out-edges in the callgraph. The map uniquely identifies each
// edge based on the callsite and callee, for fast lookup.
OutEdges map[NamedCallEdge]*IREdge
}
IRNode represents a node (function) in the IRGraph.
type NamedCallEdge ¶ added in v1.22.0
type NamedCallEdge struct {
CallerName string
CalleeName string
CallSiteOffset int // Line offset from function start line.
}
NamedCallEdge identifies a call edge by linker symbol names and call site offset.
type NamedEdgeMap ¶ added in v1.22.0
type NamedEdgeMap struct {
Weight map[NamedCallEdge]int64
// ByWeight lists all keys in Weight, sorted by edge weight.
ByWeight []NamedCallEdge
}
NamedEdgeMap contains all unique call edges in the profile and their edge weight.
type Profile ¶
type Profile struct {
// Aggregated edge weights across the profile. This helps us determine
// the percentage threshold for hot/cold partitioning.
TotalWeight int64
// NamedEdgeMap contains all unique call edges in the profile and their
// edge weight.
NamedEdgeMap NamedEdgeMap
// WeightedCG represents the IRGraph built from profile, which we will
// update as part of inlining.
WeightedCG *IRGraph
}
Profile contains the processed PGO profile and weighted call graph used for PGO optimizations.
func (*Profile) PrintWeightedCallGraphDOT ¶
PrintWeightedCallGraphDOT prints IRGraph in DOT format.