diff options
author | Piotr Padlewski <piotr.padlewski@gmail.com> | 2016-08-02 22:18:47 +0000 |
---|---|---|
committer | Piotr Padlewski <piotr.padlewski@gmail.com> | 2016-08-02 22:18:47 +0000 |
commit | 47509f618507faab74d5983d442937738607aa29 (patch) | |
tree | ad706dd9728d66852b019f12805de8d42993e1a4 /llvm/lib/Transforms/Utils/ImportedFunctionsInliningStatistics.cpp | |
parent | 777efb162000e9fc8ef3df3ba901c5d6f8bab829 (diff) | |
download | bcm5719-llvm-47509f618507faab74d5983d442937738607aa29.tar.gz bcm5719-llvm-47509f618507faab74d5983d442937738607aa29.zip |
Imported statistics types changes
Reviewers: tejohnson, eraman
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D22980
llvm-svn: 277534
Diffstat (limited to 'llvm/lib/Transforms/Utils/ImportedFunctionsInliningStatistics.cpp')
-rw-r--r-- | llvm/lib/Transforms/Utils/ImportedFunctionsInliningStatistics.cpp | 48 |
1 files changed, 25 insertions, 23 deletions
diff --git a/llvm/lib/Transforms/Utils/ImportedFunctionsInliningStatistics.cpp b/llvm/lib/Transforms/Utils/ImportedFunctionsInliningStatistics.cpp index 7f27e96602c..ed018bb7310 100644 --- a/llvm/lib/Transforms/Utils/ImportedFunctionsInliningStatistics.cpp +++ b/llvm/lib/Transforms/Utils/ImportedFunctionsInliningStatistics.cpp @@ -49,9 +49,14 @@ void ImportedFunctionsInliningStatistics::recordInline(const Function &Caller, } CallerNode.InlinedCallees.push_back(&CalleeNode); - if (!CallerNode.Imported) - // Save Caller as a starting node for traversal. - NonImportedCallers.push_back(Caller.getName()); + if (!CallerNode.Imported) { + // We could avoid second lookup, but it would make the code ultra ugly. + auto It = NodesMap.find(Caller.getName()); + assert(It != NodesMap.end() && "The node should be already there."); + // Save Caller as a starting node for traversal. The string has to be one + // from map because Caller can disappear (and function name with it). + NonImportedCallers.push_back(It->first()); + } } void ImportedFunctionsInliningStatistics::setModuleInfo(const Module &M) { @@ -98,27 +103,27 @@ void ImportedFunctionsInliningStatistics::dump(const bool Verbose) { Ostream << "-- List of inlined functions:\n"; for (const auto &Node : SortedNodes) { - assert(Node.second->NumberOfInlines >= Node.second->NumberOfRealInlines); - if (Node.second->NumberOfInlines == 0) + assert(Node->second->NumberOfInlines >= Node->second->NumberOfRealInlines); + if (Node->second->NumberOfInlines == 0) continue; - if (Node.second->Imported) { + if (Node->second->Imported) { InlinedImportedFunctionsCount++; InlinedImportedFunctionsToImportingModuleCount += - int(Node.second->NumberOfRealInlines > 0); + int(Node->second->NumberOfRealInlines > 0); } else { InlinedNotImportedFunctionsCount++; InlinedNotImportedFunctionsToImportingModuleCount += - int(Node.second->NumberOfRealInlines > 0); + int(Node->second->NumberOfRealInlines > 0); } if (Verbose) Ostream << "Inlined " - << (Node.second->Imported ? "imported " : "not imported ") - << "function [" << Node.first << "]" - << ": #inlines = " << Node.second->NumberOfInlines + << (Node->second->Imported ? "imported " : "not imported ") + << "function [" << Node->first() << "]" + << ": #inlines = " << Node->second->NumberOfInlines << ", #inlines_to_importing_module = " - << Node.second->NumberOfRealInlines << "\n"; + << Node->second->NumberOfRealInlines << "\n"; } auto InlinedFunctionsCount = @@ -180,22 +185,19 @@ ImportedFunctionsInliningStatistics::SortedNodesTy ImportedFunctionsInliningStatistics::getSortedNodes() { SortedNodesTy SortedNodes; SortedNodes.reserve(NodesMap.size()); - - for (auto &&Node : NodesMap) - SortedNodes.emplace_back(Node.first, std::move(Node.second)); - - NodesMap.clear(); // We don't want to leave nullptrs. + for (const NodesMapTy::value_type& Node : NodesMap) + SortedNodes.push_back(&Node); std::sort( SortedNodes.begin(), SortedNodes.end(), [&](const SortedNodesTy::value_type &Lhs, const SortedNodesTy::value_type &Rhs) { - if (Lhs.second->NumberOfInlines != Rhs.second->NumberOfInlines) - return Lhs.second->NumberOfInlines > Rhs.second->NumberOfInlines; - if (Lhs.second->NumberOfRealInlines != Rhs.second->NumberOfRealInlines) - return Lhs.second->NumberOfRealInlines > - Rhs.second->NumberOfRealInlines; - return Lhs.first < Rhs.first; + if (Lhs->second->NumberOfInlines != Rhs->second->NumberOfInlines) + return Lhs->second->NumberOfInlines > Rhs->second->NumberOfInlines; + if (Lhs->second->NumberOfRealInlines != Rhs->second->NumberOfRealInlines) + return Lhs->second->NumberOfRealInlines > + Rhs->second->NumberOfRealInlines; + return Lhs->first() < Rhs->first(); }); return SortedNodes; } |