summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Analysis
diff options
context:
space:
mode:
authorNick Lewycky <nicholas@mxc.ca>2019-04-01 20:03:16 +0000
committerNick Lewycky <nicholas@mxc.ca>2019-04-01 20:03:16 +0000
commit66d7eb97045e0fda283ff336297e1a46869152f6 (patch)
tree6b5942804aa0050923e7570f2d2b1c3617cfd61f /llvm/lib/Analysis
parentc791a20b429b582fb44ed6ee32071e1f704284db (diff)
downloadbcm5719-llvm-66d7eb97045e0fda283ff336297e1a46869152f6.tar.gz
bcm5719-llvm-66d7eb97045e0fda283ff336297e1a46869152f6.zip
Not all blocks are reachable from entry. Don't assume they are.
Fixes a bug in isPotentiallyReachable, noticed by inspection. llvm-svn: 357425
Diffstat (limited to 'llvm/lib/Analysis')
-rw-r--r--llvm/lib/Analysis/CFG.cpp15
1 files changed, 11 insertions, 4 deletions
diff --git a/llvm/lib/Analysis/CFG.cpp b/llvm/lib/Analysis/CFG.cpp
index d71dd116ce3..6ef36dcad57 100644
--- a/llvm/lib/Analysis/CFG.cpp
+++ b/llvm/lib/Analysis/CFG.cpp
@@ -226,10 +226,17 @@ bool llvm::isPotentiallyReachable(const Instruction *A, const Instruction *B,
Worklist.push_back(const_cast<BasicBlock*>(A->getParent()));
}
- if (A->getParent() == &A->getParent()->getParent()->getEntryBlock())
- return true;
- if (B->getParent() == &A->getParent()->getParent()->getEntryBlock())
- return false;
+ if (DT) {
+ if (DT->isReachableFromEntry(A->getParent()) !=
+ DT->isReachableFromEntry(B->getParent()))
+ return false;
+ if (A->getParent() == &A->getParent()->getParent()->getEntryBlock() &&
+ DT->isReachableFromEntry(B->getParent()))
+ return true;
+ if (B->getParent() == &A->getParent()->getParent()->getEntryBlock() &&
+ DT->isReachableFromEntry(A->getParent()))
+ return false;
+ }
return isPotentiallyReachableFromMany(
Worklist, const_cast<BasicBlock *>(B->getParent()), DT, LI);
OpenPOWER on IntegriCloud