pgoir

package standard library
go1.23rc1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 21, 2024 License: BSD-3-Clause Imports: 8 Imported by: 0

Documentation

Overview

Package pgoir assosciates a PGO profile with the IR of the current package compilation.

Index

Constants

This section is empty.

Variables

View Source
var LookupFunc = func(fullName string) (*ir.Func, error) {
	base.Fatalf("pgoir.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.

View Source
var PostLookupCleanup = func() {
	base.Fatalf("pgoir.PostLookupCleanup not overridden")
	panic("unreachable")
}

PostLookupCleanup performs any remaining cleanup operations needed after a series of calls to LookupFunc, specifically reading in the bodies of functions that may have been delayed due being encountered in a stage where the reader's curfn state was not set up.

Functions

func DirectCallee

func DirectCallee(fn ir.Node) *ir.Func

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

func NodeLineOffset(n ir.Node, fn *ir.Func) int

NodeLineOffset returns the line offset of n in fn.

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[pgo.NamedCallEdge]*IREdge
}

IRNode represents a node (function) in the IRGraph.

func (*IRNode) Name

func (i *IRNode) Name() string

Name returns the symbol name of this function.

type Profile

type Profile struct {
	// Profile is the base data from the raw profile, without IR attribution.
	*pgo.Profile

	// 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 New

func New(profileFile string) (*Profile, error)

New generates a profile-graph from the profile or pre-processed profile.

func (*Profile) PrintWeightedCallGraphDOT

func (p *Profile) PrintWeightedCallGraphDOT(edgeThreshold float64)

PrintWeightedCallGraphDOT prints IRGraph in DOT format.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL