forked from OSchip/llvm-project
parent
689dccca31
commit
eaf039a94b
|
@ -0,0 +1,58 @@
|
|||
//===- llvm/Transforms/ConstantMerge.h - Merge duplicate consts --*- C++ -*--=//
|
||||
//
|
||||
// This file defines the interface to a pass that merges duplicate global
|
||||
// constants together into a single constant that is shared. This is useful
|
||||
// because some passes (ie TraceValues) insert a lot of string constants into
|
||||
// the program, regardless of whether or not they duplicate an existing string.
|
||||
//
|
||||
// Algorithm: ConstantMerge is designed to build up a map of available constants
|
||||
// and elminate duplicates when it is initialized.
|
||||
//
|
||||
// The DynamicConstantMerge method is a superset of the ConstantMerge algorithm
|
||||
// that checks for each method to see if constants have been added to the
|
||||
// constant pool since it was last run... if so, it processes them.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#ifndef LLVM_TRANSFORMS_CONSTANTMERGE_H
|
||||
#define LLVM_TRANSFORMS_CONSTANTMERGE_H
|
||||
|
||||
#include "llvm/Transforms/Pass.h"
|
||||
#include <map>
|
||||
class ConstPoolVal;
|
||||
class GlobalVariable;
|
||||
|
||||
class ConstantMerge : public Pass {
|
||||
protected:
|
||||
map<ConstPoolVal*, GlobalVariable*> Constants;
|
||||
unsigned LastConstantSeen;
|
||||
public:
|
||||
inline ConstantMerge() : LastConstantSeen(0) {}
|
||||
|
||||
// mergeDuplicateConstants - Static accessor for clients that don't want to
|
||||
// deal with passes.
|
||||
//
|
||||
static bool mergeDuplicateConstants(Module *M);
|
||||
|
||||
// doPassInitialization - For this pass, process all of the globals in the
|
||||
// module, eliminating duplicate constants.
|
||||
//
|
||||
bool doPassInitialization(Module *M);
|
||||
|
||||
// doPassFinalization - Clean up internal state for this module
|
||||
//
|
||||
bool doPassFinalization(Module *M) {
|
||||
LastConstantSeen = 0;
|
||||
Constants.clear();
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
struct DynamicConstantMerge : public ConstantMerge {
|
||||
// doPerMethodWork - Check to see if any globals have been added to the
|
||||
// global list for the module. If so, eliminate them.
|
||||
//
|
||||
bool doPerMethodWork(Method *M);
|
||||
};
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue