package inline

import "cmd/compile/internal/inline"

Index

Variables

var InlineCall = func(callerfn *ir.Func, call *ir.CallExpr, fn *ir.Func, inlIndex int) *ir.InlinedCallExpr {
	base.Fatalf("inline.InlineCall not overridden")
	panic("unreachable")
}

InlineCall allows the inliner implementation to be overridden. If it returns nil, the function will not be inlined.

var SSADumpInline = func(*ir.Func) {}

SSADumpInline gives the SSA back end a chance to dump the function when producing output for debugging the compiler itself.

Functions

func CalleeEffects

func CalleeEffects(init *ir.Nodes, callee ir.Node)

CalleeEffects appends any side effects from evaluating callee to init.

func CanInline

func CanInline(fn *ir.Func, profile *pgo.Profile)

CanInline determines whether fn is inlineable. If so, CanInline saves copies of fn.Body and fn.Dcl in fn.Inl. fn and fn.Body will already have been typechecked.

func CanInlineFuncs

func CanInlineFuncs(funcs []*ir.Func, profile *pgo.Profile)

CanInlineFuncs computes whether a batch of functions are inlinable.

func CanInlineSCC

func CanInlineSCC(funcs []*ir.Func, recursive bool, profile *pgo.Profile)

CanInlineSCC computes the inlinability of functions within an SCC (strongly connected component).

CanInlineSCC is designed to be used by ir.VisitFuncsBottomUp callbacks.

func GarbageCollectUnreferencedHiddenClosures

func GarbageCollectUnreferencedHiddenClosures()

GarbageCollectUnreferencedHiddenClosures makes a pass over all the top-level (non-hidden-closure) functions looking for nested closure functions that are reachable, then sweeps through the Target.Decls list and marks any non-reachable hidden closure function as dead. See issues #59404 and #59638 for more context.

func InlineImpossible

func InlineImpossible(fn *ir.Func) string

InlineImpossible returns a non-empty reason string if fn is impossible to inline regardless of cost or contents.

func IsBigFunc

func IsBigFunc(fn *ir.Func) bool

IsBigFunc reports whether fn is a "big" function.

Note: The criteria for "big" is heuristic and subject to change.

func PGOInlinePrologue

func PGOInlinePrologue(p *pgo.Profile, funcs []*ir.Func)

PGOInlinePrologue records the hot callsites from ir-graph.

func PostProcessCallSites

func PostProcessCallSites(profile *pgo.Profile)

func TryInlineCall

func TryInlineCall(callerfn *ir.Func, call *ir.CallExpr, bigCaller bool, profile *pgo.Profile) *ir.InlinedCallExpr

TryInlineCall returns an inlined call expression for call, or nil if inlining is not possible.

Source Files

inl.go

Directories

PathSynopsis
cmd/compile/internal/inline/inlheur
cmd/compile/internal/inline/interleavedPackage interleaved implements the interleaved devirtualization and inlining pass.
Version
v1.22.6
Published
Jul 31, 2024
Platform
js/wasm
Imports
12 packages
Last checked
2 minutes ago

Tools for package owners.