package devirtualize
import "cmd/compile/internal/devirtualize"
Package devirtualize implements two "devirtualization" optimization passes:
- "Static" devirtualization which replaces interface method calls with direct concrete-type method calls where possible.
- "Profile-guided" devirtualization which replaces indirect calls with a conditional direct call to the hottest concrete callee from a profile, as well as a fallback using the original indirect call.
Index ¶
Functions ¶
func ProfileGuided ¶
ProfileGuided performs call devirtualization of indirect calls based on profile information.
Specifically, it performs conditional devirtualization of interface calls for the hottest callee. That is, it performs a transformation like:
type Iface interface { Foo() } type Concrete struct{} func (Concrete) Foo() {} func foo(i Iface) { i.Foo() }
to:
func foo(i Iface) { if c, ok := i.(Concrete); ok { c.Foo() } else { i.Foo() } }
The primary benefit of this transformation is enabling inlining of the direct call.
func Static ¶
Static devirtualizes calls within fn where possible when the concrete callee is available statically.
Types ¶
type CallStat ¶
type CallStat struct { Pkg string // base.Ctxt.Pkgpath Pos string // file:line:col of call. Caller string // Linker symbol name of calling function. // Direct or indirect call. Direct bool // For indirect calls, interface call or other indirect function call. Interface bool // Total edge weight from this call site. Weight int64 // Hottest callee from this call site, regardless of type // compatibility. Hottest string HottestWeight int64 // Devirtualized callee if != "". // // Note that this may be different than Hottest because we apply // type-check restrictions, which helps distinguish multiple calls on // the same line. Devirtualized string DevirtualizedWeight int64 }
CallStat summarizes a single call site.
This is used only for debug logging.
Source Files ¶
- Version
- v1.21.8
- Published
- Feb 29, 2024
- Platform
- linux/amd64
- Imports
- 11 packages
- Last checked
- 53 seconds ago –
Tools for package owners.