CommonBlock is an optimization pass for the SSA IntermediateLanguage, invoked from SSASimplify.
Description
It eliminates equivalent blocks in a SSA function.  The
equivalence criteria requires blocks to have no arguments or
statements and transfer via Raise, Return, or Goto of a single
global variable.
Implementation
Details and Notes
- 
Rewrites
L_X () raise (global_Y)
to
L_X () L_Y' ()
and adds
L_Y' () raise (global_Y)
to the SSA function.
 - 
Rewrites
L_X () return (global_Y)
to
L_X () L_Y' ()
and adds
L_Y' () return (global_Y)
to the SSA function.
 - 
Rewrites
L_X () L_Z (global_Y)
to
L_X () L_Y' ()
and adds
L_Y' () L_Z (global_Y)
to the SSA function.
 
The Shrink pass rewrites all uses of L_X to L_Y' and drops L_X.
For example, all uncaught Overflow exceptions in a SSA function
share the same raising block.