|  | #!/usr/bin/env python3 | 
|  | import re, sys | 
|  |  | 
|  |  | 
|  | def fix_string(s): | 
|  | TYPE = re.compile( | 
|  | '\s*(i[0-9]+|float|double|x86_fp80|fp128|ppc_fp128|\[\[.*?\]\]|\[2 x \[\[[A-Z_0-9]+\]\]\]|<.*?>|{.*?}|\[[0-9]+ x .*?\]|%["a-z:A-Z0-9._]+({{.*?}})?|%{{.*?}}|{{.*?}}|\[\[.*?\]\])(\s*(\*|addrspace\(.*?\)|dereferenceable\(.*?\)|byval\(.*?\)|sret|zeroext|inreg|returned|signext|nocapture|align \d+|swiftself|swifterror|readonly|noalias|inalloca|nocapture))*\s*' | 
|  | ) | 
|  |  | 
|  | counter = 0 | 
|  | if "i32{{.*}}" in s: | 
|  | counter = 1 | 
|  |  | 
|  | at_pos = s.find("@") | 
|  | if at_pos == -1: | 
|  | at_pos = 0 | 
|  |  | 
|  | annoying_pos = s.find("{{[^(]+}}") | 
|  | if annoying_pos != -1: | 
|  | at_pos = annoying_pos + 9 | 
|  |  | 
|  | paren_pos = s.find("(", at_pos) | 
|  | if paren_pos == -1: | 
|  | return s | 
|  |  | 
|  | res = s[: paren_pos + 1] | 
|  | s = s[paren_pos + 1 :] | 
|  |  | 
|  | m = TYPE.match(s) | 
|  | while m: | 
|  | res += m.group() | 
|  | s = s[m.end() :] | 
|  | if s.startswith(",") or s.startswith(")"): | 
|  | res += f" %{counter}" | 
|  | counter += 1 | 
|  |  | 
|  | next_arg = s.find(",") | 
|  | if next_arg == -1: | 
|  | break | 
|  |  | 
|  | res += s[: next_arg + 1] | 
|  | s = s[next_arg + 1 :] | 
|  | m = TYPE.match(s) | 
|  |  | 
|  | return res + s | 
|  |  | 
|  |  | 
|  | def process_file(contents): | 
|  | PREFIX = re.compile(r"check-prefix(es)?(=|\s+)([a-zA-Z0-9,]+)") | 
|  | check_prefixes = ["CHECK"] | 
|  | result = "" | 
|  | for line in contents.split("\n"): | 
|  | if "FileCheck" in line: | 
|  | m = PREFIX.search(line) | 
|  | if m: | 
|  | check_prefixes.extend(m.group(3).split(",")) | 
|  |  | 
|  | found_check = False | 
|  | for prefix in check_prefixes: | 
|  | if prefix in line: | 
|  | found_check = True | 
|  | break | 
|  |  | 
|  | if not found_check or "define" not in line: | 
|  | result += line + "\n" | 
|  | continue | 
|  |  | 
|  | # We have a check for a function definition. Number the args. | 
|  | line = fix_string(line) | 
|  | result += line + "\n" | 
|  | return result | 
|  |  | 
|  |  | 
|  | def main(): | 
|  | print(f"Processing {sys.argv[1]}") | 
|  | f = open(sys.argv[1]) | 
|  | content = f.read() | 
|  | f.close() | 
|  |  | 
|  | content = process_file(content) | 
|  |  | 
|  | f = open(sys.argv[1], "w") | 
|  | f.write(content) | 
|  | f.close() | 
|  |  | 
|  |  | 
|  | if __name__ == "__main__": | 
|  | main() |