mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 12:12:47 +01:00
* Use the new reduce_apply_bool template
* Expose Constant Pool Merging from ConstantProp.cpp * Include definitions for SCCP pass * InstListType is not neccesary anymore llvm-svn: 86
This commit is contained in:
parent
df93760653
commit
5cfc551fa2
@ -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
|
||||
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
Loading…
Reference in New Issue
Block a user