| Index: szdiff.py
|
| diff --git a/szdiff.py b/szdiff.py
|
| index f2696e8330816c257ae550305c2af3fdd2502019..9b8d613e1a20625e5a9985654d4dc4c384daba2b 100755
|
| --- a/szdiff.py
|
| +++ b/szdiff.py
|
| @@ -2,45 +2,40 @@
|
|
|
| import argparse
|
| import itertools
|
| -import subprocess
|
| import re
|
|
|
| if __name__ == '__main__':
|
| - """Runs llvm2ice on an input .ll file, and compares the output
|
| - against the input.
|
| + """Compares a LLVM file with a subzero file for differences.
|
|
|
| - Before comparing, the input file is massaged to remove comments,
|
| + Before comparing, the LLVM file is massaged to remove comments,
|
| blank lines, global variable definitions, external function
|
| declarations, and possibly other patterns that llvm2ice does not
|
| handle.
|
|
|
| - The output file and the massaged input file are compared line by
|
| + The subzero file and the massaged LLVM file are compared line by
|
| line for differences. However, there is a regex defined such that
|
| - if the regex matches a line in the input file, that line and the
|
| - corresponding line in the output file are ignored. This lets us
|
| + if the regex matches a line in the LLVM file, that line and the
|
| + corresponding line in the subzero file are ignored. This lets us
|
| ignore minor differences such as inttoptr and ptrtoint, and
|
| printing of floating-point constants.
|
|
|
| On success, no output is produced. On failure, each mismatch is
|
| - printed as two lines, one starting with 'SZ' and one starting with
|
| - 'LL'.
|
| + printed as two lines, one starting with 'SZ' (subzero) and one
|
| + starting with 'LL' (LLVM).
|
| """
|
| - desc = 'Compare llvm2ice output against bitcode input.'
|
| + desc = 'Compare LLVM and subzero bitcode files.'
|
| argparser = argparse.ArgumentParser(description=desc)
|
| argparser.add_argument(
|
| - 'llfile', nargs='?', default='-',
|
| - type=argparse.FileType('r'), metavar='FILE',
|
| - help='Textual bitcode file [default stdin]')
|
| + 'llfile', nargs=1,
|
| + type=argparse.FileType('r'), metavar='LLVM_FILE',
|
| + help='LLVM bitcode file')
|
| argparser.add_argument(
|
| - '--llvm2ice', required=False, default='./llvm2ice', metavar='LLVM2ICE',
|
| - help='Path to llvm2ice driver program [default ./llvm2ice]')
|
| + 'szfile', nargs='?', default='-',
|
| + type=argparse.FileType('r'), metavar='SUBZERO_FILE',
|
| + help='Subzero bitcode file [default stdin]')
|
| args = argparser.parse_args()
|
| - bitcode = args.llfile.readlines()
|
| -
|
| - # Run llvm2ice and collect its output lines into sz_out.
|
| - command = [args.llvm2ice, '-verbose', 'inst', '-notranslate', '-']
|
| - p = subprocess.Popen(command, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
|
| - sz_out = p.communicate(input=''.join(bitcode))[0].splitlines()
|
| + bitcode = args.llfile[0].readlines()
|
| + sz_out = [ line.rstrip() for line in args.szfile.readlines()]
|
|
|
| # Filter certain lines and patterns from the input, and collect
|
| # the remainder into llc_out.
|
| @@ -63,11 +58,12 @@ if __name__ == '__main__':
|
| lines_total = 0
|
| lines_diff = 0
|
| ignore_pattern = re.compile(
|
| - '|'.join([' -[0-9]', # negative constants
|
| - ' (float|double) [-0-9]', # FP constants
|
| + '|'.join([' -[0-9]', # negative constants
|
| + ' (float|double) [-0-9]', # FP constants
|
| ' (float|double) %\w+, [-0-9]',
|
| - ' inttoptr ', # inttoptr pointer types
|
| - ' ptrtoint ' # ptrtoint pointer types
|
| + ' inttoptr ', # inttoptr pointer types
|
| + ' ptrtoint ', # ptrtoint pointer types
|
| + ' bitcast .*\* .* to .*\*' # bitcast pointer types
|
| ]))
|
| for (sz_line, llc_line) in itertools.izip_longest(sz_out, llc_out):
|
| lines_total += 1
|
|
|