From: Tobias Grosser Date: Wed, 17 Dec 2014 21:13:55 +0000 (+0000) Subject: Dead code elimination: Update dependences after eliminating code X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=11e3873516fa5dbb63bbe7c2d2614ec2bf5bc851;p=platform%2Fupstream%2Fllvm.git Dead code elimination: Update dependences after eliminating code 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 --- diff --git a/polly/include/polly/Dependences.h b/polly/include/polly/Dependences.h index d0fb96d..df03d2c 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 c9cc778..d4d092a 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 c5cd579..497999f 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) {