diff --git a/include/llvm/Transforms/IPO.h b/include/llvm/Transforms/IPO.h index 77f63f5c8de..d2371de5176 100644 --- a/include/llvm/Transforms/IPO.h +++ b/include/llvm/Transforms/IPO.h @@ -147,6 +147,11 @@ ModulePass *createIPSCCPPass(); //===----------------------------------------------------------------------===// // +/// createLoopExtractorPass - This pass extracts all natural loops from the +/// program into a function if it can. +/// +ModulePass *createLoopExtractorPass(); + /// createSingleLoopExtractorPass - This pass extracts one natural loop from the /// program into a function if it can. This is used by bugpoint. /// diff --git a/include/llvm/Transforms/LinkAllPasses.h b/include/llvm/Transforms/LinkAllPasses.h index 663ed86af16..f29f3de9952 100644 --- a/include/llvm/Transforms/LinkAllPasses.h +++ b/include/llvm/Transforms/LinkAllPasses.h @@ -42,6 +42,7 @@ namespace { (void) llvm::createAggressiveDCEPass(); (void) llvm::createArgumentPromotionPass(); + (void) llvm::createBlockPlacementPass(); (void) llvm::createBlockProfilerPass(); (void) llvm::createBreakCriticalEdgesPass(); (void) llvm::createCFGSimplificationPass(); @@ -68,6 +69,7 @@ namespace { (void) llvm::createInstructionCombiningPass(); (void) llvm::createInternalizePass(); (void) llvm::createLICMPass(); + (void) llvm::createLoopExtractorPass(); (void) llvm::createLoopInstrumentationPass(); (void) llvm::createLoopSimplifyPass(); (void) llvm::createLoopStrengthReducePass(); @@ -78,8 +80,10 @@ namespace { (void) llvm::createLowerGCPass(); (void) llvm::createLowerInvokePass(); (void) llvm::createLowerPackedPass(); + (void) llvm::createLowerSelectPass(); (void) llvm::createLowerSetJmpPass(); (void) llvm::createLowerSwitchPass(); + (void) llvm::createPREPass(); (void) llvm::createProfilePathsPass(); (void) llvm::createPromoteMemoryToRegister(); (void) llvm::createPruneEHPass(); @@ -89,11 +93,13 @@ namespace { (void) llvm::createSCCPPass(); (void) llvm::createScalarReplAggregatesPass(); (void) llvm::createSingleLoopExtractorPass(); + (void) llvm::createStripSymbolsPass(); (void) llvm::createTailCallEliminationPass(); (void) llvm::createTailDuplicationPass(); (void) llvm::createTraceBasicBlockPass(); (void) llvm::createTraceValuesPassForBasicBlocks(); (void) llvm::createTraceValuesPassForFunction(); + (void) llvm::createUnifyFunctionExitNodesPass(); } } X; }; diff --git a/include/llvm/Transforms/Scalar.h b/include/llvm/Transforms/Scalar.h index b5af277e7ea..6675e2d0431 100644 --- a/include/llvm/Transforms/Scalar.h +++ b/include/llvm/Transforms/Scalar.h @@ -275,7 +275,16 @@ FunctionPass *createLowerGCPass(); // Returns a pass which converts all instances of ConstantExpression // into regular LLVM instructions. FunctionPass* createLowerConstantExpressionsPass(); - + +//===----------------------------------------------------------------------===// +// This pass reorders basic blocks in order to increase the number of fall- +// through conditional branches. +FunctionPass *createBlockPlacementPass(); + +//===----------------------------------------------------------------------===// +// This pass does partial redundancy elimination. +FunctionPass *createPREPass(); + } // End llvm namespace #endif diff --git a/lib/Transforms/IPO/LoopExtractor.cpp b/lib/Transforms/IPO/LoopExtractor.cpp index 1bdb5c272a6..638820e3986 100644 --- a/lib/Transforms/IPO/LoopExtractor.cpp +++ b/lib/Transforms/IPO/LoopExtractor.cpp @@ -58,6 +58,11 @@ namespace { Y("loop-extract-single", "Extract at most one loop into a new function"); } // End anonymous namespace +// createLoopExtractorPass - This pass extracts all natural loops from the +// program into a function if it can. +// +ModulePass *llvm::createLoopExtractorPass() { return new LoopExtractor(); } + bool LoopExtractor::runOnFunction(Function &F) { LoopInfo &LI = getAnalysis(); diff --git a/lib/Transforms/Scalar/BasicBlockPlacement.cpp b/lib/Transforms/Scalar/BasicBlockPlacement.cpp index cadc6201708..ec31bbf87ed 100644 --- a/lib/Transforms/Scalar/BasicBlockPlacement.cpp +++ b/lib/Transforms/Scalar/BasicBlockPlacement.cpp @@ -31,6 +31,7 @@ #include "llvm/Pass.h" #include "llvm/Support/CFG.h" #include "llvm/ADT/Statistic.h" +#include "llvm/Transforms/Scalar.h" #include using namespace llvm; @@ -71,6 +72,8 @@ namespace { "Profile Guided Basic Block Placement"); } +FunctionPass *llvm::createBlockPlacementPass() { return new BlockPlacement(); } + bool BlockPlacement::runOnFunction(Function &F) { PI = &getAnalysis(); diff --git a/lib/Transforms/Scalar/PRE.cpp b/lib/Transforms/Scalar/PRE.cpp index b8934d213d2..b849331ff1e 100644 --- a/lib/Transforms/Scalar/PRE.cpp +++ b/lib/Transforms/Scalar/PRE.cpp @@ -102,6 +102,7 @@ namespace { RegisterOpt
 Z("pre", "Partial Redundancy Elimination");
 }
 
+FunctionPass* llvm::createPREPass() { return new PRE(); }
 
 bool PRE::runOnFunction(Function &F) {
   VN  = &getAnalysis();