summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--polly/include/polly/Dependences.h5
-rw-r--r--polly/lib/Analysis/Dependences.cpp8
-rw-r--r--polly/lib/Transform/DeadCodeElimination.cpp8
3 files changed, 18 insertions, 3 deletions
diff --git a/polly/include/polly/Dependences.h b/polly/include/polly/Dependences.h
index d0fb96d335e..df03d2ca4a2 100644
--- a/polly/include/polly/Dependences.h
+++ b/polly/include/polly/Dependences.h
@@ -121,12 +121,17 @@ public:
return ReductionDependences;
}
+ /// @brief Recompute dependences from schedule and memory accesses.
+ void recomputeDependences();
+
bool runOnScop(Scop &S);
void printScop(raw_ostream &OS) const;
virtual void releaseMemory();
virtual void getAnalysisUsage(AnalysisUsage &AU) const;
private:
+ Scop *S;
+
/// @brief The different kinds of dependences we calculate.
isl_union_map *RAW;
isl_union_map *WAR;
diff --git a/polly/lib/Analysis/Dependences.cpp b/polly/lib/Analysis/Dependences.cpp
index c9cc7780bb5..d4d092ad30b 100644
--- a/polly/lib/Analysis/Dependences.cpp
+++ b/polly/lib/Analysis/Dependences.cpp
@@ -432,10 +432,14 @@ void Dependences::calculateDependences(Scop &S) {
DEBUG(printScop(dbgs()));
}
-bool Dependences::runOnScop(Scop &S) {
+void Dependences::recomputeDependences() {
releaseMemory();
- calculateDependences(S);
+ calculateDependences(*S);
+}
+bool Dependences::runOnScop(Scop &ScopVar) {
+ S = &ScopVar;
+ recomputeDependences();
return false;
}
diff --git a/polly/lib/Transform/DeadCodeElimination.cpp b/polly/lib/Transform/DeadCodeElimination.cpp
index c5cd57913da..497999faee8 100644
--- a/polly/lib/Transform/DeadCodeElimination.cpp
+++ b/polly/lib/Transform/DeadCodeElimination.cpp
@@ -151,7 +151,13 @@ bool DeadCodeElim::eliminateDeadCode(Scop &S, int PreciseSteps) {
isl_union_map_free(Dep);
isl_union_set_free(OriginalDomain);
- return S.restrictDomains(isl_union_set_coalesce(Live));
+ bool Changed = S.restrictDomains(isl_union_set_coalesce(Live));
+
+ // FIXME: We can probably avoid the recomputation of all dependences by
+ // updating them explicitly.
+ if (Changed)
+ D->recomputeDependences();
+ return Changed;
}
bool DeadCodeElim::runOnScop(Scop &S) {
OpenPOWER on IntegriCloud