...

Package liveness

import "cmd/compile/internal/liveness"
Overview
Index

Overview ▾

func ArgLiveness

func ArgLiveness(fn *ir.Func, f *ssa.Func, pp *objw.Progs) (blockIdx, valueIdx map[ssa.ID]int)

ArgLiveness computes the liveness information of register argument spill slots. An argument's spill slot is "live" if we know it contains a meaningful value, that is, we have stored the register value to it. Returns the liveness map indices at each Block entry and at each Value (where it changes).

func IsUnsafe

func IsUnsafe(f *ssa.Func) bool

IsUnsafe indicates that all points in this function are unsafe-points.

func WriteFuncMap

func WriteFuncMap(fn *ir.Func, abiInfo *abi.ABIParamResultInfo)

WriteFuncMap writes the pointer bitmaps for bodyless function fn's inputs and outputs as the value of symbol <fn>.args_stackmap. If fn has outputs, two bitmaps are written, otherwise just one.

type Map

Map maps from *ssa.Value to StackMapIndex. Also keeps track of unsafe ssa.Values and ssa.Blocks. (unsafe = can't be interrupted during GC.)

type Map struct {
    Vals         map[ssa.ID]objw.StackMapIndex
    UnsafeVals   map[ssa.ID]bool
    UnsafeBlocks map[ssa.ID]bool
    // The set of live, pointer-containing variables at the DeferReturn
    // call (only set when open-coded defers are used).
    DeferReturn objw.StackMapIndex
}

func Compute

func Compute(curfn *ir.Func, f *ssa.Func, stkptrsize int64, pp *objw.Progs) (Map, map[*ir.Name]bool)

Entry pointer for Compute analysis. Solves for the Compute of pointer variables in the function and emits a runtime data structure read by the garbage collector. Returns a map from GC safe points to their corresponding stack map index, and a map that contains all input parameters that may be partially live.

func (Map) Get

func (m Map) Get(v *ssa.Value) objw.StackMapIndex

func (Map) GetUnsafe

func (m Map) GetUnsafe(v *ssa.Value) bool

func (Map) GetUnsafeBlock

func (m Map) GetUnsafeBlock(b *ssa.Block) bool