xref: /llvm-project/llvm/utils/update_test_prefix.py (revision b71edfaa4ec3c998aadb35255ce2f60bba2940b0)
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