DeepFlatten is an optimization pass for the SSA2 IntermediateLanguage, invoked from SSA2Simplify.
Description
This pass flattens into mutable fields of objects and into vectors.
For example, an (int * int) ref
is represented by a 2 word
object, and an (int * int) array
contains pairs of int
-s,
rather than pointers to pairs of int
-s.
Implementation
Details and Notes
There are some performance issues with the deep flatten pass, where it consumes an excessive amount of memory.
A number of applications require compilation with
-disable-pass deepFlatten
to avoid exceeding available memory. It is
often asked whether the deep flatten pass usually has a significant
impact on performance. The standard benchmark suite was run with and
without the deep flatten pass enabled when the pass was first
introduced:
The conclusion is that it does not have a significant impact. However, these are micro benchmarks; other applications may derive greater benefit from the pass.