= SSASimplify

The optimization passes for the <<SSA#>> <<IntermediateLanguage#>> are
collected and controlled by the `Simplify` functor
(https://github.com/MLton/mlton/blob/master/mlton/ssa/simplify.sig[`simplify.sig`],
https://github.com/MLton/mlton/blob/master/mlton/ssa/simplify.fun[`simplify.fun`]).

The following optimization passes are implemented:

* <<CombineConversions#>>
* <<CommonArg#>>
* <<CommonBlock#>>
* <<CommonSubexp#>>
* <<ConstantPropagation#>>
* <<Contify#>>
* <<DuplicateGlobals#>>
* <<Flatten#>>
* <<Inline#>>
* <<IntroduceLoops#>>
* <<KnownCase#>>
* <<LocalFlatten#>>
* <<LocalRef#>>
* <<LoopInvariant#>>
* <<LoopUnroll#>>
* <<LoopUnswitch#>>
* <<Redundant#>>
* <<RedundantTests#>>
* <<RemoveUnused#>>
* <<ShareZeroVec#>>
* <<SimplifyTypes#>>
* <<SplitTypes#>>
* <<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
