1c22dc71bSWang, Pengfei#!/usr/bin/env python3 2c22dc71bSWang, Pengfei 3c22dc71bSWang, Pengfeiimport os 4c22dc71bSWang, Pengfeiimport re 5c22dc71bSWang, Pengfeiimport sys 6c22dc71bSWang, Pengfeifrom concurrent.futures import ThreadPoolExecutor, as_completed 7c22dc71bSWang, Pengfei 8*b71edfaaSTobias Hieta 9c22dc71bSWang, Pengfeidef remove_prefix(i, d=0): 10c22dc71bSWang, Pengfei if d == 100: 11c22dc71bSWang, Pengfei return 2 12*b71edfaaSTobias Hieta s = os.popen("llvm-lit -a " + i).read() 13*b71edfaaSTobias Hieta r = re.search("no check strings found with (?:prefix|prefixes) '([^:]+)", s) 14*b71edfaaSTobias Hieta with open(i, "r+") as f: 15c22dc71bSWang, Pengfei s = f.read() 16c22dc71bSWang, Pengfei if r: 17c22dc71bSWang, Pengfei p = r.group(1) 18*b71edfaaSTobias Hieta s = re.sub("=" + p + ",", "=", s) 19*b71edfaaSTobias Hieta s = re.sub("," + p + "([, \n])", "\\1", s) 20*b71edfaaSTobias Hieta s = re.sub("\s+-?-check-prefix=" + p + "([ \n])", "\\1", s) 21c22dc71bSWang, Pengfei else: 22*b71edfaaSTobias Hieta s = re.sub( 23*b71edfaaSTobias Hieta "-?-check-prefixes=([\w-]+)(\Z|[ \t\n])", "--check-prefix=\\1\\2", s 24*b71edfaaSTobias Hieta ) 25*b71edfaaSTobias Hieta t = re.search( 26*b71edfaaSTobias Hieta "-?-check-(?:prefix|prefixes)=([^ ]+)\s+-?-check-(?:prefix|prefixes)=([^ ]+)", 27*b71edfaaSTobias Hieta s, 28*b71edfaaSTobias Hieta ) 29c22dc71bSWang, Pengfei while t: 30*b71edfaaSTobias Hieta s = re.sub( 31*b71edfaaSTobias Hieta t.group(), "--check-prefixes=" + t.group(1) + "," + t.group(2), s 32*b71edfaaSTobias Hieta ) 33*b71edfaaSTobias Hieta t = re.search( 34*b71edfaaSTobias Hieta "-?-check-(?:prefix|prefixes)=([^ ]+)\s+-?-check-(?:prefix|prefixes)=([^ ]+)", 35*b71edfaaSTobias Hieta s, 36*b71edfaaSTobias Hieta ) 37*b71edfaaSTobias Hieta s = re.sub("\s+-?-check-prefix=CHECK[ \t]*\n", "\n", s) 38c22dc71bSWang, Pengfei f.truncate(0) 39c22dc71bSWang, Pengfei f.seek(0) 40c22dc71bSWang, Pengfei f.write(s) 41c22dc71bSWang, Pengfei if not r: 42*b71edfaaSTobias Hieta t = re.search("Assertions have been autogenerated by (.*)", s) 43c22dc71bSWang, Pengfei if t: 44*b71edfaaSTobias Hieta s = os.popen("llvm/" + t.group(1) + " " + i + " 2>&1").read() 45*b71edfaaSTobias Hieta if "had conflicting output from different RUN lines for all functions" in s: 46c22dc71bSWang, Pengfei return -1 47*b71edfaaSTobias Hieta s = os.popen("git diff " + i).read() 48*b71edfaaSTobias Hieta if re.search("\n(?:-+)\n", s) or re.search("\n[+-].*(?<!RUN):", s): 49c22dc71bSWang, Pengfei return 1 50c22dc71bSWang, Pengfei return 0 51c22dc71bSWang, Pengfei return remove_prefix(i, d + 1) 52c22dc71bSWang, Pengfei 53*b71edfaaSTobias Hieta 54c22dc71bSWang, Pengfeiwith ThreadPoolExecutor(max_workers=32) as e: 55c22dc71bSWang, Pengfei f = [] 56c22dc71bSWang, Pengfei c = [] 57c22dc71bSWang, Pengfei a = [] 58c22dc71bSWang, Pengfei t = {e.submit(remove_prefix, i): i for i in sys.argv[1:]} 59c22dc71bSWang, Pengfei for i in as_completed(t): 60c22dc71bSWang, Pengfei if i.result() == 0: 61*b71edfaaSTobias Hieta print("DONE:", end=" ") 62c22dc71bSWang, Pengfei elif i.result() == -1: 63*b71edfaaSTobias Hieta print("FAIL:", end=" ") 64c22dc71bSWang, Pengfei f.append(t[i]) 65c22dc71bSWang, Pengfei elif i.result() == 1: 66*b71edfaaSTobias Hieta print("CHANGE:", end=" ") 67c22dc71bSWang, Pengfei c.append(t[i]) 68c22dc71bSWang, Pengfei else: 69*b71edfaaSTobias Hieta print("ABORT:", end=" ") 70c22dc71bSWang, Pengfei a.append(t[i]) 71c22dc71bSWang, Pengfei print(t[i]) 72*b71edfaaSTobias Hieta for i in [(f, "Failed"), (c, "Changed"), (a, "Aborted")]: 73c22dc71bSWang, Pengfei if i[0]: 74*b71edfaaSTobias Hieta print("********************\n%s Tests (%d):" % (i[1], len(i[0]))) 75c22dc71bSWang, Pengfei for j in i[0]: 76*b71edfaaSTobias Hieta print(" " + j) 77