[Profile] dump ic value profile value/site-count histogram
authorXinliang David Li <davidxl@google.com>
Tue, 20 Sep 2016 21:04:22 +0000 (21:04 +0000)
committerXinliang David Li <davidxl@google.com>
Tue, 20 Sep 2016 21:04:22 +0000 (21:04 +0000)
Differential Revision: http://reviews.google.com/D24783

llvm-svn: 282017

llvm/test/tools/llvm-profdata/value-prof.proftext
llvm/tools/llvm-profdata/llvm-profdata.cpp

index 75a7456..b5979c8 100644 (file)
@@ -66,4 +66,7 @@ foo2:20000
 #ICSUM: Total Number of Indirect Call Sites : 3
 #ICSUM: Total Number of Sites With Values : 2
 #ICSUM: Total Number of Profiled Values : 3
+#ICSUM:        NumTargets, SiteCount
+#ICSUM 1, 1
+#ICSUM 2, 1
 
index d5c05da..059c4dc 100644 (file)
@@ -463,6 +463,7 @@ static int showInstrProfile(const std::string &Filename, bool ShowCounts,
   uint64_t TotalNumValueSites = 0;
   uint64_t TotalNumValueSitesWithValueProfile = 0;
   uint64_t TotalNumValues = 0;
+  std::vector<unsigned> ICHistogram;
   for (const auto &Func : *Reader) {
     bool Show =
         ShowAllFunctions || (!ShowFunction.empty() &&
@@ -515,8 +516,12 @@ static int showInstrProfile(const std::string &Filename, bool ShowCounts,
           std::unique_ptr<InstrProfValueData[]> VD =
               Func.getValueForSite(IPVK_IndirectCallTarget, I);
           TotalNumValues += NV;
-          if (NV)
+          if (NV) {
             TotalNumValueSitesWithValueProfile++;
+            if (NV > ICHistogram.size())
+              ICHistogram.resize(NV, 0);
+            ICHistogram[NV - 1]++;
+          }
           for (uint32_t V = 0; V < NV; V++) {
             OS << "\t[ " << I << ", ";
             OS << Symtab.getFuncName(VD[V].Value) << ", " << VD[V].Count
@@ -543,6 +548,11 @@ static int showInstrProfile(const std::string &Filename, bool ShowCounts,
     OS << "Total Number of Sites With Values : "
        << TotalNumValueSitesWithValueProfile << "\n";
     OS << "Total Number of Profiled Values : " << TotalNumValues << "\n";
+
+    OS << "IC Value histogram : \n\tNumTargets, SiteCount\n";
+    for (unsigned I = 0; I < ICHistogram.size(); I++) {
+      OS << "\t" << I + 1 << ", " << ICHistogram[I] << "\n";
+    }
   }
 
   if (ShowDetailedSummary) {