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