+//===-- ConstantProp.h - Functions for Constant Propogation ------*- C++ -*--=//
+//
+// This family of functions are useful for performing constant propogation.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_OPT_CONSTANT_PROPOGATION_H
+#define LLVM_OPT_CONSTANT_PROPOGATION_H
+
+#include "llvm/Module.h"
+class Method;
+class TerminatorInst;
+class ConstantPool;
+
+namespace opt {
+
+// DoConstantPropogation - Do trivial constant propogation and expression
+// folding
+bool DoConstantPropogation(Method *M);
+
+static inline bool DoConstantPropogation(Module *M) {
+ return M->reduceApply(DoConstantPropogation);
+}
+
+
+// ConstantFoldTerminator - If a terminator instruction is predicated on a
+// constant value, convert it into an unconditional branch to the constant
+// destination.
+//
+bool ConstantFoldTerminator(TerminatorInst *T);
+
+
+//===----------------------------------------------------------------------===//
+// 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 M->reduceApply(DoConstantPoolMerging) |
+ DoConstantPoolMerging(M->getConstantPool());
+}
+
+//===----------------------------------------------------------------------===//
+// Sparse Conditional Constant Propogation Pass
+//
+
+bool DoSparseConditionalConstantProp(Method *M);
+
+static inline bool DoSparseConditionalConstantProp(Module *M) {
+ return M->reduceApply(DoSparseConditionalConstantProp);
+}
+
+// Define a shorter version of the name...
+template <class Unit> bool DoSCCP(Unit *M) {
+ return DoSparseConditionalConstantProp(M);
+}
+
+} // End Namespace opt
+
+#endif