@@ -851,7 +851,7 @@ class FunctionSummary : public GlobalValueSummary {
851851 // / Create an empty FunctionSummary (with specified call edges).
852852 // / Used to represent external nodes and the dummy root node.
853853 static FunctionSummary
854- makeDummyFunctionSummary (std::vector <FunctionSummary::EdgeTy> Edges) {
854+ makeDummyFunctionSummary (SmallVectorImpl <FunctionSummary::EdgeTy> && Edges) {
855855 return FunctionSummary (
856856 FunctionSummary::GVFlags (
857857 GlobalValue::LinkageTypes::AvailableExternallyLinkage,
@@ -880,7 +880,9 @@ class FunctionSummary : public GlobalValueSummary {
880880 FFlags FunFlags;
881881
882882 // / List of <CalleeValueInfo, CalleeInfo> call edge pairs from this function.
883- std::vector<EdgeTy> CallGraphEdgeList;
883+ // / We use SmallVector<ValueInfo, 0> instead of std::vector<ValueInfo> for its
884+ // / smaller memory footprint.
885+ SmallVector<EdgeTy, 0 > CallGraphEdgeList;
884886
885887 std::unique_ptr<TypeIdInfo> TIdInfo;
886888
@@ -910,7 +912,7 @@ class FunctionSummary : public GlobalValueSummary {
910912public:
911913 FunctionSummary (GVFlags Flags, unsigned NumInsts, FFlags FunFlags,
912914 SmallVectorImpl<ValueInfo> &&Refs,
913- std::vector <EdgeTy> CGEdges,
915+ SmallVectorImpl <EdgeTy> && CGEdges,
914916 std::vector<GlobalValue::GUID> TypeTests,
915917 std::vector<VFuncId> TypeTestAssumeVCalls,
916918 std::vector<VFuncId> TypeCheckedLoadVCalls,
@@ -957,7 +959,7 @@ class FunctionSummary : public GlobalValueSummary {
957959 // / Return the list of <CalleeValueInfo, CalleeInfo> pairs.
958960 ArrayRef<EdgeTy> calls () const { return CallGraphEdgeList; }
959961
960- std::vector <EdgeTy> &mutableCalls () { return CallGraphEdgeList; }
962+ SmallVector <EdgeTy, 0 > &mutableCalls () { return CallGraphEdgeList; }
961963
962964 void addCall (EdgeTy E) { CallGraphEdgeList.push_back (E); }
963965
@@ -1535,7 +1537,7 @@ class ModuleSummaryIndex {
15351537 discoverNodes (ValueInfo (HaveGVs, &S), FunctionHasParent);
15361538 }
15371539
1538- std::vector <FunctionSummary::EdgeTy> Edges;
1540+ SmallVector <FunctionSummary::EdgeTy, 0 > Edges;
15391541 // create edges to all roots in the Index
15401542 for (auto &P : FunctionHasParent) {
15411543 if (P.second )
@@ -1544,9 +1546,11 @@ class ModuleSummaryIndex {
15441546 }
15451547 if (Edges.empty ()) {
15461548 // Failed to find root - return an empty node
1547- return FunctionSummary::makeDummyFunctionSummary ({});
1549+ return FunctionSummary::makeDummyFunctionSummary (
1550+ SmallVector<FunctionSummary::EdgeTy, 0 >());
15481551 }
1549- auto CallGraphRoot = FunctionSummary::makeDummyFunctionSummary (Edges);
1552+ auto CallGraphRoot =
1553+ FunctionSummary::makeDummyFunctionSummary (std::move (Edges));
15501554 return CallGraphRoot;
15511555 }
15521556
@@ -1894,10 +1898,11 @@ template <> struct GraphTraits<ValueInfo> {
18941898 return P.first ;
18951899 }
18961900 using ChildIteratorType =
1897- mapped_iterator<std::vector <FunctionSummary::EdgeTy>::iterator,
1901+ mapped_iterator<SmallVector <FunctionSummary::EdgeTy, 0 >::iterator,
18981902 decltype (&valueInfoFromEdge)>;
18991903
1900- using ChildEdgeIteratorType = std::vector<FunctionSummary::EdgeTy>::iterator;
1904+ using ChildEdgeIteratorType =
1905+ SmallVector<FunctionSummary::EdgeTy, 0 >::iterator;
19011906
19021907 static NodeRef getEntryNode (ValueInfo V) { return V; }
19031908
0 commit comments