MLton 20210117

# SSASimplify

The optimization passes for the SSA IntermediateLanguage are collected and controlled by the Simplify functor (simplify.sig, simplify.fun).

The following optimization passes are implemented:

- CombineConversions

- CommonArg

- CommonBlock

- CommonSubexp

- ConstantPropagation

- Contify

- DuplicateGlobals

- Flatten

- Inline

- IntroduceLoops

- KnownCase

- LocalFlatten

- LocalRef

- LoopInvariant

- LoopUnfoll

- 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