summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTobias Grosser <grosser@fim.uni-passau.de>2012-02-14 14:02:48 +0000
committerTobias Grosser <grosser@fim.uni-passau.de>2012-02-14 14:02:48 +0000
commit1deda29598f7e223ce7546b5a7c95120160bbe9d (patch)
treecf1b1f876e301bca92909b6e0540dcad2e1ba59c
parent00383a75b89c26f7be749043afa502dc3b512eb8 (diff)
downloadbcm5719-llvm-1deda29598f7e223ce7546b5a7c95120160bbe9d.tar.gz
bcm5719-llvm-1deda29598f7e223ce7546b5a7c95120160bbe9d.zip
ScheduleOpt: Allow to configure for which dependences to optimize
We can either optimize for RAW dependences or for all dependences. For the moment, I do not see a big difference here. llvm-svn: 150484
-rw-r--r--polly/lib/Analysis/Dependences.cpp4
-rw-r--r--polly/lib/ScheduleOptimizer.cpp23
2 files changed, 24 insertions, 3 deletions
diff --git a/polly/lib/Analysis/Dependences.cpp b/polly/lib/Analysis/Dependences.cpp
index dc3f8818a7d..9fee964ff82 100644
--- a/polly/lib/Analysis/Dependences.cpp
+++ b/polly/lib/Analysis/Dependences.cpp
@@ -418,7 +418,9 @@ isl_union_map *Dependences::getDependences(int type) {
dependences = isl_union_map_union(dependences,
isl_union_map_copy(waw_dep));
- return isl_union_map_coalesce(dependences);
+ dependences = isl_union_map_coalesce(dependences);
+ dependences = isl_union_map_detect_equalities(dependences);
+ return dependences;
}
void Dependences::getAnalysisUsage(AnalysisUsage &AU) const {
diff --git a/polly/lib/ScheduleOptimizer.cpp b/polly/lib/ScheduleOptimizer.cpp
index 0a1c82a1910..c9e7e746976 100644
--- a/polly/lib/ScheduleOptimizer.cpp
+++ b/polly/lib/ScheduleOptimizer.cpp
@@ -48,6 +48,11 @@ DisableTiling("polly-no-tiling",
cl::location(polly::DisablePollyTiling), cl::init(false));
static cl::opt<std::string>
+OptimizeDeps("polly-opt-optimize-only",
+ cl::desc("Only a certain kind of dependences (all/raw)"),
+ cl::Hidden, cl::init("all"));
+
+static cl::opt<std::string>
SimplifyDeps("polly-opt-simplify-deps",
cl::desc("Dependences should be simplified (yes/no)"),
cl::Hidden, cl::init("yes"));
@@ -420,8 +425,22 @@ bool IslScheduleOptimizer::runOnScop(Scop &S) {
// Build input data.
int ValidityKinds = Dependences::TYPE_RAW | Dependences::TYPE_WAR
| Dependences::TYPE_WAW;
- int ProximityKinds = Dependences::TYPE_RAW | Dependences::TYPE_WAR
- | Dependences::TYPE_WAW;
+ int ProximityKinds;
+
+ if (OptimizeDeps == "all")
+ ProximityKinds = Dependences::TYPE_RAW | Dependences::TYPE_WAR
+ | Dependences::TYPE_WAW;
+ else if (OptimizeDeps == "raw")
+ ProximityKinds = Dependences::TYPE_RAW | Dependences::TYPE_WAR
+ | Dependences::TYPE_WAW;
+ else {
+ errs() << "Do not know how to optimize for '" << OptimizeDeps << "'"
+ << " Falling back to optimizing all dependences.\n";
+ ProximityKinds = Dependences::TYPE_RAW | Dependences::TYPE_WAR
+ | Dependences::TYPE_WAW;
+
+ }
+
isl_union_map *Validity = D->getDependences(ValidityKinds);
isl_union_map *Proximity = D->getDependences(ProximityKinds);
OpenPOWER on IntegriCloud