65 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			65 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
| #!/usr/bin/env python3
 | |
| 
 | |
| 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)
 |