Expose the low level DCE mechanism to external users

Refactor code to support it


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@1083 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2001-11-01 07:00:27 +00:00
parent fd0375bf86
commit a1f6e648be

View File

@ -34,20 +34,30 @@
#include "llvm/Assembly/Writer.h"
#include <algorithm>
static bool RemoveUnusedDefs(BasicBlock::InstListType &Vals) {
// dceInstruction - Inspect the instruction at *BBI and figure out if it's
// [trivially] dead. If so, remove the instruction and update the iterator
// to point to the instruction that immediately succeeded the original
// instruction.
//
bool opt::DeadCodeElimination::dceInstruction(BasicBlock::InstListType &BBIL,
BasicBlock::iterator &BBI) {
// Look for un"used" definitions...
if ((*BBI)->use_empty() && !(*BBI)->hasSideEffects() &&
!isa<TerminatorInst>(*BBI)) {
delete BBIL.remove(BBI); // Bye bye
return true;
}
return false;
}
static inline bool RemoveUnusedDefs(BasicBlock::InstListType &Vals) {
bool Changed = false;
for (BasicBlock::InstListType::iterator DI = Vals.begin();
DI != Vals.end()-1; ) {
// Look for un"used" definitions...
if ((*DI)->use_empty() && !(*DI)->hasSideEffects()) {
// Bye bye
//cerr << "Removing: " << *DI;
delete Vals.remove(DI);
DI != Vals.end(); )
if (opt::DeadCodeElimination::dceInstruction(Vals, DI))
Changed = true;
} else {
else
++DI;
}
}
return Changed;
}