mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 04:30:23 +00:00
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:
parent
7c5014767f
commit
ee7cb29866
@ -9,6 +9,7 @@
|
||||
// predecessor only has one successor.
|
||||
// * Eliminates PHI nodes for basic blocks with a single predecessor
|
||||
// * 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,
|
||||
// we scan linearly through values, removing unused ones as we go. The problem
|
||||
@ -323,9 +324,23 @@ bool opt::DoDeadCodeElimination(Method *M) {
|
||||
return Changed;
|
||||
}
|
||||
|
||||
bool opt::DoDeadCodeElimination(Module *C) {
|
||||
bool Val = C->reduceApply(DoDeadCodeElimination);
|
||||
bool opt::DoDeadCodeElimination(Module *Mod) {
|
||||
bool Changed = false;
|
||||
|
||||
while (DoRemoveUnusedConstants(C)) Val = true;
|
||||
return Val;
|
||||
for (Module::iterator MI = Mod->begin(); MI != Mod->end(); ) {
|
||||
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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user