LLVM  6.0.0svn
Public Member Functions | List of all members
llvm::SimpleLoopUnswitchPass Class Reference

This pass transforms loops that contain branches on loop-invariant conditions to have multiple loops. More...

#include "llvm/Transforms/Scalar/SimpleLoopUnswitch.h"

Inheritance diagram for llvm::SimpleLoopUnswitchPass:
Inheritance graph
[legend]
Collaboration diagram for llvm::SimpleLoopUnswitchPass:
Collaboration graph
[legend]

Public Member Functions

 SimpleLoopUnswitchPass (bool NonTrivial=false)
 
PreservedAnalyses run (Loop &L, LoopAnalysisManager &AM, LoopStandardAnalysisResults &AR, LPMUpdater &U)
 

Additional Inherited Members

- Static Public Member Functions inherited from llvm::PassInfoMixin< SimpleLoopUnswitchPass >
static StringRef name ()
 Gets the name of the pass we are mixed into. More...
 

Detailed Description

This pass transforms loops that contain branches on loop-invariant conditions to have multiple loops.

For example, it turns the left into the right code:

for (...) if (lic) A for (...) if (lic) A; B; C B else C for (...) A; C

This can increase the size of the code exponentially (doubling it every time a loop is unswitched) so we only unswitch if the resultant code will be smaller than a threshold.

This pass expects LICM to be run before it to hoist invariant conditions out of the loop, to make the unswitching opportunity obvious.

Definition at line 38 of file SimpleLoopUnswitch.h.

Constructor & Destructor Documentation

◆ SimpleLoopUnswitchPass()

llvm::SimpleLoopUnswitchPass::SimpleLoopUnswitchPass ( bool  NonTrivial = false)
inline

Definition at line 42 of file SimpleLoopUnswitch.h.

References llvm::createSimpleLoopUnswitchLegacyPass(), and run().

Member Function Documentation

◆ run()

PreservedAnalyses SimpleLoopUnswitchPass::run ( Loop L,
LoopAnalysisManager AM,
LoopStandardAnalysisResults AR,
LPMUpdater U 
)

The documentation for this class was generated from the following files: