#!/usr/bin/env python from __future__ import print_function import re, string, sys, os, time DEBUG = 0 testDirName = 'llvm-test' test = ['compile', 'llc', 'jit', 'cbe'] exectime = ['llc-time', 'jit-time', 'cbe-time',] comptime = ['llc', 'jit-comptime', 'compile'] (tp, exp) = ('compileTime_', 'executeTime_') def parse(file): f=open(file, 'r') d = f.read() #Cleanup weird stuff d = re.sub(r',\d+:\d','', d) r = re.findall(r'TEST-(PASS|FAIL|RESULT.*?):\s+(.*?)\s+(.*?)\r*\n', d) test = {} fname = '' for t in r: if DEBUG: print(t) if t[0] == 'PASS' or t[0] == 'FAIL' : tmp = t[2].split(testDirName) if DEBUG: print(tmp) if len(tmp) == 2: fname = tmp[1].strip('\r\n') else: fname = tmp[0].strip('\r\n') if fname not in test : test[fname] = {} for k in test: test[fname][k] = 'NA' test[fname][t[1]] = t[0] if DEBUG: print(test[fname][t[1]]) else : try: n = t[0].split('RESULT-')[1] if DEBUG: print(n); if n == 'llc' or n == 'jit-comptime' or n == 'compile': test[fname][tp + n] = float(t[2].split(' ')[2]) if DEBUG: print(test[fname][tp + n]) elif n.endswith('-time') : test[fname][exp + n] = float(t[2].strip('\r\n')) if DEBUG: print(test[fname][exp + n]) else : print("ERROR!") sys.exit(1) except: continue return test # Diff results and look for regressions. def diffResults(d_old, d_new): for t in sorted(d_old.keys()) : if DEBUG: print(t) if t in d_new : # Check if the test passed or failed. for x in test: if x in d_old[t]: if x in d_new[t]: if d_old[t][x] == 'PASS': if d_new[t][x] != 'PASS': print(t + " *** REGRESSION (" + x + ")\n") else: if d_new[t][x] == 'PASS': print(t + " * NEW PASS (" + x + ")\n") else : print(t + "*** REGRESSION (" + x + ")\n") # For execution time, if there is no result, its a fail. for x in exectime: if tp + x in d_old[t]: if tp + x not in d_new[t]: print(t + " *** REGRESSION (" + tp + x + ")\n") else : if tp + x in d_new[t]: print(t + " * NEW PASS (" + tp + x + ")\n") for x in comptime: if exp + x in d_old[t]: if exp + x not in d_new[t]: print(t + " *** REGRESSION (" + exp + x + ")\n") else : if exp + x in d_new[t]: print(t + " * NEW PASS (" + exp + x + ")\n") else : print(t + ": Removed from test-suite.\n") #Main if len(sys.argv) < 3 : print('Usage:', sys.argv[0], \ ' ') sys.exit(-1) d_old = parse(sys.argv[1]) d_new = parse(sys.argv[2]) diffResults(d_old, d_new)