diff options
Diffstat (limited to 'llvm/lib/Bitcode/Reader/BitcodeReader.cpp')
-rw-r--r-- | llvm/lib/Bitcode/Reader/BitcodeReader.cpp | 77 |
1 files changed, 36 insertions, 41 deletions
diff --git a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp index 580261a..8b6f79a 100644 --- a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp +++ b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp @@ -694,16 +694,15 @@ class ModuleSummaryIndexBitcodeReader : public BitcodeReaderBase { /// Used to enable on-demand parsing of the VST. uint64_t VSTOffset = 0; - // Map to save ValueId to ValueInfo association that was recorded in the + // Map to save ValueId to GUID association that was recorded in the // ValueSymbolTable. It is used after the VST is parsed to convert // call graph edges read from the function summary from referencing - // callees by their ValueId to using the ValueInfo instead, which is how + // callees by their ValueId to using the GUID instead, which is how // they are recorded in the summary index being built. - // We save a GUID which refers to the same global as the ValueInfo, but - // ignoring the linkage, i.e. for values other than local linkage they are - // identical. - DenseMap<unsigned, std::pair<ValueInfo, GlobalValue::GUID>> - ValueIdToValueInfoMap; + // We save a second GUID which is the same as the first one, but ignoring the + // linkage, i.e. for value other than local linkage they are identical. + DenseMap<unsigned, std::pair<GlobalValue::GUID, GlobalValue::GUID>> + ValueIdToCallGraphGUIDMap; /// Map populated during module path string table parsing, from the /// module ID to a string reference owned by the index's module @@ -743,8 +742,8 @@ private: Error parseEntireSummary(); Error parseModuleStringTable(); - std::pair<ValueInfo, GlobalValue::GUID> - getValueInfoFromValueId(unsigned ValueId); + std::pair<GlobalValue::GUID, GlobalValue::GUID> + getGUIDFromValueId(unsigned ValueId); ModulePathStringTableTy::iterator addThisModulePath(); }; @@ -4698,11 +4697,11 @@ ModuleSummaryIndexBitcodeReader::addThisModulePath() { return TheIndex.addModulePath(ModulePath, ModuleId); } -std::pair<ValueInfo, GlobalValue::GUID> -ModuleSummaryIndexBitcodeReader::getValueInfoFromValueId(unsigned ValueId) { - auto VGI = ValueIdToValueInfoMap[ValueId]; - assert(VGI.first); - return VGI; +std::pair<GlobalValue::GUID, GlobalValue::GUID> +ModuleSummaryIndexBitcodeReader::getGUIDFromValueId(unsigned ValueId) { + auto VGI = ValueIdToCallGraphGUIDMap.find(ValueId); + assert(VGI != ValueIdToCallGraphGUIDMap.end()); + return VGI->second; } void ModuleSummaryIndexBitcodeReader::setValueGUID( @@ -4717,8 +4716,8 @@ void ModuleSummaryIndexBitcodeReader::setValueGUID( if (PrintSummaryGUIDs) dbgs() << "GUID " << ValueGUID << "(" << OriginalNameID << ") is " << ValueName << "\n"; - ValueIdToValueInfoMap[ValueID] = - std::make_pair(TheIndex.getOrInsertValueInfo(ValueGUID), OriginalNameID); + ValueIdToCallGraphGUIDMap[ValueID] = + std::make_pair(ValueGUID, OriginalNameID); } // Specialized value symbol table parser used when reading module index @@ -4796,8 +4795,7 @@ Error ModuleSummaryIndexBitcodeReader::parseValueSymbolTable( GlobalValue::GUID RefGUID = Record[1]; // The "original name", which is the second value of the pair will be // overriden later by a FS_COMBINED_ORIGINAL_NAME in the combined index. - ValueIdToValueInfoMap[ValueID] = - std::make_pair(TheIndex.getOrInsertValueInfo(RefGUID), RefGUID); + ValueIdToCallGraphGUIDMap[ValueID] = std::make_pair(RefGUID, RefGUID); break; } } @@ -4942,7 +4940,7 @@ ModuleSummaryIndexBitcodeReader::makeRefList(ArrayRef<uint64_t> Record) { std::vector<ValueInfo> Ret; Ret.reserve(Record.size()); for (uint64_t RefValueId : Record) - Ret.push_back(getValueInfoFromValueId(RefValueId).first); + Ret.push_back(getGUIDFromValueId(RefValueId).first); return Ret; } @@ -4952,14 +4950,14 @@ std::vector<FunctionSummary::EdgeTy> ModuleSummaryIndexBitcodeReader::makeCallLi Ret.reserve(Record.size()); for (unsigned I = 0, E = Record.size(); I != E; ++I) { CalleeInfo::HotnessType Hotness = CalleeInfo::HotnessType::Unknown; - ValueInfo Callee = getValueInfoFromValueId(Record[I]).first; + GlobalValue::GUID CalleeGUID = getGUIDFromValueId(Record[I]).first; if (IsOldProfileFormat) { I += 1; // Skip old callsitecount field if (HasProfile) I += 1; // Skip old profilecount field } else if (HasProfile) Hotness = static_cast<CalleeInfo::HotnessType>(Record[++I]); - Ret.push_back(FunctionSummary::EdgeTy{Callee, CalleeInfo{Hotness}}); + Ret.push_back(FunctionSummary::EdgeTy{CalleeGUID, CalleeInfo{Hotness}}); } return Ret; } @@ -5029,8 +5027,7 @@ Error ModuleSummaryIndexBitcodeReader::parseEntireSummary() { case bitc::FS_VALUE_GUID: { // [valueid, refguid] uint64_t ValueID = Record[0]; GlobalValue::GUID RefGUID = Record[1]; - ValueIdToValueInfoMap[ValueID] = - std::make_pair(TheIndex.getOrInsertValueInfo(RefGUID), RefGUID); + ValueIdToCallGraphGUIDMap[ValueID] = std::make_pair(RefGUID, RefGUID); break; } // FS_PERMODULE: [valueid, flags, instcount, numrefs, numrefs x valueid, @@ -5071,10 +5068,10 @@ Error ModuleSummaryIndexBitcodeReader::parseEntireSummary() { PendingTypeCheckedLoadVCalls.clear(); PendingTypeTestAssumeConstVCalls.clear(); PendingTypeCheckedLoadConstVCalls.clear(); - auto VIAndOriginalGUID = getValueInfoFromValueId(ValueID); + auto GUID = getGUIDFromValueId(ValueID); FS->setModulePath(addThisModulePath()->first()); - FS->setOriginalName(VIAndOriginalGUID.second); - TheIndex.addGlobalValueSummary(VIAndOriginalGUID.first, std::move(FS)); + FS->setOriginalName(GUID.second); + TheIndex.addGlobalValueSummary(GUID.first, std::move(FS)); break; } // FS_ALIAS: [valueid, flags, valueid] @@ -5094,15 +5091,14 @@ Error ModuleSummaryIndexBitcodeReader::parseEntireSummary() { // ownership. AS->setModulePath(addThisModulePath()->first()); - GlobalValue::GUID AliaseeGUID = - getValueInfoFromValueId(AliaseeID).first.getGUID(); + GlobalValue::GUID AliaseeGUID = getGUIDFromValueId(AliaseeID).first; auto AliaseeInModule = TheIndex.findSummaryInModule(AliaseeGUID, ModulePath); if (!AliaseeInModule) return error("Alias expects aliasee summary to be parsed"); AS->setAliasee(AliaseeInModule); - auto GUID = getValueInfoFromValueId(ValueID); + auto GUID = getGUIDFromValueId(ValueID); AS->setOriginalName(GUID.second); TheIndex.addGlobalValueSummary(GUID.first, std::move(AS)); break; @@ -5116,7 +5112,7 @@ Error ModuleSummaryIndexBitcodeReader::parseEntireSummary() { makeRefList(ArrayRef<uint64_t>(Record).slice(2)); auto FS = llvm::make_unique<GlobalVarSummary>(Flags, std::move(Refs)); FS->setModulePath(addThisModulePath()->first()); - auto GUID = getValueInfoFromValueId(ValueID); + auto GUID = getGUIDFromValueId(ValueID); FS->setOriginalName(GUID.second); TheIndex.addGlobalValueSummary(GUID.first, std::move(FS)); break; @@ -5143,7 +5139,7 @@ Error ModuleSummaryIndexBitcodeReader::parseEntireSummary() { std::vector<FunctionSummary::EdgeTy> Edges = makeCallList( ArrayRef<uint64_t>(Record).slice(CallGraphEdgeStartIndex), IsOldProfileFormat, HasProfile); - ValueInfo VI = getValueInfoFromValueId(ValueID).first; + GlobalValue::GUID GUID = getGUIDFromValueId(ValueID).first; auto FS = llvm::make_unique<FunctionSummary>( Flags, InstCount, std::move(Refs), std::move(Edges), std::move(PendingTypeTests), std::move(PendingTypeTestAssumeVCalls), @@ -5156,9 +5152,9 @@ Error ModuleSummaryIndexBitcodeReader::parseEntireSummary() { PendingTypeTestAssumeConstVCalls.clear(); PendingTypeCheckedLoadConstVCalls.clear(); LastSeenSummary = FS.get(); - LastSeenGUID = VI.getGUID(); + LastSeenGUID = GUID; FS->setModulePath(ModuleIdMap[ModuleId]); - TheIndex.addGlobalValueSummary(VI, std::move(FS)); + TheIndex.addGlobalValueSummary(GUID, std::move(FS)); break; } // FS_COMBINED_ALIAS: [valueid, modid, flags, valueid] @@ -5174,17 +5170,16 @@ Error ModuleSummaryIndexBitcodeReader::parseEntireSummary() { LastSeenSummary = AS.get(); AS->setModulePath(ModuleIdMap[ModuleId]); - auto AliaseeGUID = - getValueInfoFromValueId(AliaseeValueId).first.getGUID(); + auto AliaseeGUID = getGUIDFromValueId(AliaseeValueId).first; auto AliaseeInModule = TheIndex.findSummaryInModule(AliaseeGUID, AS->modulePath()); if (!AliaseeInModule) return error("Alias expects aliasee summary to be parsed"); AS->setAliasee(AliaseeInModule); - ValueInfo VI = getValueInfoFromValueId(ValueID).first; - LastSeenGUID = VI.getGUID(); - TheIndex.addGlobalValueSummary(VI, std::move(AS)); + GlobalValue::GUID GUID = getGUIDFromValueId(ValueID).first; + LastSeenGUID = GUID; + TheIndex.addGlobalValueSummary(GUID, std::move(AS)); break; } // FS_COMBINED_GLOBALVAR_INIT_REFS: [valueid, modid, flags, n x valueid] @@ -5198,9 +5193,9 @@ Error ModuleSummaryIndexBitcodeReader::parseEntireSummary() { auto FS = llvm::make_unique<GlobalVarSummary>(Flags, std::move(Refs)); LastSeenSummary = FS.get(); FS->setModulePath(ModuleIdMap[ModuleId]); - ValueInfo VI = getValueInfoFromValueId(ValueID).first; - LastSeenGUID = VI.getGUID(); - TheIndex.addGlobalValueSummary(VI, std::move(FS)); + GlobalValue::GUID GUID = getGUIDFromValueId(ValueID).first; + LastSeenGUID = GUID; + TheIndex.addGlobalValueSummary(GUID, std::move(FS)); break; } // FS_COMBINED_ORIGINAL_NAME: [original_name] |