* Use the new reduce_apply_bool template
authorChris Lattner <sabre@nondot.org>
Wed, 27 Jun 2001 23:31:14 +0000 (23:31 +0000)
committerChris Lattner <sabre@nondot.org>
Wed, 27 Jun 2001 23:31:14 +0000 (23:31 +0000)
* 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

include/llvm/Optimizations/AllOpts.h

index 31a69c42537e93526d281945fd72028b415d974d..c68ebc48c5aa2723d5cb24e73234afaac67a5885 100644 (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
 
 
 //===----------------------------------------------------------------------===//