diff options
Diffstat (limited to 'contrib')
-rw-r--r-- | contrib/ChangeLog | 6 | ||||
-rw-r--r-- | contrib/ChangeLog.jit | 14 | ||||
-rw-r--r-- | contrib/jit-coverage-report.py | 67 |
3 files changed, 87 insertions, 0 deletions
diff --git a/contrib/ChangeLog b/contrib/ChangeLog index d02e3fc..2484d86 100644 --- a/contrib/ChangeLog +++ b/contrib/ChangeLog @@ -1,3 +1,9 @@ +2014-11-11 David Malcolm <dmalcolm@redhat.com> + + * ChangeLog.jit: New. + * jit-coverage-report.py: New file: a script to print crude + code-coverage information for the libgccjit API. + 2014-11-11 Marat Zakirov <m.zakirov@samsung.com> * mklog: Symbol '}' stops search for changes. diff --git a/contrib/ChangeLog.jit b/contrib/ChangeLog.jit new file mode 100644 index 0000000..38a315a --- /dev/null +++ b/contrib/ChangeLog.jit @@ -0,0 +1,14 @@ +2014-09-24 David Malcolm <dmalcolm@redhat.com> + + * ChangeLog.jit: Add copyright footer. + +2014-01-23 David Malcolm <dmalcolm@redhat.com> + + * jit-coverage-report.py: New file: a script to print crude + code-coverage information for the libgccjit API. + +Copyright (C) 2014 Free Software Foundation, Inc. + +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. diff --git a/contrib/jit-coverage-report.py b/contrib/jit-coverage-report.py new file mode 100644 index 0000000..529336f --- /dev/null +++ b/contrib/jit-coverage-report.py @@ -0,0 +1,67 @@ +#! /usr/bin/python +# +# Print a report on which libgccjit.so symbols are used in which test +# cases, and which lack test coverage. Tested with Python 2.7 and 3.2 +# To be run from the root directory of the source tree. +# +# Copyright (C) 2014 Free Software Foundation, Inc. +# Written by David Malcolm <dmalcolm@redhat.com>. +# +# This script is Free Software, and it can be copied, distributed and +# modified as defined in the GNU General Public License. A copy of +# its license can be downloaded from http://www.gnu.org/copyleft/gpl.html + +from collections import Counter +import glob +import re +import sys + +def parse_map_file(path): + """ + Parse libgccjit.map, returning the symbols in the API as a list of str. + """ + syms = [] + with open(path) as f: + for line in f: + m = re.match('^\s+([a-z_]+);$', line) + if m: + syms.append(m.group(1)) + return syms + +def parse_test_case(path): + """ + Locate all symbol-like things in a C test case, yielding + them as a sequence of str. + """ + with open(path) as f: + for line in f: + for m in re.finditer('([_A-Za-z][_A-Za-z0-9]*)', line): + yield m.group(1) + +def find_test_cases(): + for path in glob.glob('gcc/testsuite/jit.dg/*.[ch]'): + yield path + +api_syms = parse_map_file('gcc/jit/libgccjit.map') + +syms_in_test_cases = {} +for path in find_test_cases(): + syms_in_test_cases[path] = list(parse_test_case(path)) + +uses = Counter() +for sym in sorted(api_syms): + print('symbol: %s' % sym) + uses[sym] = 0 + for path in syms_in_test_cases: + count = syms_in_test_cases[path].count(sym) + uses[sym] += count + if count: + print(' uses in %s: %i' % (path, count)) + if uses[sym] == 0: + print(' NEVER USED') + sys.stdout.write('\n') + +layout = '%40s %5s %s' +print(layout % ('SYMBOL', 'USES', 'HISTOGRAM')) +for sym, count in uses.most_common(): + print(layout % (sym, count, '*' * count if count else 'UNUSED')) |