diff options
-rw-r--r-- | polly/lib/Analysis/Dependences.cpp | 4 | ||||
-rw-r--r-- | polly/lib/ScheduleOptimizer.cpp | 23 |
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); |