summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Bitcode/Writer/ValueEnumerator.h
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/Bitcode/Writer/ValueEnumerator.h')
-rw-r--r--llvm/lib/Bitcode/Writer/ValueEnumerator.h61
1 files changed, 33 insertions, 28 deletions
diff --git a/llvm/lib/Bitcode/Writer/ValueEnumerator.h b/llvm/lib/Bitcode/Writer/ValueEnumerator.h
index e7ccc8df1e5..730187087dc 100644
--- a/llvm/lib/Bitcode/Writer/ValueEnumerator.h
+++ b/llvm/lib/Bitcode/Writer/ValueEnumerator.h
@@ -1,4 +1,4 @@
-//===-- Bitcode/Writer/ValueEnumerator.h - Number values --------*- C++ -*-===//
+//===- Bitcode/Writer/ValueEnumerator.h - Number values ---------*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
@@ -14,56 +14,55 @@
#ifndef LLVM_LIB_BITCODE_WRITER_VALUEENUMERATOR_H
#define LLVM_LIB_BITCODE_WRITER_VALUEENUMERATOR_H
+#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/UniqueVector.h"
#include "llvm/IR/Attributes.h"
-#include "llvm/IR/Metadata.h"
-#include "llvm/IR/Type.h"
#include "llvm/IR/UseListOrder.h"
+#include <cassert>
+#include <cstdint>
+#include <utility>
#include <vector>
namespace llvm {
-class Type;
-class Value;
-class Instruction;
class BasicBlock;
class Comdat;
class Function;
-class Module;
-class Metadata;
+class Instruction;
class LocalAsMetadata;
class MDNode;
-class MDOperand;
+class Metadata;
+class Module;
class NamedMDNode;
-class AttributeList;
-class ValueSymbolTable;
-class MDSymbolTable;
class raw_ostream;
+class Type;
+class Value;
+class ValueSymbolTable;
class ValueEnumerator {
public:
- typedef std::vector<Type*> TypeList;
+ using TypeList = std::vector<Type *>;
// For each value, we remember its Value* and occurrence frequency.
- typedef std::vector<std::pair<const Value*, unsigned> > ValueList;
+ using ValueList = std::vector<std::pair<const Value *, unsigned>>;
/// Attribute groups as encoded in bitcode are almost AttributeSets, but they
/// include the AttributeList index, so we have to track that in our map.
- typedef std::pair<unsigned, AttributeSet> IndexAndAttrSet;
+ using IndexAndAttrSet = std::pair<unsigned, AttributeSet>;
UseListOrderStack UseListOrders;
private:
- typedef DenseMap<Type*, unsigned> TypeMapType;
+ using TypeMapType = DenseMap<Type *, unsigned>;
TypeMapType TypeMap;
TypeList Types;
- typedef DenseMap<const Value*, unsigned> ValueMapType;
+ using ValueMapType = DenseMap<const Value *, unsigned>;
ValueMapType ValueMap;
ValueList Values;
- typedef UniqueVector<const Comdat *> ComdatSetType;
+ using ComdatSetType = UniqueVector<const Comdat *>;
ComdatSetType Comdats;
std::vector<const Metadata *> MDs;
@@ -88,7 +87,7 @@ private:
}
};
- typedef DenseMap<const Metadata *, MDIndex> MetadataMapType;
+ using MetadataMapType = DenseMap<const Metadata *, MDIndex>;
MetadataMapType MetadataMap;
/// Range of metadata IDs, as a half-open range.
@@ -99,18 +98,18 @@ private:
/// Number of strings in the prefix of the metadata range.
unsigned NumStrings = 0;
- MDRange() {}
+ MDRange() = default;
explicit MDRange(unsigned First) : First(First) {}
};
SmallDenseMap<unsigned, MDRange, 1> FunctionMDInfo;
bool ShouldPreserveUseListOrder;
- typedef DenseMap<IndexAndAttrSet, unsigned> AttributeGroupMapType;
+ using AttributeGroupMapType = DenseMap<IndexAndAttrSet, unsigned>;
AttributeGroupMapType AttributeGroupMap;
std::vector<IndexAndAttrSet> AttributeGroups;
- typedef DenseMap<AttributeList, unsigned> AttributeListMapType;
+ using AttributeListMapType = DenseMap<AttributeList, unsigned>;
AttributeListMapType AttributeListMap;
std::vector<AttributeList> AttributeLists;
@@ -118,7 +117,7 @@ private:
/// the "getGlobalBasicBlockID" method.
mutable DenseMap<const BasicBlock*, unsigned> GlobalBasicBlockIDs;
- typedef DenseMap<const Instruction*, unsigned> InstructionMapType;
+ using InstructionMapType = DenseMap<const Instruction *, unsigned>;
InstructionMapType InstructionMap;
unsigned InstructionCount;
@@ -138,10 +137,10 @@ private:
unsigned FirstFuncConstantID;
unsigned FirstInstID;
- ValueEnumerator(const ValueEnumerator &) = delete;
- void operator=(const ValueEnumerator &) = delete;
public:
ValueEnumerator(const Module &M, bool ShouldPreserveUseListOrder);
+ ValueEnumerator(const ValueEnumerator &) = delete;
+ ValueEnumerator &operator=(const ValueEnumerator &) = delete;
void dump() const;
void print(raw_ostream &OS, const ValueMapType &Map, const char *Name) const;
@@ -149,14 +148,17 @@ public:
const char *Name) const;
unsigned getValueID(const Value *V) const;
+
unsigned getMetadataID(const Metadata *MD) const {
auto ID = getMetadataOrNullID(MD);
assert(ID != 0 && "Metadata not in slotcalculator!");
return ID - 1;
}
+
unsigned getMetadataOrNullID(const Metadata *MD) const {
return MetadataMap.lookup(MD).ID;
}
+
unsigned numMDs() const { return MDs.size(); }
bool shouldPreserveUseListOrder() const { return ShouldPreserveUseListOrder; }
@@ -208,10 +210,13 @@ public:
}
const TypeList &getTypes() const { return Types; }
+
const std::vector<const BasicBlock*> &getBasicBlocks() const {
return BasicBlocks;
}
+
const std::vector<AttributeList> &getAttributeLists() const { return AttributeLists; }
+
const std::vector<IndexAndAttrSet> &getAttributeGroups() const {
return AttributeGroups;
}
@@ -226,8 +231,8 @@ public:
/// incorporateFunction/purgeFunction - If you'd like to deal with a function,
/// use these two methods to get its data into the ValueEnumerator!
- ///
void incorporateFunction(const Function &F);
+
void purgeFunction();
uint64_t computeBitsRequiredForTypeIndicies() const;
@@ -292,6 +297,6 @@ private:
void EnumerateNamedMetadata(const Module &M);
};
-} // End llvm namespace
+} // end namespace llvm
-#endif
+#endif // LLVM_LIB_BITCODE_WRITER_VALUEENUMERATOR_H
OpenPOWER on IntegriCloud