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
This commit is contained in:
Chris Lattner 2002-07-29 23:40:46 +00:00
parent 1ad4436cc2
commit a61fab8c6d

View File

@ -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<PHINode>(&*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;
}
}
}