summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2012-03-30 16:46:21 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2012-03-30 16:46:21 +0000
commita53c46aaa3f645f490d75e01a478d673570782a8 (patch)
treefdec330e8ad4b3122694149aae2bda145652b8d3 /llvm/lib
parent70d22ccb22d5ea0d50e6c27536b3073bae896853 (diff)
downloadbcm5719-llvm-a53c46aaa3f645f490d75e01a478d673570782a8.tar.gz
bcm5719-llvm-a53c46aaa3f645f490d75e01a478d673570782a8.zip
Handle unreachable code in the dominates functions. This changes users when
needed for correctness, but still doesn't clean up code that now unnecessary checks for reachability. llvm-svn: 153755
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/VMCore/Dominators.cpp18
1 files changed, 14 insertions, 4 deletions
diff --git a/llvm/lib/VMCore/Dominators.cpp b/llvm/lib/VMCore/Dominators.cpp
index af51a05c8b5..6f97774fc64 100644
--- a/llvm/lib/VMCore/Dominators.cpp
+++ b/llvm/lib/VMCore/Dominators.cpp
@@ -88,8 +88,13 @@ bool DominatorTree::dominates(const Instruction *Def,
const BasicBlock *UseBB = User->getParent();
const BasicBlock *DefBB = Def->getParent();
- assert(isReachableFromEntry(DefBB) && isReachableFromEntry(UseBB) &&
- "We only handle reachable blocks");
+ // Any unreachable use is dominated, even if Def == User.
+ if (!isReachableFromEntry(UseBB))
+ return true;
+
+ // Unreachable definitions don't dominate anything.
+ if (!isReachableFromEntry(DefBB))
+ return false;
// An instruction doesn't dominate a use in itself.
if (Def == User)
@@ -119,8 +124,13 @@ bool DominatorTree::dominates(const Instruction *Def,
const BasicBlock *UseBB) const {
const BasicBlock *DefBB = Def->getParent();
- assert(isReachableFromEntry(DefBB) && isReachableFromEntry(UseBB) &&
- "We only handle reachable blocks");
+ // Any unreachable use is dominated, even if DefBB == UseBB.
+ if (!isReachableFromEntry(UseBB))
+ return true;
+
+ // Unreachable definitions don't dominate anything.
+ if (!isReachableFromEntry(DefBB))
+ return false;
if (DefBB == UseBB)
return false;
OpenPOWER on IntegriCloud