summaryrefslogtreecommitdiffstats
path: root/utils/analyzer
diff options
context:
space:
mode:
authorAnna Zaks <ganna@apple.com>2012-07-05 20:44:02 +0000
committerAnna Zaks <ganna@apple.com>2012-07-05 20:44:02 +0000
commit84c1f4b1edddf74f8080cfc470796c2c498b5d43 (patch)
treede77a35b830849147c698baf6bd3b1388fa28bfd /utils/analyzer
parenta1b62273f8cb823e74e7b67685c0c681efb8ff9d (diff)
[analyzer] Add a statistic for maximum CFG size and a script to summarize analyzer stats from scan-build output.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@159776 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'utils/analyzer')
-rw-r--r--utils/analyzer/SumTimerInfo.py75
1 files changed, 75 insertions, 0 deletions
diff --git a/utils/analyzer/SumTimerInfo.py b/utils/analyzer/SumTimerInfo.py
new file mode 100644
index 0000000000..a6731bb8f2
--- /dev/null
+++ b/utils/analyzer/SumTimerInfo.py
@@ -0,0 +1,75 @@
+#!/usr/bin/env python
+
+"""
+Script to Summarize statistics in the scan-build output.
+
+Statistics are enabled by passing '-internal-stats' option to scan-build
+(or '-analyzer-stats' to the analyzer).
+
+"""
+
+import string
+from operator import itemgetter
+import sys
+
+if __name__ == '__main__':
+ if len(sys.argv) < 2:
+ print >> sys.stderr, 'Usage: ', sys.argv[0],\
+ 'scan_build_output_file'
+ sys.exit(-1)
+
+ f = open(sys.argv[1], 'r')
+ Time = 0.0
+ TotalTime = 0.0
+ MaxTime = 0.0
+ Warnings = 0
+ Count = 0
+ FunctionsAnalyzed = 0
+ ReachableBlocks = 0
+ ReachedMaxSteps = 0
+ NumSteps = 0
+ MaxCFGSize = 0
+ Mode = 1
+ for line in f:
+ if ("Miscellaneous Ungrouped Timers" in line) :
+ Mode = 1
+ if (("Analyzer Total Time" in line) and (Mode == 1)) :
+ s = line.split()
+ Time = Time + float(s[6])
+ Count = Count + 1
+ if (float(s[6]) > MaxTime) :
+ MaxTime = float(s[6])
+ if ((("warning generated." in line) or ("warnings generated." in line)) and Mode == 1) :
+ s = line.split()
+ Warnings = Warnings + int(s[0])
+ if (("The # of functions analysed (as top level)." in line) and (Mode == 1)) :
+ s = line.split()
+ FunctionsAnalyzed = FunctionsAnalyzed + int(s[0])
+ if (("The % of reachable basic blocks" in line) and (Mode == 1)) :
+ s = line.split()
+ ReachableBlocks = ReachableBlocks + int(s[0])
+ if (("The # of times we reached the max number of steps." in line) and (Mode == 1)) :
+ s = line.split()
+ ReachedMaxSteps = ReachedMaxSteps + int(s[0])
+ if (("The maximum number of basic blocks in a function" in line) and (Mode == 1)) :
+ s = line.split()
+ if (MaxCFGSize < int(s[0])) :
+ MaxCFGSize = int(s[0])
+ if (("The # of steps executed." in line) and (Mode == 1)) :
+ s = line.split()
+ NumSteps = NumSteps + int(s[0])
+ if ((") Total" in line) and (Mode == 1)) :
+ s = line.split()
+ TotalTime = TotalTime + float(s[6])
+
+ print "TU Count %d" % (Count)
+ print "Time %f" % (Time)
+ print "Warnings %d" % (Warnings)
+ print "Functions Analyzed %d" % (FunctionsAnalyzed)
+ print "Reachable Blocks %d" % (ReachableBlocks)
+ print "Reached Max Steps %d" % (ReachedMaxSteps)
+ print "Number of Steps %d" % (NumSteps)
+ print "MaxTime %f" % (MaxTime)
+ print "TotalTime %f" % (TotalTime)
+ print "Max CFG Size %d" % (MaxCFGSize)
+ \ No newline at end of file