What do c2 Phases do?


On the Forums, someone asked the good question of "What do the C2 phases actually do?"  Andy got some info from our documentation team about the phases, so I thought I'd also add them here.  Expect this info in future version of the SDK:


 











































































































Phase


Phase Action


CxxIL Reader


Converts CxxIL to Phoenix IR.


Warnings Analysis Detection Phase


Detects and emits back-end warnings (C4700, C4701, and so on).


Add CallGraph Call Site Information


Modifies call graph (if present) to refer to specific call sites within the function.


Inliner


Inlines functions.


Type Checker


Verifies that IR is correctly typed.


Flow Optimization


Streamlines control flow (for example, eliminates jumps to jumps).


MIR Lower


Lowers object model instructions.


Loop recognition and loop transformations


Performs basic loop restructuring.


Global optimization


Performs optimizations such as constant propagation, global value numbering, constant subexpression elimination, and dead code elimination.


Loop optimizations


Recognizes induction variables for strength reduction and loop-invariant code motion.


GS Shadow Copying


Implements the /GS option (stack security).


GS Security Cookie Allocation


Implements the /GS option (stack security).


X86 scalar Sse


Prepares the compiler to use SSE floating point instead of x87 floating point.


Canonicalize


Transforms IR to canonical form in preparation for lowering.


ShiftExpansion Strength Reduction


Transform multiplications and divisions by constants into shifts and additions.


Address Mode Builder


Transforms HIR/MIR to take advantage of target architecture's built-in addressing modes.


Lower


Lowers most instructions to machine level.


SSA-based idioms optimization phase


Performs classic "peephole" optimizations.


Priority Order Register Allocation


Assigns registers to operands.


X87 Stack Allocation


Allocates the x87 stack.


GS Security Cookie Initialization and Check


Implements the /GS option (stack security).


Native EH Lower


Expresses exception handling the way that the run-time convention expects.


Stack Packer


Assigns stack locations to operands.


Frame Generation


Determines shape of stack frame for the function.


Switch Lower


Lowers switch instructions.


Dead Stores


Removes dead stores (that is, stores that are guaranteed not to be read).


Block Layout


Places IR in final order.


Flow Optimization


Removes jump-to-jump and jump-to-next instructions.


Finish EH Lower


Finishes the process begun by Native EH Lower.


Encoding


Produces machine encoding for IR, and debug information.


Emission


Puts encoded IR into the object file.


Emit Referenced Symbols


Verifies the references made from the encoded IR to ensure that the compiler emits a fully closed set of functions and data.


Assembly Listing


Produces the .asm listing file.


Skip to main content