@@ -492,11 +492,6 @@ class ModuleSummaryIndexBitcodeReader {
492492 DenseMap<unsigned , std::pair<GlobalValue::GUID, GlobalValue::GUID>>
493493 ValueIdToCallGraphGUIDMap;
494494
495- // / Map to save the association between summary offset in the VST to the
496- // / GUID created when parsing it. Used to add newly parsed summaries to
497- // / the index.
498- DenseMap<uint64_t , GlobalValue::GUID> SummaryOffsetToGUIDMap;
499-
500495 // / Map populated during module path string table parsing, from the
501496 // / module ID to a string reference owned by the index's module
502497 // / path string table, used to correlate with combined index
@@ -548,7 +543,6 @@ class ModuleSummaryIndexBitcodeReader {
548543 std::error_code initLazyStream (std::unique_ptr<DataStreamer> Streamer);
549544 std::pair<GlobalValue::GUID, GlobalValue::GUID>
550545 getGUIDFromValueId (unsigned ValueId);
551- GlobalValue::GUID getGUIDFromOffset (uint64_t Offset);
552546};
553547} // end anonymous namespace
554548
@@ -5740,13 +5734,6 @@ ModuleSummaryIndexBitcodeReader::getGUIDFromValueId(unsigned ValueId) {
57405734 return VGI->second ;
57415735}
57425736
5743- GlobalValue::GUID
5744- ModuleSummaryIndexBitcodeReader::getGUIDFromOffset (uint64_t Offset) {
5745- auto I = SummaryOffsetToGUIDMap.find (Offset);
5746- assert (I != SummaryOffsetToGUIDMap.end ());
5747- return I->second ;
5748- }
5749-
57505737// Specialized value symbol table parser used when reading module index
57515738// blocks where we don't actually create global values. The parsed information
57525739// is saved in the bitcode reader for use when later parsing summaries.
@@ -5832,18 +5819,6 @@ std::error_code ModuleSummaryIndexBitcodeReader::parseValueSymbolTable(
58325819 ValueName.clear ();
58335820 break ;
58345821 }
5835- case bitc::VST_CODE_COMBINED_GVDEFENTRY: {
5836- // VST_CODE_COMBINED_GVDEFENTRY: [valueid, offset, guid]
5837- unsigned ValueID = Record[0 ];
5838- uint64_t GlobalValSummaryOffset = Record[1 ];
5839- GlobalValue::GUID GlobalValGUID = Record[2 ];
5840- SummaryOffsetToGUIDMap[GlobalValSummaryOffset] = GlobalValGUID;
5841- // The "original name", which is the second value of the pair will be
5842- // overriden later by a FS_COMBINED_ORIGINAL_NAME in the combined index.
5843- ValueIdToCallGraphGUIDMap[ValueID] =
5844- std::make_pair (GlobalValGUID, GlobalValGUID);
5845- break ;
5846- }
58475822 case bitc::VST_CODE_COMBINED_ENTRY: {
58485823 // VST_CODE_COMBINED_ENTRY: [valueid, refguid]
58495824 unsigned ValueID = Record[0 ];
@@ -6030,11 +6005,6 @@ std::error_code ModuleSummaryIndexBitcodeReader::parseEntireSummary() {
60306005 // "OriginalName" attachement.
60316006 GlobalValueSummary *LastSeenSummary = nullptr ;
60326007 bool Combined = false ;
6033- // For aliases in the combined summary, we need to know which summary
6034- // corresponds to the aliasee offset saved in the alias summary. It isn't
6035- // sufficient to just map to the aliasee GUID, since in the combined summary
6036- // there may be multiple values with the same GUID.
6037- DenseMap<uint64_t , GlobalValueSummary *> OffsetToSummaryMap;
60386008 while (1 ) {
60396009 BitstreamEntry Entry = Stream.advanceSkippingSubblocks ();
60406010
@@ -6067,7 +6037,6 @@ std::error_code ModuleSummaryIndexBitcodeReader::parseEntireSummary() {
60676037 // in the combined index VST entries). The records also contain
60686038 // information used for ThinLTO renaming and importing.
60696039 Record.clear ();
6070- uint64_t CurRecordBit = Stream.GetCurrentBitNo ();
60716040 auto BitCode = Stream.readRecord (Entry.ID , Record);
60726041 switch (BitCode) {
60736042 default : // Default behavior: ignore.
@@ -6164,27 +6133,29 @@ std::error_code ModuleSummaryIndexBitcodeReader::parseEntireSummary() {
61646133 TheIndex->addGlobalValueSummary (GUID.first , std::move (FS));
61656134 break ;
61666135 }
6167- // FS_COMBINED: [modid, flags, instcount, numrefs, numrefs x valueid ,
6168- // n x (valueid, callsitecount)]
6169- // FS_COMBINED_PROFILE: [modid, flags, instcount, numrefs,
6136+ // FS_COMBINED: [valueid, modid, flags, instcount, numrefs,
6137+ // numrefs x valueid, n x (valueid, callsitecount)]
6138+ // FS_COMBINED_PROFILE: [valueid, modid, flags, instcount, numrefs,
61706139 // numrefs x valueid,
61716140 // n x (valueid, callsitecount, profilecount)]
61726141 case bitc::FS_COMBINED:
61736142 case bitc::FS_COMBINED_PROFILE: {
6174- uint64_t ModuleId = Record[0 ];
6175- uint64_t RawFlags = Record[1 ];
6176- unsigned InstCount = Record[2 ];
6177- unsigned NumRefs = Record[3 ];
6143+ unsigned ValueID = Record[0 ];
6144+ uint64_t ModuleId = Record[1 ];
6145+ uint64_t RawFlags = Record[2 ];
6146+ unsigned InstCount = Record[3 ];
6147+ unsigned NumRefs = Record[4 ];
61786148 auto Flags = getDecodedGVSummaryFlags (RawFlags, Version);
61796149 std::unique_ptr<FunctionSummary> FS =
61806150 llvm::make_unique<FunctionSummary>(Flags, InstCount);
61816151 LastSeenSummary = FS.get ();
61826152 FS->setModulePath (ModuleIdMap[ModuleId]);
6183- static int RefListStartIndex = 4 ;
6153+ static int RefListStartIndex = 5 ;
61846154 int CallGraphEdgeStartIndex = RefListStartIndex + NumRefs;
61856155 assert (Record.size () >= RefListStartIndex + NumRefs &&
61866156 " Record size inconsistent with number of references" );
6187- for (unsigned I = 4 , E = CallGraphEdgeStartIndex; I != E; ++I) {
6157+ for (unsigned I = RefListStartIndex, E = CallGraphEdgeStartIndex; I != E;
6158+ ++I) {
61886159 unsigned RefValueId = Record[I];
61896160 GlobalValue::GUID RefGUID = getGUIDFromValueId (RefValueId).first ;
61906161 FS->addRefEdge (RefGUID);
@@ -6199,50 +6170,52 @@ std::error_code ModuleSummaryIndexBitcodeReader::parseEntireSummary() {
61996170 FS->addCallGraphEdge (CalleeGUID,
62006171 CalleeInfo (CallsiteCount, ProfileCount));
62016172 }
6202- GlobalValue::GUID GUID = getGUIDFromOffset (CurRecordBit);
6203- OffsetToSummaryMap[CurRecordBit] = FS.get ();
6173+ GlobalValue::GUID GUID = getGUIDFromValueId (ValueID).first ;
62046174 TheIndex->addGlobalValueSummary (GUID, std::move (FS));
62056175 Combined = true ;
62066176 break ;
62076177 }
6208- // FS_COMBINED_ALIAS: [modid, flags, offset ]
6178+ // FS_COMBINED_ALIAS: [valueid, modid, flags, valueid ]
62096179 // Aliases must be emitted (and parsed) after all FS_COMBINED entries, as
62106180 // they expect all aliasee summaries to be available.
62116181 case bitc::FS_COMBINED_ALIAS: {
6212- uint64_t ModuleId = Record[0 ];
6213- uint64_t RawFlags = Record[1 ];
6214- uint64_t AliaseeSummaryOffset = Record[2 ];
6182+ unsigned ValueID = Record[0 ];
6183+ uint64_t ModuleId = Record[1 ];
6184+ uint64_t RawFlags = Record[2 ];
6185+ unsigned AliaseeValueId = Record[3 ];
62156186 auto Flags = getDecodedGVSummaryFlags (RawFlags, Version);
62166187 std::unique_ptr<AliasSummary> AS = llvm::make_unique<AliasSummary>(Flags);
62176188 LastSeenSummary = AS.get ();
62186189 AS->setModulePath (ModuleIdMap[ModuleId]);
62196190
6220- auto *AliaseeSummary = OffsetToSummaryMap[AliaseeSummaryOffset];
6221- if (!AliaseeSummary)
6191+ auto AliaseeGUID = getGUIDFromValueId (AliaseeValueId).first ;
6192+ auto AliaseeInModule =
6193+ TheIndex->findSummaryInModule (AliaseeGUID, AS->modulePath ());
6194+ if (!AliaseeInModule)
62226195 return error (" Alias expects aliasee summary to be parsed" );
6223- AS->setAliasee (AliaseeSummary );
6196+ AS->setAliasee (AliaseeInModule );
62246197
6225- GlobalValue::GUID GUID = getGUIDFromOffset (CurRecordBit) ;
6198+ GlobalValue::GUID GUID = getGUIDFromValueId (ValueID). first ;
62266199 TheIndex->addGlobalValueSummary (GUID, std::move (AS));
62276200 Combined = true ;
62286201 break ;
62296202 }
6230- // FS_COMBINED_GLOBALVAR_INIT_REFS: [modid, flags, n x valueid]
6203+ // FS_COMBINED_GLOBALVAR_INIT_REFS: [valueid, modid, flags, n x valueid]
62316204 case bitc::FS_COMBINED_GLOBALVAR_INIT_REFS: {
6232- uint64_t ModuleId = Record[0 ];
6233- uint64_t RawFlags = Record[1 ];
6205+ unsigned ValueID = Record[0 ];
6206+ uint64_t ModuleId = Record[1 ];
6207+ uint64_t RawFlags = Record[2 ];
62346208 auto Flags = getDecodedGVSummaryFlags (RawFlags, Version);
62356209 std::unique_ptr<GlobalVarSummary> FS =
62366210 llvm::make_unique<GlobalVarSummary>(Flags);
62376211 LastSeenSummary = FS.get ();
62386212 FS->setModulePath (ModuleIdMap[ModuleId]);
6239- for (unsigned I = 2 , E = Record.size (); I != E; ++I) {
6213+ for (unsigned I = 3 , E = Record.size (); I != E; ++I) {
62406214 unsigned RefValueId = Record[I];
62416215 GlobalValue::GUID RefGUID = getGUIDFromValueId (RefValueId).first ;
62426216 FS->addRefEdge (RefGUID);
62436217 }
6244- GlobalValue::GUID GUID = getGUIDFromOffset (CurRecordBit);
6245- OffsetToSummaryMap[CurRecordBit] = FS.get ();
6218+ GlobalValue::GUID GUID = getGUIDFromValueId (ValueID).first ;
62466219 TheIndex->addGlobalValueSummary (GUID, std::move (FS));
62476220 Combined = true ;
62486221 break ;
0 commit comments