Enabling transformation

In computer science, an enabling transformation is a compiler optimization that increases the effectiveness of other compiler optimizations. Such an optimization may or may not improve program performance by itself, but it also alters the structure of the program in such a way that other optimizations may produce superior results. Typical enabling transformations include:


 * Inline expansion: By inserting the body of a function in place of its call site, a large collection of intraprocedural optimizations such as dead code elimination, loop-invariant code motion, and induction variable elimination can take advantage of information from both the caller and callee.
 * Loop skewing: By "skewing" the logical shape of an array, this loop optimization can (when combined with loop interchange) eliminate loop-carried dependencies, allowing an inner loop to be parallelized.
 * Loop unswitching moves loop invariants out of a loop, reducing the number of conditional branches in each loop.