diff options
| author | Tobias Grosser <tobias@grosser.es> | 2014-03-19 17:54:23 +0000 |
|---|---|---|
| committer | Tobias Grosser <tobias@grosser.es> | 2014-03-19 17:54:23 +0000 |
| commit | 806e9fff601d8c96de190ce5567cafe9abea51ab (patch) | |
| tree | 4769361de89e60eac017509e59419bf1850caa5c /polly | |
| parent | 3a520a9373144396b81c794bb5e26130986bd36f (diff) | |
| download | bcm5719-llvm-806e9fff601d8c96de190ce5567cafe9abea51ab.tar.gz bcm5719-llvm-806e9fff601d8c96de190ce5567cafe9abea51ab.zip | |
Move Pass registration into polly library
This ensures that the polly passes get properly registered both, when using
polly as a loadable module and when directly linking it into clang/opt/bugpoint.
llvm-svn: 204255
Diffstat (limited to 'polly')
| -rw-r--r-- | polly/include/polly/RegisterPasses.h | 2 | ||||
| -rw-r--r-- | polly/lib/Polly.cpp | 41 | ||||
| -rw-r--r-- | polly/lib/Support/RegisterPasses.cpp | 44 |
3 files changed, 42 insertions, 45 deletions
diff --git a/polly/include/polly/RegisterPasses.h b/polly/include/polly/RegisterPasses.h index 0b4a491e8ab..e53b45f89dd 100644 --- a/polly/include/polly/RegisterPasses.h +++ b/polly/include/polly/RegisterPasses.h @@ -24,7 +24,5 @@ class PassManagerBase; namespace polly { void initializePollyPasses(llvm::PassRegistry &Registry); -void registerPollyPasses(llvm::PassManagerBase &PM); -bool shouldEnablePolly(); } #endif diff --git a/polly/lib/Polly.cpp b/polly/lib/Polly.cpp index 5aba051bfbf..c879fd991a1 100644 --- a/polly/lib/Polly.cpp +++ b/polly/lib/Polly.cpp @@ -27,45 +27,4 @@ public: } }; static StaticInitializer InitializeEverything; - -static void -registerPollyEarlyAsPossiblePasses(const llvm::PassManagerBuilder &Builder, - llvm::PassManagerBase &PM) { - - if (!polly::shouldEnablePolly()) - return; - - polly::registerPollyPasses(PM); -} - -/// @brief Register Polly to be available as an optimizer -/// -/// We currently register Polly such that it runs as early as possible. This has -/// several implications: -/// -/// 1) We need to schedule more canonicalization passes -/// -/// As nothing is run before Polly, it is necessary to run a set of preparing -/// transformations before Polly to canonicalize the LLVM-IR and to allow -/// Polly to detect and understand the code. -/// -/// 2) LICM and LoopIdiom pass have not yet been run -/// -/// Loop invariant code motion as well as the loop idiom recognition pass make -/// it more difficult for Polly to transform code. LICM may introduce -/// additional data dependences that are hard to eliminate and the loop idiom -/// recognition pass may introduce calls to memset that we currently do not -/// understand. By running Polly early enough (meaning before these passes) we -/// avoid difficulties that may be introduced by these passes. -/// -/// 3) We get the full -O3 optimization sequence after Polly -/// -/// The LLVM-IR that is generated by Polly has been optimized on a high level, -/// but it may be rather inefficient on the lower/scalar level. By scheduling -/// Polly before all other passes, we have the full sequence of -O3 -/// optimizations behind us, such that inefficiencies on the low level can -/// be optimized away. -static llvm::RegisterStandardPasses -RegisterPollyOptimizer(llvm::PassManagerBuilder::EP_EarlyAsPossible, - registerPollyEarlyAsPossiblePasses); } // end of anonymous namespace. diff --git a/polly/lib/Support/RegisterPasses.cpp b/polly/lib/Support/RegisterPasses.cpp index 6d70079bf07..088585c6244 100644 --- a/polly/lib/Support/RegisterPasses.cpp +++ b/polly/lib/Support/RegisterPasses.cpp @@ -210,7 +210,7 @@ void initializePollyPasses(PassRegistry &Registry) { /// Polly supports both CLooG (http://www.cloog.org) as well as the isl internal /// code generator. For the moment, the CLooG code generator is enabled by /// default. -void registerPollyPasses(llvm::PassManagerBase &PM) { +static void registerPollyPasses(llvm::PassManagerBase &PM) { registerCanonicalicationPasses(PM, SCEVCodegen); PM.add(polly::createScopInfoPass()); @@ -276,7 +276,7 @@ void registerPollyPasses(llvm::PassManagerBase &PM) { PM.add(llvm::createCFGPrinterPass()); } -bool shouldEnablePolly() { +static bool shouldEnablePolly() { if (PollyOnlyPrinter || PollyPrinter || PollyOnlyViewer || PollyViewer) PollyTrackFailures = true; @@ -286,4 +286,44 @@ bool shouldEnablePolly() { return PollyEnabled; } + +static void +registerPollyEarlyAsPossiblePasses(const llvm::PassManagerBuilder &Builder, + llvm::PassManagerBase &PM) { + if (!polly::shouldEnablePolly()) + return; + + polly::registerPollyPasses(PM); +} + +/// @brief Register Polly to be available as an optimizer +/// +/// We currently register Polly such that it runs as early as possible. This has +/// several implications: +/// +/// 1) We need to schedule more canonicalization passes +/// +/// As nothing is run before Polly, it is necessary to run a set of preparing +/// transformations before Polly to canonicalize the LLVM-IR and to allow +/// Polly to detect and understand the code. +/// +/// 2) LICM and LoopIdiom pass have not yet been run +/// +/// Loop invariant code motion as well as the loop idiom recognition pass make +/// it more difficult for Polly to transform code. LICM may introduce +/// additional data dependences that are hard to eliminate and the loop idiom +/// recognition pass may introduce calls to memset that we currently do not +/// understand. By running Polly early enough (meaning before these passes) we +/// avoid difficulties that may be introduced by these passes. +/// +/// 3) We get the full -O3 optimization sequence after Polly +/// +/// The LLVM-IR that is generated by Polly has been optimized on a high level, +/// but it may be rather inefficient on the lower/scalar level. By scheduling +/// Polly before all other passes, we have the full sequence of -O3 +/// optimizations behind us, such that inefficiencies on the low level can +/// be optimized away. +static llvm::RegisterStandardPasses +RegisterPollyOptimizer(llvm::PassManagerBuilder::EP_EarlyAsPossible, + registerPollyEarlyAsPossiblePasses); } |

