Not all blocks are reachable from entry. Don't assume they are.

Fixes a bug in isPotentiallyReachable, noticed by inspection.

llvm-svn: 357425
diff --git a/llvm/lib/Analysis/CFG.cpp b/llvm/lib/Analysis/CFG.cpp
index d71dd11..6ef36dc 100644
--- a/llvm/lib/Analysis/CFG.cpp
+++ b/llvm/lib/Analysis/CFG.cpp
@@ -226,10 +226,17 @@
     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);