summaryrefslogtreecommitdiff
path: root/include/llvm/ConstantPool.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/llvm/ConstantPool.h')
-rw-r--r--include/llvm/ConstantPool.h74
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