SSASimplify
===========

The optimization passes for the <:SSA:> <:IntermediateLanguage:> are
collected and controlled by the `Simplify` functor
(<!ViewGitFile(mlton,master,mlton/ssa/simplify.sig)>,
<!ViewGitFile(mlton,master,mlton/ssa/simplify.fun)>).

The following optimization passes are implemented:

* <:CombineConversions:>
* <:CommonArg:>
* <:CommonBlock:>
* <:CommonSubexp:>
* <:ConstantPropagation:>
* <:Contify:>
* <:Flatten:>
* <:Inline:>
* <:IntroduceLoops:>
* <:KnownCase:>
* <:LocalFlatten:>
* <:LocalRef:>
* <:LoopInvariant:>
* <:LoopUnfoll:>
* <:LoopUnswitch:>
* <:Redundant:>
* <:RedundantTests:>
* <:RemoveUnused:>
* <:ShareZeroVec:>
* <:SimplifyTypes:>
* <:Useless:>

The following implementation passes are implemented:

* <:PolyEqual:>
* <:PolyHash:>

There are additional analysis and rewrite passes that augment many of the other optimization passes:

* <:Multi:>
* <:Restore:>
* <:Shrink:>

The optimization passes can be controlled from the command-line by the options:

* `-diag-pass <pass>` -- keep diagnostic info for pass
* `-disable-pass <pass>` -- skip optimization pass (if normally performed)
* `-enable-pass <pass>` -- perform optimization pass (if normally skipped)
* `-keep-pass <pass>` -- keep the results of pass
* `-loop-passes <n>` -- loop optimization passes
* `-ssa-passes <passes>` -- ssa optimization passes
