#!/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)