2001-06-30 04:34:07 +00:00
|
|
|
//===-- 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
|
|
|
|
//
|
|
|
|
|
2001-06-30 06:37:01 +00:00
|
|
|
bool DoSCCP(Method *M);
|
|
|
|
static inline bool DoSCCP(Module *M) {
|
|
|
|
return M->reduceApply(DoSCCP);
|
2001-06-30 04:34:07 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
} // End Namespace opt
|
|
|
|
|
|
|
|
#endif
|