aboutsummaryrefslogtreecommitdiff
path: root/lib/Bitcode/Writer/ValueEnumerator.h
diff options
context:
space:
mode:
authorDevang Patel <dpatel@apple.com>2009-08-04 06:00:18 +0000
committerDevang Patel <dpatel@apple.com>2009-08-04 06:00:18 +0000
commitd5ac40457b62f37f0abfb1d61064f7c7300e91ee (patch)
treead521560772e5ebc19d6c8d2e45202ff9c31b661 /lib/Bitcode/Writer/ValueEnumerator.h
parent3b24c0172069a2546cd095e4b91f8b88c1ea0722 (diff)
Use separate ValueList for metadata.
This fixes PR4666. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78056 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Bitcode/Writer/ValueEnumerator.h')
-rw-r--r--lib/Bitcode/Writer/ValueEnumerator.h15
1 files changed, 8 insertions, 7 deletions
diff --git a/lib/Bitcode/Writer/ValueEnumerator.h b/lib/Bitcode/Writer/ValueEnumerator.h
index 40eeabb2b6..b5106f0809 100644
--- a/lib/Bitcode/Writer/ValueEnumerator.h
+++ b/lib/Bitcode/Writer/ValueEnumerator.h
@@ -25,6 +25,7 @@ class Value;
class BasicBlock;
class Function;
class Module;
+class MetadataBase;
class AttrListPtr;
class TypeSymbolTable;
class ValueSymbolTable;
@@ -44,7 +45,9 @@ private:
typedef DenseMap<const Value*, unsigned> ValueMapType;
ValueMapType ValueMap;
ValueList Values;
-
+ ValueList MDValues;
+ ValueMapType MDValueMap;
+
typedef DenseMap<void*, unsigned> AttributeMapType;
AttributeMapType AttributeMap;
std::vector<AttrListPtr> Attributes;
@@ -64,12 +67,8 @@ private:
public:
ValueEnumerator(const Module *M);
- unsigned getValueID(const Value *V) const {
- ValueMapType::const_iterator I = ValueMap.find(V);
- assert(I != ValueMap.end() && "Value not in slotcalculator!");
- return I->second-1;
- }
-
+ unsigned getValueID(const Value *V) const;
+
unsigned getTypeID(const Type *T) const {
TypeMapType::const_iterator I = TypeMap.find(T);
assert(I != TypeMap.end() && "Type not in ValueEnumerator!");
@@ -91,6 +90,7 @@ public:
}
const ValueList &getValues() const { return Values; }
+ const ValueList &getMDValues() const { return MDValues; }
const TypeList &getTypes() const { return Types; }
const std::vector<const BasicBlock*> &getBasicBlocks() const {
return BasicBlocks;
@@ -108,6 +108,7 @@ public:
private:
void OptimizeConstants(unsigned CstStart, unsigned CstEnd);
+ void EnumerateMetadata(const MetadataBase *MD);
void EnumerateValue(const Value *V);
void EnumerateType(const Type *T);
void EnumerateOperandType(const Value *V);