From: Chris Lattner Date: Mon, 29 Jul 2002 23:40:46 +0000 (+0000) Subject: Add code to ensure that no PHI nodes are left laying around with their X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=a61fab8c6d11bddeacec99c4b21278e1008fd08c;p=oota-llvm.git Add code to ensure that no PHI nodes are left laying around with their arguments dropped. This fixes bug: test/Regression/Transforms/ADCE/2002-07-17-PHIAssertion.ll git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@3134 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Transforms/Scalar/ADCE.cpp b/lib/Transforms/Scalar/ADCE.cpp index bba30a123a1..56b219a5857 100644 --- a/lib/Transforms/Scalar/ADCE.cpp +++ b/lib/Transforms/Scalar/ADCE.cpp @@ -284,9 +284,23 @@ bool ADCE::doADCE() { // sweep over the program can safely delete dead instructions without // other dead instructions still refering to them. // - for (BasicBlock::iterator I = BB->begin(), E = --BB->end(); I != E; ++I) - if (!LiveSet.count(I)) // Is this instruction alive? + for (BasicBlock::iterator I = BB->begin(), E = --BB->end(); I != E; ) + if (!LiveSet.count(I)) { // Is this instruction alive? I->dropAllReferences(); // Nope, drop references... + if (PHINode *PN = dyn_cast(&*I)) { + // We don't want to leave PHI nodes in the program that have + // #arguments != #predecessors, so we remove them now. + // + PN->replaceAllUsesWith(Constant::getNullValue(PN->getType())); + + // Delete the instruction... + I = BB->getInstList().erase(I); + } else { + ++I; + } + } else { + ++I; + } } }