From a73a654bb42b2117eb8b52b1401862373ace4760 Mon Sep 17 00:00:00 2001 From: Nick Lewycky Date: Tue, 3 Oct 2006 15:19:11 +0000 Subject: [PATCH] Simplify, now that predsimplify depends on break-crit-edges. Fix SwitchInst where dest-block is the same as one of the cases. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@30700 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Transforms/Scalar/PredicateSimplifier.cpp | 34 +++++-------------- 1 file changed, 8 insertions(+), 26 deletions(-) diff --git a/lib/Transforms/Scalar/PredicateSimplifier.cpp b/lib/Transforms/Scalar/PredicateSimplifier.cpp index b6de61bacd1..99832907998 100644 --- a/lib/Transforms/Scalar/PredicateSimplifier.cpp +++ b/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); } } -- 2.34.1