aboutsummaryrefslogtreecommitdiff
path: root/lib/Transforms/Scalar/PredicateSimplifier.cpp
diff options
context:
space:
mode:
authorNick Lewycky <nicholas@mxc.ca>2006-10-03 17:36:01 +0000
committerNick Lewycky <nicholas@mxc.ca>2006-10-03 17:36:01 +0000
commitf938099aa1b38b23ae3eef30d193ab5c6778895c (patch)
tree900659fc2e63f0fcf12052b068c9081bb498e39c /lib/Transforms/Scalar/PredicateSimplifier.cpp
parentcd71da5cf05cd023d2082e2a13a2524ee7d5af3f (diff)
Simplify logic further.
Ensure that we copy KnownProperties before calling visitBasicBlock, else we may leak properties into blocks where they don't belong. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@30705 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms/Scalar/PredicateSimplifier.cpp')
-rw-r--r--lib/Transforms/Scalar/PredicateSimplifier.cpp25
1 files changed, 8 insertions, 17 deletions
diff --git a/lib/Transforms/Scalar/PredicateSimplifier.cpp b/lib/Transforms/Scalar/PredicateSimplifier.cpp
index 9983290799..2a7d779e70 100644
--- a/lib/Transforms/Scalar/PredicateSimplifier.cpp
+++ b/lib/Transforms/Scalar/PredicateSimplifier.cpp
@@ -650,31 +650,22 @@ void PredicateSimplifier::visit(BranchInst *BI, PropertySet &KP) {
BasicBlock *TrueDest = BI->getSuccessor(0),
*FalseDest = BI->getSuccessor(1);
- if (Condition == ConstantBool::getTrue() || TrueDest == FalseDest) {
- proceedToSuccessors(KP, BB);
- return;
- } else if (Condition == ConstantBool::getFalse()) {
+ if (isa<ConstantBool>(Condition) || TrueDest == FalseDest) {
proceedToSuccessors(KP, BB);
return;
}
DTNodeType *Node = DT->getNode(BB);
for (DTNodeType::iterator I = Node->begin(), E = Node->end(); I != E; ++I) {
- if ((*I)->getBlock() == TrueDest) {
- PropertySet TrueProperties(KP);
- TrueProperties.addEqual(ConstantBool::getTrue(), Condition);
- visitBasicBlock(TrueDest, TrueProperties);
- continue;
- }
+ BasicBlock *Dest = (*I)->getBlock();
+ PropertySet DestProperties(KP);
- if ((*I)->getBlock() == FalseDest) {
- PropertySet FalseProperties(KP);
- FalseProperties.addEqual(ConstantBool::getFalse(), Condition);
- visitBasicBlock(FalseDest, FalseProperties);
- continue;
- }
+ if (Dest == TrueDest)
+ DestProperties.addEqual(ConstantBool::getTrue(), Condition);
+ else if (Dest == FalseDest)
+ DestProperties.addEqual(ConstantBool::getFalse(), Condition);
- visitBasicBlock((*I)->getBlock(), KP);
+ visitBasicBlock(Dest, DestProperties);
}
}