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.