From fb7c7644965d5d28b5bea1d3061c1703ce925a07 Mon Sep 17 00:00:00 2001 From: Teresa Johnson Date: Tue, 5 Apr 2016 00:40:16 +0000 Subject: [PATCH] [ThinLTO] Refactor some common code into getGlobalValueInfo method (NFC) Refactor common code that queries the ModuleSummaryIndex for a value's GlobalValueInfo struct into getGlobalValueInfo helper methods, which will also be used by D18763. llvm-svn: 265370 --- llvm/include/llvm/IR/ModuleSummaryIndex.h | 14 ++++++++++++++ llvm/lib/Bitcode/Reader/BitcodeReader.cpp | 14 ++------------ llvm/lib/IR/ModuleSummaryIndex.cpp | 12 ++++++++++++ 3 files changed, 28 insertions(+), 12 deletions(-) diff --git a/llvm/include/llvm/IR/ModuleSummaryIndex.h b/llvm/include/llvm/IR/ModuleSummaryIndex.h index b4240e7aee9a..681ebd4dc600 100644 --- a/llvm/include/llvm/IR/ModuleSummaryIndex.h +++ b/llvm/include/llvm/IR/ModuleSummaryIndex.h @@ -309,6 +309,20 @@ public: GlobalValueMap[ValueGUID].push_back(std::move(Info)); } + /// Returns the first GlobalValueInfo for \p GV, asserting that there + /// is only one if \p PerModuleIndex. + GlobalValueInfo *getGlobalValueInfo(const GlobalValue &GV, + bool PerModuleIndex = true) const { + assert(GV.hasName() && "Can't get GlobalValueInfo for GV with no name"); + return getGlobalValueInfo(GlobalValue::getGUID(GV.getName()), + PerModuleIndex); + } + + /// Returns the first GlobalValueInfo for \p ValueGUID, asserting that there + /// is only one if \p PerModuleIndex. + GlobalValueInfo *getGlobalValueInfo(GlobalValue::GUID ValueGUID, + bool PerModuleIndex = true) const; + /// Table of modules, containing module hash and id. const StringMap> &modulePaths() const { return ModulePathStringTable; diff --git a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp index 09e5220b9192..39f2d6ae333b 100644 --- a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp +++ b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp @@ -5824,12 +5824,7 @@ std::error_code ModuleSummaryIndexBitcodeReader::parseEntireSummary() { CalleeInfo(CallsiteCount, ProfileCount)); } GlobalValue::GUID GUID = getGUIDFromValueId(ValueID); - auto InfoList = TheIndex->findGlobalValueInfoList(GUID); - assert(InfoList != TheIndex->end() && - "Expected VST parse to create GlobalValueInfo entry"); - assert(InfoList->second.size() == 1 && - "Expected a single GlobalValueInfo per GUID in module"); - auto &Info = InfoList->second[0]; + auto *Info = TheIndex->getGlobalValueInfo(GUID); assert(!Info->summary() && "Expected a single summary per VST entry"); Info->setSummary(std::move(FS)); break; @@ -5848,12 +5843,7 @@ std::error_code ModuleSummaryIndexBitcodeReader::parseEntireSummary() { FS->addRefEdge(RefGUID); } GlobalValue::GUID GUID = getGUIDFromValueId(ValueID); - auto InfoList = TheIndex->findGlobalValueInfoList(GUID); - assert(InfoList != TheIndex->end() && - "Expected VST parse to create GlobalValueInfo entry"); - assert(InfoList->second.size() == 1 && - "Expected a single GlobalValueInfo per GUID in module"); - auto &Info = InfoList->second[0]; + auto *Info = TheIndex->getGlobalValueInfo(GUID); assert(!Info->summary() && "Expected a single summary per VST entry"); Info->setSummary(std::move(FS)); break; diff --git a/llvm/lib/IR/ModuleSummaryIndex.cpp b/llvm/lib/IR/ModuleSummaryIndex.cpp index 5effc65158d4..340eccac6bdd 100644 --- a/llvm/lib/IR/ModuleSummaryIndex.cpp +++ b/llvm/lib/IR/ModuleSummaryIndex.cpp @@ -68,3 +68,15 @@ void ModuleSummaryIndex::removeEmptySummaryEntries() { ++MI; } } + +GlobalValueInfo * +ModuleSummaryIndex::getGlobalValueInfo(uint64_t ValueGUID, + bool PerModuleIndex) const { + auto InfoList = findGlobalValueInfoList(ValueGUID); + assert(InfoList != end() && "GlobalValue not found in index"); + assert(!PerModuleIndex || + InfoList->second.size() == 1 && + "Expected a single entry per global value in per-module index"); + auto &Info = InfoList->second[0]; + return Info.get(); +}