Chris Lattner b44523bd9d Convert to new simpler pass structure
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@877 91177308-0d34-0410-b5e6-96231b3b80d8
2001-10-18 05:21:56 +00:00

72 lines
2.2 KiB
C++

//===-- DCE.h - Functions that perform Dead Code Elimination -----*- C++ -*--=//
//
// This family of functions is useful for performing dead code elimination of
// various sorts.
//
//===----------------------------------------------------------------------===//
#ifndef LLVM_OPT_DCE_H
#define LLVM_OPT_DCE_H
#include "llvm/Transforms/Pass.h"
namespace opt {
struct DeadCodeElimination : public Pass {
// External Interface:
//
static bool doDCE(Method *M);
// Remove unused global values - This removes unused global values of no
// possible value. This currently includes unused method prototypes and
// unitialized global variables.
//
static bool RemoveUnusedGlobalValues(Module *M);
// RemoveUnusedGlobalValuesAfterLink - This function is only to be used after
// linking the application. It removes global variables with initializers and
// unreachable methods. This should only be used after an application is
// linked, when it is not possible for an external entity to make a global
// value live again.
//
// static bool RemoveUnusedGlobalValuesAfterLink(Module *M); // TODO
// Pass Interface...
virtual bool doPassInitialization(Module *M) {
return RemoveUnusedGlobalValues(M);
}
virtual bool doPerMethodWork(Method *M) { return doDCE(M); }
virtual bool doPassFinalization(Module *M) {
return RemoveUnusedGlobalValues(M);
}
};
struct AgressiveDCE : public Pass {
// DoADCE - Execute the Agressive Dead Code Elimination Algorithm
//
static bool doADCE(Method *M); // Defined in ADCE.cpp
virtual bool doPerMethodWork(Method *M) {
return doADCE(M);
}
};
// SimplifyCFG - This function is used to do simplification of a CFG. For
// example, it adjusts branches to branches to eliminate the extra hop, it
// eliminates unreachable basic blocks, and does other "peephole" optimization
// of the CFG. It returns true if a modification was made, and returns an
// iterator that designates the first element remaining after the block that
// was deleted.
//
// WARNING: The entry node of a method may not be simplified.
//
bool SimplifyCFG(Method::iterator &BBIt);
} // End namespace opt
#endif