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.
|
// 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;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user