diff options
Diffstat (limited to 'include/llvm/ConstantPool.h')
-rw-r--r-- | include/llvm/ConstantPool.h | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/include/llvm/ConstantPool.h b/include/llvm/ConstantPool.h new file mode 100644 index 0000000000..7c8e255790 --- /dev/null +++ b/include/llvm/ConstantPool.h @@ -0,0 +1,74 @@ +//===-- llvm/ConstantPool.h - Define the constant pool class ------*- C++ -*-=// +// +// This file implements a constant pool that is split into different type +// planes. This allows searching for a typed object to go a little faster. +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_CONSTANTPOOL_H +#define LLVM_CONSTANTPOOL_H + +#include <vector> +#include "llvm/ValueHolder.h" + +class ConstPoolVal; +class SymTabValue; +class Type; + +class ConstantPool { +public: + typedef ValueHolder<ConstPoolVal, SymTabValue> PlaneType; +private: + typedef vector<PlaneType*> PlanesType; + PlanesType Planes; + SymTabValue *Parent; + + inline void resize(unsigned size); +public: + inline ConstantPool(SymTabValue *P) { Parent = P; } + inline ~ConstantPool() { delete_all(); } + + inline SymTabValue *getParent() { return Parent; } + inline const SymTabValue *getParent() const { return Parent; } + + void setParent(SymTabValue *STV); + + void dropAllReferences(); // Drop all references to other constants + + // Constant getPlane - Returns true if the type plane does not exist, + // otherwise updates the pointer to point to the correct plane. + // + bool getPlane(const Type *T, const PlaneType *&Plane) const; + bool getPlane(const Type *T, PlaneType *&Plane); + + // Normal getPlane - Resizes constant pool to contain type even if it doesn't + // already have it. + // + PlaneType &getPlane(const Type *T); + + // insert - Add constant into the symbol table... + void insert(ConstPoolVal *N); + bool remove(ConstPoolVal *N); // Returns true on failure + + void delete_all(); + + // find - Search to see if a constant of the specified value is already in + // the constant table. + // + const ConstPoolVal *find(const ConstPoolVal *V) const; + ConstPoolVal *find(const ConstPoolVal *V) ; + const ConstPoolVal *find(const Type *Ty) const; + ConstPoolVal *find(const Type *Ty) ; + + // Plane iteration support + // + typedef PlanesType::iterator plane_iterator; + typedef PlanesType::const_iterator plane_const_iterator; + + inline plane_iterator begin() { return Planes.begin(); } + inline plane_const_iterator begin() const { return Planes.begin(); } + inline plane_iterator end() { return Planes.end(); } + inline plane_const_iterator end() const { return Planes.end(); } +}; + +#endif |