Without updating dependences we may lose implicit transitive dependences for
which all explicit dependences have gone through the statement iterations we
have just eliminated.
No test case. We should probably implement a -verify-dependences option.
This fixes llvm.org/PR21227
llvm-svn: 224459
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;
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;
}
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) {