forked from OSchip/llvm-project
83 lines
2.1 KiB
Python
83 lines
2.1 KiB
Python
|
#!/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()
|