diff options
Diffstat (limited to 'polly/lib/Analysis')
-rw-r--r-- | polly/lib/Analysis/ScopInfo.cpp | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/polly/lib/Analysis/ScopInfo.cpp b/polly/lib/Analysis/ScopInfo.cpp index 7e236f6c20e..9d7a4339a92 100644 --- a/polly/lib/Analysis/ScopInfo.cpp +++ b/polly/lib/Analysis/ScopInfo.cpp @@ -3318,15 +3318,14 @@ ScalarEvolution *Scop::getSE() const { return SE; } bool Scop::isIgnored(RegionNode *RN) { BasicBlock *BB = getRegionNodeBasicBlock(RN); + ScopStmt *Stmt = getStmtForRegionNode(RN); + + // If there is no stmt, then it already has been removed. + if (!Stmt) + return true; // Check if there are accesses contained. - bool ContainsAccesses = false; - if (!RN->isSubRegion()) - ContainsAccesses = getAccessFunctions(BB); - else - for (BasicBlock *RBB : RN->getNodeAs<Region>()->blocks()) - ContainsAccesses |= (getAccessFunctions(RBB) != nullptr); - if (!ContainsAccesses) + if (Stmt->isEmpty()) return true; // Check for reachability via non-error blocks. @@ -3491,6 +3490,10 @@ ScopStmt *Scop::getStmtForBasicBlock(BasicBlock *BB) const { return StmtMapIt->second; } +ScopStmt *Scop::getStmtForRegionNode(RegionNode *RN) const { + return getStmtForBasicBlock(getRegionNodeBasicBlock(RN)); +} + int Scop::getRelativeLoopDepth(const Loop *L) const { Loop *OuterLoop = L ? R.outermostLoopInRegion(const_cast<Loop *>(L)) : nullptr; |