summaryrefslogtreecommitdiffstats
path: root/llvm/lib/IR/FunctionInfo.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/IR/FunctionInfo.cpp')
-rw-r--r--llvm/lib/IR/FunctionInfo.cpp45
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;
}
}
OpenPOWER on IntegriCloud