21 lines
1.3 KiB
Factor
21 lines
1.3 KiB
Factor
USING: compiler.cfg.instructions help.markup help.syntax ;
|
|
IN: compiler.cfg.liveness
|
|
|
|
HELP: fill-gc-map
|
|
{ $values { "live-set" "no idea" } { "insn" insn } }
|
|
{ $description "Assigns values to the " { $slot "gc-roots" } " and " { $slot "derived-roots" } " slots of an instructions " { $link gc-map } "." } ;
|
|
|
|
HELP: edge-live-ins
|
|
{ $var-description "Assoc mapping basic blocks to sequences of sets of vregs; each sequence is in correspondence with a predecessor." } ;
|
|
|
|
ARTICLE: "compiler.cfg.liveness" "Liveness analysis"
|
|
"Similar to http://en.wikipedia.org/wiki/Liveness_analysis, with three additions:"
|
|
$nl
|
|
{ $list
|
|
"With SSA, it is not sufficient to have a single live-in set per block. There is also an edge-live-in set per edge, consisting of phi inputs from each predecessor."
|
|
"Liveness analysis annotates call sites with GC maps indicating the spill slots in the stack frame that contain tagged pointers, and thus have to be visited if a GC occurs inside the call."
|
|
{ "GC maps can contain derived pointers. A derived pointer is a pointer into the middle of a data heap object. Each derived pointer has a base pointer, to keep it up to date when objects are moved by the garbage collector. This extends live intervals and inserts new " { $link ##phi } " instructions." }
|
|
} ;
|
|
|
|
ABOUT: "compiler.cfg.liveness"
|