import os
import re
import sys
from concurrent.futures import ThreadPoolExecutor, as_completed
def remove_prefix(i, d=0):
if d == 100:
return 2
s = os.popen('llvm-lit -a ' + i).read()
r = re.search('no check strings found with (?:prefix|prefixes) \'([^:]+)', s)
with open(i, 'r+') as f:
s = f.read()
if r:
p = r.group(1)
s = re.sub('=' + p + ',', '=', s)
s = re.sub(',' + p + '([, \n])', '\\1', s)
s = re.sub('\s+-?-check-prefix=' + p + '([ \n])', '\\1', s)
else:
s = re.sub('-?-check-prefixes=([\w-]+)(\Z|[ \t\n])', '--check-prefix=\\1\\2', s)
t = re.search('-?-check-(?:prefix|prefixes)=([^ ]+)\s+-?-check-(?:prefix|prefixes)=([^ ]+)', s)
while t:
s = re.sub(t.group(), '--check-prefixes=' + t.group(1) + ',' + t.group(2), s)
t = re.search('-?-check-(?:prefix|prefixes)=([^ ]+)\s+-?-check-(?:prefix|prefixes)=([^ ]+)', s)
s = re.sub('\s+-?-check-prefix=CHECK[ \t]*\n', '\n', s)
f.truncate(0)
f.seek(0)
f.write(s)
if not r:
t = re.search('Assertions have been autogenerated by (.*)', s)
if t:
s = os.popen('llvm/' + t.group(1) + ' ' + i + ' 2>&1').read()
if 'had conflicting output from different RUN lines for all functions' in s:
return -1
s = os.popen('git diff ' + i).read()
if re.search('\n(?:-+)\n', s) or re.search('\n[+-].*(?<!RUN):', s):
return 1
return 0
return remove_prefix(i, d+1)
with ThreadPoolExecutor(max_workers=32) as e:
f = []
c = []
a = []
t = { e.submit(remove_prefix, i): i for i in sys.argv[1:] }
for i in as_completed(t):
if i.result() == 0:
print('DONE:', end=' ')
elif i.result() == -1:
print('FAIL:', end=' ')
f.append(t[i])
elif i.result() == 1:
print('CHANGE:', end=' ')
c.append(t[i])
else:
print('ABORT:', end=' ')
a.append(t[i])
print(t[i])
for i in [ (f, 'Failed'), (c, 'Changed'), (a, 'Aborted') ]:
if i[0]:
print('********************\n%s Tests (%d):' % (i[1], len(i[0])))
for j in i[0]:
print(' ' + j)