Add sorting support to analyze_brprob script
authorMartin Liska <mliska@suse.cz>
Thu, 9 Jun 2016 11:38:23 +0000 (13:38 +0200)
committerMartin Liska <marxin@gcc.gnu.org>
Thu, 9 Jun 2016 11:38:23 +0000 (11:38 +0000)
* analyze_brprob.py: Add new argument --sorting.

From-SVN: r237256

contrib/ChangeLog
contrib/analyze_brprob.py

index 6c80c1edbe3f8978324d642fa944c274ab9f24d3..8017e48d9a1e6c9e0202fd7e28ac7eb1cf64eaed 100644 (file)
@@ -1,3 +1,7 @@
+2016-06-09  Martin Liska  <mliska@suse.cz>
+
+       * analyze_brprob.py: Add new argument --sorting.
+
 2016-06-09  Martin Liska  <mliska@suse.cz>
 
        * analyze_brprob.py: Cover new dump output format.
index 9416eed3b44bfa7f5bb38fecd88c7e3c004dcecc..9808c46de16c4c9f87a0adb50f56f17f7ff4933e 100755 (executable)
@@ -65,6 +65,7 @@
 import sys
 import os
 import re
+import argparse
 
 def percentage(a, b):
     return 100.0 * a / b
@@ -77,6 +78,9 @@ class Summary:
         self.hits = 0
         self.fits = 0
 
+    def get_hitrate(self):
+        return self.hits / self.count
+
     def count_formatted(self):
         v = self.count
         for unit in ['','K','M','G','T','P','E','Z']:
@@ -108,22 +112,30 @@ class Profile:
     def count_max(self):
         return max([v.count for k, v in self.heuristics.items()])
 
-    def dump(self):
+    def dump(self, sorting):
+        sorter = lambda x: x[1].branches
+        if sorting == 'hitrate':
+            sorter = lambda x: x[1].get_hitrate()
+        elif sorting == 'coverage':
+            sorter = lambda x: x[1].count
+
         print('%-36s %8s %6s  %-16s %14s %8s %6s' % ('HEURISTICS', 'BRANCHES', '(REL)',
               'HITRATE', 'COVERAGE', 'COVERAGE', '(REL)'))
-        for (k, v) in sorted(self.heuristics.items(), key = lambda x: x[1].branches):
+        for (k, v) in sorted(self.heuristics.items(), key = sorter):
             print('%-36s %8i %5.1f%% %6.2f%% / %6.2f%% %14i %8s %5.1f%%' %
             (k, v.branches, percentage(v.branches, self.branches_max ()),
              percentage(v.hits, v.count), percentage(v.fits, v.count),
              v.count, v.count_formatted(), percentage(v.count, self.count_max()) ))
 
-if len(sys.argv) != 2:
-    print('Usage: ./analyze_brprob.py dump_file')
-    exit(1)
+parser = argparse.ArgumentParser()
+parser.add_argument('dump_file', metavar = 'dump_file', help = 'IPA profile dump file')
+parser.add_argument('-s', '--sorting', dest = 'sorting', choices = ['branches', 'hitrate', 'coverage'], default = 'branches')
+
+args = parser.parse_args()
 
 profile = Profile(sys.argv[1])
 r = re.compile('  (.*) heuristics( of edge [0-9]*->[0-9]*)?( \\(.*\\))?: (.*)%.*exec ([0-9]*) hit ([0-9]*)')
-for l in open(profile.filename).readlines():
+for l in open(args.dump_file).readlines():
     m = r.match(l)
     if m != None and m.group(3) == None:
         name = m.group(1)
@@ -133,4 +145,4 @@ for l in open(profile.filename).readlines():
 
         profile.add(name, prediction, count, hits)
 
-profile.dump()
+profile.dump(args.sorting)