17 #define DEBUG_TYPE "adce"
31 STATISTIC(NumRemoved,
"Number of instructions removed");
50 INITIALIZE_PASS(ADCE,
"adce",
"Aggressive Dead Code Elimination",
false,
false)
58 if (isa<TerminatorInst>(
I.getInstructionIterator()) ||
59 isa<DbgInfoIntrinsic>(
I.getInstructionIterator()) ||
60 isa<LandingPadInst>(
I.getInstructionIterator()) ||
61 I->mayHaveSideEffects()) {
62 alive.
insert(
I.getInstructionIterator());
63 worklist.
push_back(
I.getInstructionIterator());
67 while (!worklist.
empty()) {
81 if (!alive.
count(
I.getInstructionIterator())) {
82 worklist.
push_back(
I.getInstructionIterator());
83 I->dropAllReferences();
87 E = worklist.
end();
I != E; ++
I) {
89 (*I)->eraseFromParent();
92 return !worklist.
empty();
void push_back(const T &Elt)
static PassRegistry * getPassRegistry()
inst_iterator inst_begin(Function *F)
T LLVM_ATTRIBUTE_UNUSED_RESULT pop_back_val()
ID
LLVM Calling Convention Representation.
bool count(PtrType Ptr) const
count - Return true if the specified pointer is in the set.
bool LLVM_ATTRIBUTE_UNUSED_RESULT empty() const
#define INITIALIZE_PASS(passName, arg, name, cfg, analysis)
FunctionPass * createAggressiveDCEPass()
void initializeADCEPass(PassRegistry &)
inst_iterator inst_end(Function *F)
STATISTIC(NumRemoved,"Number of instructions removed")