summaryrefslogtreecommitdiffstats
path: root/polly/lib/RegisterPasses.cpp
diff options
context:
space:
mode:
authorTobias Grosser <grosser@fim.uni-passau.de>2011-12-14 12:21:31 +0000
committerTobias Grosser <grosser@fim.uni-passau.de>2011-12-14 12:21:31 +0000
commite1bc007afa88bd57439e1265e6f8bf01eeb43c7f (patch)
tree4d2cd31ebaca3129b9f5affe8b5ddc50dc9e2b0b /polly/lib/RegisterPasses.cpp
parent5c28af1c23e9f80145cb34097cb37276628f51db (diff)
downloadbcm5719-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.cpp69
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);
OpenPOWER on IntegriCloud