SSA destruction compiler pass. It is preceded by
compiler.cfg.save-contexts and followed by
compiler.cfg.linear-scan.
Because of the design of the register allocator, this pass has three peculiar properties.
• | Instead of renaming vreg usages in the CFG, a map from vregs to canonical representatives is computed. This allows the register allocator to use the original SSA names to get reaching definitions. See leader-map. |
• | Useless ##copy instructions, and all ##phi instructions, are eliminated, so the register allocator does not have to remove any redundant operations. |
• | This pass computes live sets and fills out the gc-roots slots of GC maps with compiler.cfg.liveness, so the linear scan register allocator does not need to compute liveness again. |
Main entry point:
destruct-ssa ( cfg -- )