diff options
author | Tobias Grosser <grosser@fim.uni-passau.de> | 2011-12-14 12:21:31 +0000 |
---|---|---|
committer | Tobias Grosser <grosser@fim.uni-passau.de> | 2011-12-14 12:21:31 +0000 |
commit | e1bc007afa88bd57439e1265e6f8bf01eeb43c7f (patch) | |
tree | 4d2cd31ebaca3129b9f5affe8b5ddc50dc9e2b0b /polly/lib/RegisterPasses.cpp | |
parent | 5c28af1c23e9f80145cb34097cb37276628f51db (diff) | |
download | bcm5719-llvm-e1bc007afa88bd57439e1265e6f8bf01eeb43c7f.tar.gz bcm5719-llvm-e1bc007afa88bd57439e1265e6f8bf01eeb43c7f.zip |
Allow to run the Polly preopt passes with -O0
To extract a preoptimized LLVM-IR file from a C-file run:
clang -Xclang -load -Xclang LLVMPolly.so -O0 -mllvm -polly file.c -S -emit-llvm
On the generated file you can directly run passes such as:
'opt -view-scops file.s'
llvm-svn: 146560
Diffstat (limited to 'polly/lib/RegisterPasses.cpp')
-rw-r--r-- | polly/lib/RegisterPasses.cpp | 69 |
1 files changed, 39 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); |