diff options
Diffstat (limited to 'llvm/lib/Bitcode/Writer/ValueEnumerator.h')
-rw-r--r-- | llvm/lib/Bitcode/Writer/ValueEnumerator.h | 61 |
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 |