diff options
| -rw-r--r-- | polly/lib/RegisterPasses.cpp | 69 | ||||
| -rw-r--r-- | polly/www/example_load_Polly_into_clang.html | 10 |
2 files changed, 49 insertions, 30 deletions
diff --git a/polly/lib/RegisterPasses.cpp b/polly/lib/RegisterPasses.cpp index f763ce938ac..f9d77df88c2 100644 --- a/polly/lib/RegisterPasses.cpp +++ b/polly/lib/RegisterPasses.cpp @@ -109,36 +109,8 @@ public: static StaticInitializer InitializeEverything; -static void registerPollyPasses(const llvm::PassManagerBuilder &Builder, - llvm::PassManagerBase &PM) { - if (PollyOnlyPrinter || PollyPrinter || PollyOnlyViewer || PollyViewer || - ExportJScop || ImportJScop) - PollyEnabled = true; - - if (!PollyEnabled) { - if (DisableCodegen) - errs() << "The option -polly-no-codegen has no effect. " - "Polly was not enabled\n"; - - if (DisableScheduler) - errs() << "The option -polly-no-optimizer has no effect. " - "Polly was not enabled\n"; - - return; - } - - // Polly is only enabled at -O3 - if (Builder.OptLevel != 3) { - errs() << "Polly should only be run with -O3. Disabling Polly.\n"; - return; - } - - bool RunScheduler = !DisableScheduler; - bool RunCodegen = !DisableCodegen; - - - - +static void registerPollyPreoptPasses(const llvm::PassManagerBuilder &Builder, + llvm::PassManagerBase &PM) { // A standard set of optimization passes partially taken/copied from the // set of default optimization passes. It is used to bring the code into // a canonical form that can than be analyzed by Polly. This set of passes is @@ -168,6 +140,40 @@ static void registerPollyPasses(const llvm::PassManagerBuilder &Builder, // recover them PM.add(llvm::createIndVarSimplifyPass()); PM.add(polly::createRegionSimplifyPass()); +} + +static void registerPollyPasses(const llvm::PassManagerBuilder &Builder, + llvm::PassManagerBase &PM) { + + if (Builder.OptLevel == 0) + return; + + if (PollyOnlyPrinter || PollyPrinter || PollyOnlyViewer || PollyViewer || + ExportJScop || ImportJScop) + PollyEnabled = true; + + if (!PollyEnabled) { + if (DisableCodegen) + errs() << "The option -polly-no-codegen has no effect. " + "Polly was not enabled\n"; + + if (DisableScheduler) + errs() << "The option -polly-no-optimizer has no effect. " + "Polly was not enabled\n"; + + return; + } + + // Polly is only enabled at -O3 + if (Builder.OptLevel != 3) { + errs() << "Polly should only be run with -O3. Disabling Polly.\n"; + return; + } + + bool RunScheduler = !DisableScheduler; + bool RunCodegen = !DisableCodegen; + + registerPollyPreoptPasses(Builder, PM); if (PollyViewer) PM.add(polly::createDOTViewerPass()); @@ -216,3 +222,6 @@ static void registerPollyPasses(const llvm::PassManagerBuilder &Builder, static llvm::RegisterStandardPasses PassRegister(llvm::PassManagerBuilder::EP_EarlyAsPossible, registerPollyPasses); +static llvm::RegisterStandardPasses +PassRegisterPreopt(llvm::PassManagerBuilder::EP_EnabledOnOptLevel0, + registerPollyPreoptPasses); diff --git a/polly/www/example_load_Polly_into_clang.html b/polly/www/example_load_Polly_into_clang.html index df6a20da88b..20c899a09e7 100644 --- a/polly/www/example_load_Polly_into_clang.html +++ b/polly/www/example_load_Polly_into_clang.html @@ -59,6 +59,16 @@ Automatic vector code generation can be enabled by adding <b>-mllvm <pre class="code">pollycc -O3 -mllvm -enable-polly-vector file.c</pre> +<h2>Extract a preoptimized LLVM-IR file</h2> + +Often it is useful to derive from a C-file the LLVM-IR code that is actually +optimized by Polly. Normally the LLVM-IR is automatically generated from +the C code by first lowering C to LLVM-IR (clang) and by subsequently applying a +set of preparing transformations on the LLVM-IR. To get the LLVM-IR after the +preparing transformations have been applied run Polly with '-O0'. + +<pre class="code">pollycc -O0 -mllvm -polly -S -emit-llvm file.c</pre> + <h2>Further options</h2> Polly supports further options that are mainly useful for the development or |

