* Use the new reduce_apply_bool template

* Expose Constant Pool Merging from ConstantProp.cpp
* Include definitions for SCCP pass
* InstListType is not neccesary anymore


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@86 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2001-06-27 23:31:14 +00:00
parent 776885f34d
commit 3596366bed

View File

@ -21,8 +21,7 @@ class CallInst;
//
static inline bool ApplyOptToAllMethods(Module *C, bool (*Opt)(Method*)) {
return reduce_apply(C->getMethodList().begin(), C->getMethodList().end(),
bitwise_or<bool>(), false, ptr_fun(Opt));
return reduce_apply_bool(C->begin(), C->end(), ptr_fun(Opt));
}
//===----------------------------------------------------------------------===//
@ -43,6 +42,36 @@ static inline bool DoConstantPropogation(Module *C) {
return ApplyOptToAllMethods(C, DoConstantPropogation);
}
//===----------------------------------------------------------------------===//
// Constant Pool Merging Pass
//
// This function merges all constants in the specified constant pool that have
// identical types and values. This is useful for passes that generate lots of
// constants as a side effect of running.
//
bool DoConstantPoolMerging(ConstantPool &CP);
bool DoConstantPoolMerging(Method *M);
static inline bool DoConstantPoolMerging(Module *M) {
return ApplyOptToAllMethods(M, DoConstantPoolMerging) |
DoConstantPoolMerging(M->getConstantPool());
}
//===----------------------------------------------------------------------===//
// Sparse Conditional Constant Propogation Pass
//
bool DoSparseConditionalConstantProp(Method *M);
static inline bool DoSparseConditionalConstantProp(Module *M) {
return ApplyOptToAllMethods(M, DoSparseConditionalConstantProp);
}
// Define a shorter version of the name...
template <class Unit> bool DoSCCP(Unit *M) {
return DoSparseConditionalConstantProp(M);
}
//===----------------------------------------------------------------------===//
// Method Inlining Pass
//
@ -67,7 +96,7 @@ static inline bool DoMethodInlining(Module *C) {
// method by one level.
//
bool InlineMethod(CallInst *C);
bool InlineMethod(BasicBlock::InstListType::iterator CI);// *CI must be CallInst
bool InlineMethod(BasicBlock::iterator CI); // *CI must be CallInst
//===----------------------------------------------------------------------===//