diff options
| author | Nick Lewycky <nicholas@mxc.ca> | 2006-10-03 15:19:11 +0000 |
|---|---|---|
| committer | Nick Lewycky <nicholas@mxc.ca> | 2006-10-03 15:19:11 +0000 |
| commit | 1d00f3e1449d3c4f0716064c8231b5a7a45598d9 (patch) | |
| tree | ecdca0e599f87bccd494ebe16979887dc0804120 /llvm/lib/Transforms | |
| parent | 755f801adcb0a6d7c4ee787d91c3f8442d25fb05 (diff) | |
| download | bcm5719-llvm-1d00f3e1449d3c4f0716064c8231b5a7a45598d9.tar.gz bcm5719-llvm-1d00f3e1449d3c4f0716064c8231b5a7a45598d9.zip | |
Simplify, now that predsimplify depends on break-crit-edges.
Fix SwitchInst where dest-block is the same as one of the cases.
llvm-svn: 30700
Diffstat (limited to 'llvm/lib/Transforms')
| -rw-r--r-- | llvm/lib/Transforms/Scalar/PredicateSimplifier.cpp | 34 |
1 files changed, 8 insertions, 26 deletions
diff --git a/llvm/lib/Transforms/Scalar/PredicateSimplifier.cpp b/llvm/lib/Transforms/Scalar/PredicateSimplifier.cpp index b6de61bacd1..99832907998 100644 --- a/llvm/lib/Transforms/Scalar/PredicateSimplifier.cpp +++ b/llvm/lib/Transforms/Scalar/PredicateSimplifier.cpp @@ -413,8 +413,6 @@ namespace { // Used by terminator instructions to proceed from the current basic // block to the next. Verifies that "current" dominates "next", // then calls visitBasicBlock. - void proceedToSuccessor(TerminatorInst *TI, unsigned edge, - PropertySet &CurrentPS, PropertySet &NextPS); void proceedToSuccessors(PropertySet &CurrentPS, BasicBlock *Current); // Visits each instruction in the basic block. @@ -616,17 +614,6 @@ void PredicateSimplifier::visitInstruction(Instruction *I, visit(BO, KnownProperties); } -// The basic block on the target of the specified edge must be known -// to be immediately dominated by the parent of the TerminatorInst. -void PredicateSimplifier::proceedToSuccessor(TerminatorInst *TI, - unsigned edge, - PropertySet &CurrentPS, - PropertySet &NextPS) { - assert(edge < TI->getNumSuccessors() && "Invalid index for edge."); - - visitBasicBlock(TI->getSuccessor(edge), NextPS); -} - void PredicateSimplifier::proceedToSuccessors(PropertySet &KP, BasicBlock *BBCurrent) { DTNodeType *Current = DT->getNode(BBCurrent); @@ -676,14 +663,14 @@ void PredicateSimplifier::visit(BranchInst *BI, PropertySet &KP) { if ((*I)->getBlock() == TrueDest) { PropertySet TrueProperties(KP); TrueProperties.addEqual(ConstantBool::getTrue(), Condition); - proceedToSuccessor(BI, 0, KP, TrueProperties); + visitBasicBlock(TrueDest, TrueProperties); continue; } if ((*I)->getBlock() == FalseDest) { PropertySet FalseProperties(KP); FalseProperties.addEqual(ConstantBool::getFalse(), Condition); - proceedToSuccessor(BI, 1, KP, FalseProperties); + visitBasicBlock(FalseDest, FalseProperties); continue; } @@ -702,20 +689,15 @@ void PredicateSimplifier::visit(SwitchInst *SI, PropertySet KP) { for (DTNodeType::iterator I = Node->begin(), E = Node->end(); I != E; ++I) { BasicBlock *BB = (*I)->getBlock(); - PropertySet Copy(KP); - + PropertySet BBProperties(KP); if (BB == SI->getDefaultDest()) { - PropertySet NewProperties(KP); for (unsigned i = 1, e = SI->getNumCases(); i < e; ++i) - NewProperties.addNotEqual(Condition, SI->getCaseValue(i)); - - proceedToSuccessor(SI, 0, Copy, NewProperties); + if (SI->getSuccessor(i) != BB) + BBProperties.addNotEqual(Condition, SI->getCaseValue(i)); } else if (ConstantInt *CI = SI->findCaseDest(BB)) { - PropertySet NewProperties(KP); - NewProperties.addEqual(Condition, CI); - proceedToSuccessor(SI, SI->findCaseValue(CI), Copy, NewProperties); - } else - visitBasicBlock(BB, Copy); + BBProperties.addEqual(Condition, CI); + } + visitBasicBlock(BB, BBProperties); } } |

