|  | #!/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) |