diff options
author | Nick Lewycky <nicholas@mxc.ca> | 2006-10-03 17:36:01 +0000 |
---|---|---|
committer | Nick Lewycky <nicholas@mxc.ca> | 2006-10-03 17:36:01 +0000 |
commit | f938099aa1b38b23ae3eef30d193ab5c6778895c (patch) | |
tree | 900659fc2e63f0fcf12052b068c9081bb498e39c /lib/Transforms/Scalar/PredicateSimplifier.cpp | |
parent | cd71da5cf05cd023d2082e2a13a2524ee7d5af3f (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.cpp | 25 |
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); } } |