blob: e7e13b08381241b92ed3a8226418160571a0fff1 [file] [log] [blame]
Bill Wendlingf4594a32012-04-20 20:31:44 +00001#!/usr/bin/env python
Serge Guelton60ccceb2019-01-03 14:11:33 +00002from __future__ import print_function
3
Bill Wendlingaec40112011-10-23 20:13:14 +00004import re, string, sys, os, time
5
6DEBUG = 0
7testDirName = 'llvm-test'
8test = ['compile', 'llc', 'jit', 'cbe']
9exectime = ['llc-time', 'jit-time', 'cbe-time',]
10comptime = ['llc', 'jit-comptime', 'compile']
11
12(tp, exp) = ('compileTime_', 'executeTime_')
13
14def parse(file):
15 f=open(file, 'r')
16 d = f.read()
17
18 #Cleanup weird stuff
19 d = re.sub(r',\d+:\d','', d)
20
21 r = re.findall(r'TEST-(PASS|FAIL|RESULT.*?):\s+(.*?)\s+(.*?)\r*\n', d)
22
23 test = {}
24 fname = ''
25 for t in r:
26 if DEBUG:
Serge Guelton60ccceb2019-01-03 14:11:33 +000027 print(t)
Bill Wendlingaec40112011-10-23 20:13:14 +000028 if t[0] == 'PASS' or t[0] == 'FAIL' :
29 tmp = t[2].split(testDirName)
30
31 if DEBUG:
Serge Guelton60ccceb2019-01-03 14:11:33 +000032 print(tmp)
Bill Wendlingaec40112011-10-23 20:13:14 +000033
34 if len(tmp) == 2:
35 fname = tmp[1].strip('\r\n')
36 else:
37 fname = tmp[0].strip('\r\n')
38
Serge Gueltonee72f592019-01-03 14:12:37 +000039 if fname not in test :
Bill Wendlingaec40112011-10-23 20:13:14 +000040 test[fname] = {}
41
42 for k in test:
43 test[fname][k] = 'NA'
44 test[fname][t[1]] = t[0]
45 if DEBUG:
Serge Guelton60ccceb2019-01-03 14:11:33 +000046 print(test[fname][t[1]])
Bill Wendlingaec40112011-10-23 20:13:14 +000047 else :
48 try:
49 n = t[0].split('RESULT-')[1]
50
51 if DEBUG:
Serge Guelton60ccceb2019-01-03 14:11:33 +000052 print(n);
Bill Wendlingaec40112011-10-23 20:13:14 +000053
54 if n == 'llc' or n == 'jit-comptime' or n == 'compile':
55 test[fname][tp + n] = float(t[2].split(' ')[2])
56 if DEBUG:
Serge Guelton60ccceb2019-01-03 14:11:33 +000057 print(test[fname][tp + n])
Bill Wendlingaec40112011-10-23 20:13:14 +000058
59 elif n.endswith('-time') :
60 test[fname][exp + n] = float(t[2].strip('\r\n'))
61 if DEBUG:
Serge Guelton60ccceb2019-01-03 14:11:33 +000062 print(test[fname][exp + n])
Bill Wendlingaec40112011-10-23 20:13:14 +000063
64 else :
Serge Guelton60ccceb2019-01-03 14:11:33 +000065 print("ERROR!")
Bill Wendlingaec40112011-10-23 20:13:14 +000066 sys.exit(1)
67
68 except:
69 continue
70
71 return test
72
73# Diff results and look for regressions.
74def diffResults(d_old, d_new):
75
76 for t in sorted(d_old.keys()) :
77 if DEBUG:
Serge Guelton60ccceb2019-01-03 14:11:33 +000078 print(t)
Bill Wendlingaec40112011-10-23 20:13:14 +000079
Serge Gueltonee72f592019-01-03 14:12:37 +000080 if t in d_new :
Bill Wendlingaec40112011-10-23 20:13:14 +000081
82 # Check if the test passed or failed.
83 for x in test:
Serge Gueltonee72f592019-01-03 14:12:37 +000084 if x in d_old[t]:
85 if x in d_new[t]:
Bill Wendlingaec40112011-10-23 20:13:14 +000086 if d_old[t][x] == 'PASS':
87 if d_new[t][x] != 'PASS':
Serge Guelton60ccceb2019-01-03 14:11:33 +000088 print(t + " *** REGRESSION (" + x + ")\n")
Bill Wendlingaec40112011-10-23 20:13:14 +000089 else:
90 if d_new[t][x] == 'PASS':
Serge Guelton60ccceb2019-01-03 14:11:33 +000091 print(t + " * NEW PASS (" + x + ")\n")
Bill Wendlingaec40112011-10-23 20:13:14 +000092
93 else :
Serge Guelton60ccceb2019-01-03 14:11:33 +000094 print(t + "*** REGRESSION (" + x + ")\n")
Bill Wendlingaec40112011-10-23 20:13:14 +000095
96 # For execution time, if there is no result, its a fail.
97 for x in exectime:
Serge Gueltonee72f592019-01-03 14:12:37 +000098 if tp + x in d_old[t]:
99 if tp + x not in d_new[t]:
Serge Guelton60ccceb2019-01-03 14:11:33 +0000100 print(t + " *** REGRESSION (" + tp + x + ")\n")
Bill Wendlingaec40112011-10-23 20:13:14 +0000101
102 else :
Serge Gueltonee72f592019-01-03 14:12:37 +0000103 if tp + x in d_new[t]:
Serge Guelton60ccceb2019-01-03 14:11:33 +0000104 print(t + " * NEW PASS (" + tp + x + ")\n")
Bill Wendlingaec40112011-10-23 20:13:14 +0000105
106
107 for x in comptime:
Serge Gueltonee72f592019-01-03 14:12:37 +0000108 if exp + x in d_old[t]:
109 if exp + x not in d_new[t]:
Serge Guelton60ccceb2019-01-03 14:11:33 +0000110 print(t + " *** REGRESSION (" + exp + x + ")\n")
Bill Wendlingaec40112011-10-23 20:13:14 +0000111
112 else :
Serge Gueltonee72f592019-01-03 14:12:37 +0000113 if exp + x in d_new[t]:
Serge Guelton60ccceb2019-01-03 14:11:33 +0000114 print(t + " * NEW PASS (" + exp + x + ")\n")
Bill Wendlingaec40112011-10-23 20:13:14 +0000115
116 else :
Serge Guelton60ccceb2019-01-03 14:11:33 +0000117 print(t + ": Removed from test-suite.\n")
Bill Wendlingaec40112011-10-23 20:13:14 +0000118
119
120#Main
121if len(sys.argv) < 3 :
Serge Guelton60ccceb2019-01-03 14:11:33 +0000122 print('Usage:', sys.argv[0], \
123 '<old log> <new log>')
Bill Wendlingaec40112011-10-23 20:13:14 +0000124 sys.exit(-1)
125
126d_old = parse(sys.argv[1])
127d_new = parse(sys.argv[2])
128
129
130diffResults(d_old, d_new)
131
132