From f6039f255e0f85224c37a228a3cb6659b351796e Mon Sep 17 00:00:00 2001 From: Eric Liu Date: Thu, 4 May 2017 11:49:39 +0000 Subject: Revert "IR: Use pointers instead of GUIDs to represent edges in the module summary. NFCI." This reverts commit r302108. This causes crash in clang bootstrap with LTO. Contacted the auther in the original commit. llvm-svn: 302140 --- llvm/lib/Bitcode/Reader/BitcodeReader.cpp | 77 +++++++++++++++---------------- 1 file changed, 36 insertions(+), 41 deletions(-) (limited to 'llvm/lib/Bitcode/Reader/BitcodeReader.cpp') 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> - 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> + 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 - getValueInfoFromValueId(unsigned ValueId); + std::pair + getGUIDFromValueId(unsigned ValueId); ModulePathStringTableTy::iterator addThisModulePath(); }; @@ -4698,11 +4697,11 @@ ModuleSummaryIndexBitcodeReader::addThisModulePath() { return TheIndex.addModulePath(ModulePath, ModuleId); } -std::pair -ModuleSummaryIndexBitcodeReader::getValueInfoFromValueId(unsigned ValueId) { - auto VGI = ValueIdToValueInfoMap[ValueId]; - assert(VGI.first); - return VGI; +std::pair +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 Record) { std::vector 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 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(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(Record).slice(2)); auto FS = llvm::make_unique(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 Edges = makeCallList( ArrayRef(Record).slice(CallGraphEdgeStartIndex), IsOldProfileFormat, HasProfile); - ValueInfo VI = getValueInfoFromValueId(ValueID).first; + GlobalValue::GUID GUID = getGUIDFromValueId(ValueID).first; auto FS = llvm::make_unique( 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(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] -- cgit v1.1