diff --git a/lib/Bitcode/Writer/BitcodeWriter.cpp b/lib/Bitcode/Writer/BitcodeWriter.cpp index 3b5d46fbe78..191fdc9efdc 100644 --- a/lib/Bitcode/Writer/BitcodeWriter.cpp +++ b/lib/Bitcode/Writer/BitcodeWriter.cpp @@ -756,13 +756,13 @@ static void WriteMDNode(const MDNode *N, static void WriteModuleMetadata(const Module *M, const ValueEnumerator &VE, BitstreamWriter &Stream) { - const ValueEnumerator::ValueList &Vals = VE.getMDValues(); + const auto &Vals = VE.getMDValues(); bool StartedMetadataBlock = false; unsigned MDSAbbrev = 0; SmallVector Record; for (unsigned i = 0, e = Vals.size(); i != e; ++i) { - if (const MDNode *N = dyn_cast(Vals[i].first)) { + if (const MDNode *N = dyn_cast(Vals[i])) { if (!N->isFunctionLocal() || !N->getFunction()) { if (!StartedMetadataBlock) { Stream.EnterSubblock(bitc::METADATA_BLOCK_ID, 3); @@ -770,7 +770,7 @@ static void WriteModuleMetadata(const Module *M, } WriteMDNode(N, VE, Stream, Record); } - } else if (const MDString *MDS = dyn_cast(Vals[i].first)) { + } else if (const MDString *MDS = dyn_cast(Vals[i])) { if (!StartedMetadataBlock) { Stream.EnterSubblock(bitc::METADATA_BLOCK_ID, 3); diff --git a/lib/Bitcode/Writer/ValueEnumerator.cpp b/lib/Bitcode/Writer/ValueEnumerator.cpp index 4ed739ebe4a..f2be18e0378 100644 --- a/lib/Bitcode/Writer/ValueEnumerator.cpp +++ b/lib/Bitcode/Writer/ValueEnumerator.cpp @@ -509,12 +509,10 @@ void ValueEnumerator::EnumerateMetadata(const Value *MD) { // Check to see if it's already in! unsigned &MDValueID = MDValueMap[MD]; - if (MDValueID) { - // Increment use count. - MDValues[MDValueID-1].second++; + if (MDValueID) return; - } - MDValues.push_back(std::make_pair(MD, 1U)); + + MDValues.push_back(MD); MDValueID = MDValues.size(); // Enumerate all non-function-local operands. @@ -533,12 +531,10 @@ void ValueEnumerator::EnumerateFunctionLocalMetadata(const MDNode *N) { // Check to see if it's already in! unsigned &MDValueID = MDValueMap[N]; - if (MDValueID) { - // Increment use count. - MDValues[MDValueID-1].second++; + if (MDValueID) return; - } - MDValues.push_back(std::make_pair(N, 1U)); + + MDValues.push_back(N); MDValueID = MDValues.size(); // To incoroporate function-local information visit all function-local @@ -766,7 +762,7 @@ void ValueEnumerator::purgeFunction() { for (unsigned i = NumModuleValues, e = Values.size(); i != e; ++i) ValueMap.erase(Values[i].first); for (unsigned i = NumModuleMDValues, e = MDValues.size(); i != e; ++i) - MDValueMap.erase(MDValues[i].first); + MDValueMap.erase(MDValues[i]); for (unsigned i = 0, e = BasicBlocks.size(); i != e; ++i) ValueMap.erase(BasicBlocks[i]); diff --git a/lib/Bitcode/Writer/ValueEnumerator.h b/lib/Bitcode/Writer/ValueEnumerator.h index eba768d80be..80e3e6bdd9f 100644 --- a/lib/Bitcode/Writer/ValueEnumerator.h +++ b/lib/Bitcode/Writer/ValueEnumerator.h @@ -58,7 +58,7 @@ private: typedef UniqueVector ComdatSetType; ComdatSetType Comdats; - ValueList MDValues; + std::vector MDValues; SmallVector FunctionLocalMDs; ValueMapType MDValueMap; @@ -134,7 +134,7 @@ public: } const ValueList &getValues() const { return Values; } - const ValueList &getMDValues() const { return MDValues; } + const std::vector &getMDValues() const { return MDValues; } const SmallVectorImpl &getFunctionLocalMDValues() const { return FunctionLocalMDs; }