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
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
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.
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.