Enable the elimination of method prototypes that are not referenced

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@325 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2001-07-28 17:51:49 +00:00
parent 7c5014767f
commit ee7cb29866

View File

@ -9,6 +9,7 @@
// predecessor only has one successor. // predecessor only has one successor.
// * Eliminates PHI nodes for basic blocks with a single predecessor // * Eliminates PHI nodes for basic blocks with a single predecessor
// * Eliminates a basic block that only contains an unconditional branch // * Eliminates a basic block that only contains an unconditional branch
// * Eliminates method prototypes that are not referenced
// //
// TODO: This should REALLY be worklist driven instead of iterative. Right now, // TODO: This should REALLY be worklist driven instead of iterative. Right now,
// we scan linearly through values, removing unused ones as we go. The problem // we scan linearly through values, removing unused ones as we go. The problem
@ -323,9 +324,23 @@ bool opt::DoDeadCodeElimination(Method *M) {
return Changed; return Changed;
} }
bool opt::DoDeadCodeElimination(Module *C) { bool opt::DoDeadCodeElimination(Module *Mod) {
bool Val = C->reduceApply(DoDeadCodeElimination); bool Changed = false;
while (DoRemoveUnusedConstants(C)) Val = true; for (Module::iterator MI = Mod->begin(); MI != Mod->end(); ) {
return Val; Method *Meth = *MI;
if (!Meth->isExternal()) { // DCE normal methods
Changed |= DoDeadCodeElimination(Meth);
++MI; // Next method please
} else if (Meth->use_size() == 0) { // No references to prototype?
//cerr << "Removing method proto: " << Meth->getName() << endl;
delete Mod->getMethodList().remove(MI); // Remove prototype
// Remove moves iterator to point to the next one automatically
} else {
++MI; // Skip prototype in use.
}
}
while (DoRemoveUnusedConstants(Mod)) Changed = true;
return Changed;
} }