diff options
Diffstat (limited to 'llvm/lib/IR/FunctionInfo.cpp')
| -rw-r--r-- | llvm/lib/IR/FunctionInfo.cpp | 45 |
1 files changed, 28 insertions, 17 deletions
diff --git a/llvm/lib/IR/FunctionInfo.cpp b/llvm/lib/IR/FunctionInfo.cpp index 246023907f9..e9a598d1435 100644 --- a/llvm/lib/IR/FunctionInfo.cpp +++ b/llvm/lib/IR/FunctionInfo.cpp @@ -7,7 +7,7 @@ // //===----------------------------------------------------------------------===// // -// This file implements the function info index and summary classes for the +// This file implements the module index and summary classes for the // IR library. // //===----------------------------------------------------------------------===// @@ -16,42 +16,53 @@ #include "llvm/ADT/StringMap.h" using namespace llvm; -// Create the combined function index/summary from multiple +// Create the combined module index/summary from multiple // per-module instances. void FunctionInfoIndex::mergeFrom(std::unique_ptr<FunctionInfoIndex> Other, uint64_t NextModuleId) { StringRef ModPath; - for (auto &OtherFuncInfoLists : *Other) { - uint64_t FuncGUID = OtherFuncInfoLists.first; - FunctionInfoList &List = OtherFuncInfoLists.second; + for (auto &OtherGlobalValInfoLists : *Other) { + uint64_t ValueGUID = OtherGlobalValInfoLists.first; + GlobalValueInfoList &List = OtherGlobalValInfoLists.second; - // Assert that the func info list only has one entry, since we shouldn't + // Assert that the value info list only has one entry, since we shouldn't // have duplicate names within a single per-module index. assert(List.size() == 1); - std::unique_ptr<FunctionInfo> Info = std::move(List.front()); + std::unique_ptr<GlobalValueInfo> Info = std::move(List.front()); - // Skip if there was no function summary section. - if (!Info->functionSummary()) + // Skip if there was no summary section. + if (!Info->summary()) continue; // Add the module path string ref for this module if we haven't already // saved a reference to it. if (ModPath.empty()) - ModPath = - addModulePath(Info->functionSummary()->modulePath(), NextModuleId); + ModPath = addModulePath(Info->summary()->modulePath(), NextModuleId); else - assert(ModPath == Info->functionSummary()->modulePath() && + assert(ModPath == Info->summary()->modulePath() && "Each module in the combined map should have a unique ID"); // Note the module path string ref was copied above and is still owned by // the original per-module index. Reset it to the new module path // string reference owned by the combined index. - Info->functionSummary()->setModulePath(ModPath); + Info->summary()->setModulePath(ModPath); - // Add new function info to existing list. There may be duplicates when - // combining FunctionMap entries, due to COMDAT functions. Any local - // functions were given unique global IDs. - addFunctionInfo(FuncGUID, std::move(Info)); + // Add new value info to existing list. There may be duplicates when + // combining GlobalValueMap entries, due to COMDAT values. Any local + // values were given unique global IDs. + addGlobalValueInfo(ValueGUID, std::move(Info)); + } +} + +void FunctionInfoIndex::removeEmptySummaryEntries() { + for (auto MI = begin(), MIE = end(); MI != MIE;) { + // Only expect this to be called on a per-module index, which has a single + // entry per value entry list. + assert(MI->second.size() == 1); + if (!MI->second[0]->summary()) + MI = GlobalValueMap.erase(MI); + else + ++MI; } } |

