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 | 58a910dff586e65d595a4c0e35cd83a2f15b6f61 (patch) | |
| tree | b172594cb067af2fd49aacb81e9fb15f610e59ed /llvm/lib/Transforms | |
| parent | 68d238801ccc180ecfc92e20174a5ca268ca2d6e (diff) | |
| download | bcm5719-llvm-58a910dff586e65d595a4c0e35cd83a2f15b6f61.tar.gz bcm5719-llvm-58a910dff586e65d595a4c0e35cd83a2f15b6f61.zip | |
Simplify logic further.
Ensure that we copy KnownProperties before calling visitBasicBlock, else
we may leak properties into blocks where they don't belong.
llvm-svn: 30705
Diffstat (limited to 'llvm/lib/Transforms')
| -rw-r--r-- | llvm/lib/Transforms/Scalar/PredicateSimplifier.cpp | 25 |
1 files changed, 8 insertions, 17 deletions
diff --git a/llvm/lib/Transforms/Scalar/PredicateSimplifier.cpp b/llvm/lib/Transforms/Scalar/PredicateSimplifier.cpp index 99832907998..2a7d779e704 100644 --- a/llvm/lib/Transforms/Scalar/PredicateSimplifier.cpp +++ b/llvm/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); } } |

