Index: llvm/docs/LoopTerminology.rst =================================================================== --- llvm/docs/LoopTerminology.rst +++ llvm/docs/LoopTerminology.rst @@ -141,10 +141,25 @@ reachability of the loop. +.. _loop-terminology-loop-simplify: + Loop Simplify Form ================== -TBD +The Loop Simplify Form is a canonical form that makes +several analyses and transformations simpler and more effective. +It is ensured by the LoopSimplify +(:ref:`-loop-simplify `) pass and is automatically +added by the pass managers when scheduling a LoopPass. +This pass is implemented in +`LoopInfo.h http://llvm.org/doxygen/LoopSimplify_8h_source.html`_. +When it is successful, the loop has: + +* A preheader. +* A single backedge (which implies that there is a single latch). +* Dedicated exits. That is, no exit block for the loop + has a predecessor that is outside the loop. This implies + that all exit blocks are dominated by the loop header. Loop Closed SSA (LCSSA) Index: llvm/docs/Passes.rst =================================================================== --- llvm/docs/Passes.rst +++ llvm/docs/Passes.rst @@ -803,12 +803,15 @@ A simple loop rotation transformation. +.. _passes-loop-simplify: + ``-loop-simplify``: Canonicalize natural loops ---------------------------------------------- This pass performs several transformations to transform natural loops into a simpler form, which makes subsequent analyses and transformations simpler and -more effective. +more effective. A summary of it can be found in +:ref:`Loop Terminology, Loop Simplify Form `. Loop pre-header insertion guarantees that there is a single, non-critical entry edge from outside of the loop to the loop header. This simplifies a number of