2
0

findRegressions-nightly.py 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. #!/usr/bin/env python
  2. import re, string, sys, os, time
  3. DEBUG = 0
  4. testDirName = 'llvm-test'
  5. test = ['compile', 'llc', 'jit', 'cbe']
  6. exectime = ['llc-time', 'jit-time', 'cbe-time',]
  7. comptime = ['llc', 'jit-comptime', 'compile']
  8. (tp, exp) = ('compileTime_', 'executeTime_')
  9. def parse(file):
  10. f=open(file, 'r')
  11. d = f.read()
  12. #Cleanup weird stuff
  13. d = re.sub(r',\d+:\d','', d)
  14. r = re.findall(r'TEST-(PASS|FAIL|RESULT.*?):\s+(.*?)\s+(.*?)\r*\n', d)
  15. test = {}
  16. fname = ''
  17. for t in r:
  18. if DEBUG:
  19. print t
  20. if t[0] == 'PASS' or t[0] == 'FAIL' :
  21. tmp = t[2].split(testDirName)
  22. if DEBUG:
  23. print tmp
  24. if len(tmp) == 2:
  25. fname = tmp[1].strip('\r\n')
  26. else:
  27. fname = tmp[0].strip('\r\n')
  28. if not test.has_key(fname) :
  29. test[fname] = {}
  30. for k in test:
  31. test[fname][k] = 'NA'
  32. test[fname][t[1]] = t[0]
  33. if DEBUG:
  34. print test[fname][t[1]]
  35. else :
  36. try:
  37. n = t[0].split('RESULT-')[1]
  38. if DEBUG:
  39. print n;
  40. if n == 'llc' or n == 'jit-comptime' or n == 'compile':
  41. test[fname][tp + n] = float(t[2].split(' ')[2])
  42. if DEBUG:
  43. print test[fname][tp + n]
  44. elif n.endswith('-time') :
  45. test[fname][exp + n] = float(t[2].strip('\r\n'))
  46. if DEBUG:
  47. print test[fname][exp + n]
  48. else :
  49. print "ERROR!"
  50. sys.exit(1)
  51. except:
  52. continue
  53. return test
  54. # Diff results and look for regressions.
  55. def diffResults(d_old, d_new):
  56. for t in sorted(d_old.keys()) :
  57. if DEBUG:
  58. print t
  59. if d_new.has_key(t) :
  60. # Check if the test passed or failed.
  61. for x in test:
  62. if d_old[t].has_key(x):
  63. if d_new[t].has_key(x):
  64. if d_old[t][x] == 'PASS':
  65. if d_new[t][x] != 'PASS':
  66. print t + " *** REGRESSION (" + x + ")\n"
  67. else:
  68. if d_new[t][x] == 'PASS':
  69. print t + " * NEW PASS (" + x + ")\n"
  70. else :
  71. print t + "*** REGRESSION (" + x + ")\n"
  72. # For execution time, if there is no result, its a fail.
  73. for x in exectime:
  74. if d_old[t].has_key(tp + x):
  75. if not d_new[t].has_key(tp + x):
  76. print t + " *** REGRESSION (" + tp + x + ")\n"
  77. else :
  78. if d_new[t].has_key(tp + x):
  79. print t + " * NEW PASS (" + tp + x + ")\n"
  80. for x in comptime:
  81. if d_old[t].has_key(exp + x):
  82. if not d_new[t].has_key(exp + x):
  83. print t + " *** REGRESSION (" + exp + x + ")\n"
  84. else :
  85. if d_new[t].has_key(exp + x):
  86. print t + " * NEW PASS (" + exp + x + ")\n"
  87. else :
  88. print t + ": Removed from test-suite.\n"
  89. #Main
  90. if len(sys.argv) < 3 :
  91. print 'Usage:', sys.argv[0], \
  92. '<old log> <new log>'
  93. sys.exit(-1)
  94. d_old = parse(sys.argv[1])
  95. d_new = parse(sys.argv[2])
  96. diffResults(d_old, d_new)