1*7330f729Sjoerg#!/usr/bin/env python 2*7330f729Sjoergfrom __future__ import print_function 3*7330f729Sjoerg 4*7330f729Sjoergimport re, string, sys, os, time 5*7330f729Sjoerg 6*7330f729SjoergDEBUG = 0 7*7330f729SjoergtestDirName = 'llvm-test' 8*7330f729Sjoergtest = ['compile', 'llc', 'jit', 'cbe'] 9*7330f729Sjoergexectime = ['llc-time', 'jit-time', 'cbe-time',] 10*7330f729Sjoergcomptime = ['llc', 'jit-comptime', 'compile'] 11*7330f729Sjoerg 12*7330f729Sjoerg(tp, exp) = ('compileTime_', 'executeTime_') 13*7330f729Sjoerg 14*7330f729Sjoergdef parse(file): 15*7330f729Sjoerg f=open(file, 'r') 16*7330f729Sjoerg d = f.read() 17*7330f729Sjoerg 18*7330f729Sjoerg #Cleanup weird stuff 19*7330f729Sjoerg d = re.sub(r',\d+:\d','', d) 20*7330f729Sjoerg 21*7330f729Sjoerg r = re.findall(r'TEST-(PASS|FAIL|RESULT.*?):\s+(.*?)\s+(.*?)\r*\n', d) 22*7330f729Sjoerg 23*7330f729Sjoerg test = {} 24*7330f729Sjoerg fname = '' 25*7330f729Sjoerg for t in r: 26*7330f729Sjoerg if DEBUG: 27*7330f729Sjoerg print(t) 28*7330f729Sjoerg if t[0] == 'PASS' or t[0] == 'FAIL' : 29*7330f729Sjoerg tmp = t[2].split(testDirName) 30*7330f729Sjoerg 31*7330f729Sjoerg if DEBUG: 32*7330f729Sjoerg print(tmp) 33*7330f729Sjoerg 34*7330f729Sjoerg if len(tmp) == 2: 35*7330f729Sjoerg fname = tmp[1].strip('\r\n') 36*7330f729Sjoerg else: 37*7330f729Sjoerg fname = tmp[0].strip('\r\n') 38*7330f729Sjoerg 39*7330f729Sjoerg if fname not in test : 40*7330f729Sjoerg test[fname] = {} 41*7330f729Sjoerg 42*7330f729Sjoerg for k in test: 43*7330f729Sjoerg test[fname][k] = 'NA' 44*7330f729Sjoerg test[fname][t[1]] = t[0] 45*7330f729Sjoerg if DEBUG: 46*7330f729Sjoerg print(test[fname][t[1]]) 47*7330f729Sjoerg else : 48*7330f729Sjoerg try: 49*7330f729Sjoerg n = t[0].split('RESULT-')[1] 50*7330f729Sjoerg 51*7330f729Sjoerg if DEBUG: 52*7330f729Sjoerg print(n); 53*7330f729Sjoerg 54*7330f729Sjoerg if n == 'llc' or n == 'jit-comptime' or n == 'compile': 55*7330f729Sjoerg test[fname][tp + n] = float(t[2].split(' ')[2]) 56*7330f729Sjoerg if DEBUG: 57*7330f729Sjoerg print(test[fname][tp + n]) 58*7330f729Sjoerg 59*7330f729Sjoerg elif n.endswith('-time') : 60*7330f729Sjoerg test[fname][exp + n] = float(t[2].strip('\r\n')) 61*7330f729Sjoerg if DEBUG: 62*7330f729Sjoerg print(test[fname][exp + n]) 63*7330f729Sjoerg 64*7330f729Sjoerg else : 65*7330f729Sjoerg print("ERROR!") 66*7330f729Sjoerg sys.exit(1) 67*7330f729Sjoerg 68*7330f729Sjoerg except: 69*7330f729Sjoerg continue 70*7330f729Sjoerg 71*7330f729Sjoerg return test 72*7330f729Sjoerg 73*7330f729Sjoerg# Diff results and look for regressions. 74*7330f729Sjoergdef diffResults(d_old, d_new): 75*7330f729Sjoerg 76*7330f729Sjoerg for t in sorted(d_old.keys()) : 77*7330f729Sjoerg if DEBUG: 78*7330f729Sjoerg print(t) 79*7330f729Sjoerg 80*7330f729Sjoerg if t in d_new : 81*7330f729Sjoerg 82*7330f729Sjoerg # Check if the test passed or failed. 83*7330f729Sjoerg for x in test: 84*7330f729Sjoerg if x in d_old[t]: 85*7330f729Sjoerg if x in d_new[t]: 86*7330f729Sjoerg if d_old[t][x] == 'PASS': 87*7330f729Sjoerg if d_new[t][x] != 'PASS': 88*7330f729Sjoerg print(t + " *** REGRESSION (" + x + ")\n") 89*7330f729Sjoerg else: 90*7330f729Sjoerg if d_new[t][x] == 'PASS': 91*7330f729Sjoerg print(t + " * NEW PASS (" + x + ")\n") 92*7330f729Sjoerg 93*7330f729Sjoerg else : 94*7330f729Sjoerg print(t + "*** REGRESSION (" + x + ")\n") 95*7330f729Sjoerg 96*7330f729Sjoerg # For execution time, if there is no result, its a fail. 97*7330f729Sjoerg for x in exectime: 98*7330f729Sjoerg if tp + x in d_old[t]: 99*7330f729Sjoerg if tp + x not in d_new[t]: 100*7330f729Sjoerg print(t + " *** REGRESSION (" + tp + x + ")\n") 101*7330f729Sjoerg 102*7330f729Sjoerg else : 103*7330f729Sjoerg if tp + x in d_new[t]: 104*7330f729Sjoerg print(t + " * NEW PASS (" + tp + x + ")\n") 105*7330f729Sjoerg 106*7330f729Sjoerg 107*7330f729Sjoerg for x in comptime: 108*7330f729Sjoerg if exp + x in d_old[t]: 109*7330f729Sjoerg if exp + x not in d_new[t]: 110*7330f729Sjoerg print(t + " *** REGRESSION (" + exp + x + ")\n") 111*7330f729Sjoerg 112*7330f729Sjoerg else : 113*7330f729Sjoerg if exp + x in d_new[t]: 114*7330f729Sjoerg print(t + " * NEW PASS (" + exp + x + ")\n") 115*7330f729Sjoerg 116*7330f729Sjoerg else : 117*7330f729Sjoerg print(t + ": Removed from test-suite.\n") 118*7330f729Sjoerg 119*7330f729Sjoerg 120*7330f729Sjoerg#Main 121*7330f729Sjoergif len(sys.argv) < 3 : 122*7330f729Sjoerg print('Usage:', sys.argv[0], \ 123*7330f729Sjoerg '<old log> <new log>') 124*7330f729Sjoerg sys.exit(-1) 125*7330f729Sjoerg 126*7330f729Sjoergd_old = parse(sys.argv[1]) 127*7330f729Sjoergd_new = parse(sys.argv[2]) 128*7330f729Sjoerg 129*7330f729Sjoerg 130*7330f729SjoergdiffResults(d_old, d_new) 131*7330f729Sjoerg 132*7330f729Sjoerg 133