Files
swift-mirror/utils/chex.py
Joe Groff 5b7e52901d Add a utility script for checking for hex constants in IR tests.
LLVM always prints IR constants as signed decimal, which is not ideal when looking for packed bit patterns in tests. Add a little filter script that turns hex constants of the form `<iNN 0xNNNNN>` into the decimal output we'd expect from the LLVM printer.
2017-06-22 13:26:44 -07:00

32 lines
1.0 KiB
Python
Executable File

#!/usr/bin/env python
# Check HEX -- a stupid filter that allows hexadecimal literals to be checked
# for in LLVM IR FileCheck tests. It works by replacing occurrences of
# strings matching the regex /< (i[0-9]+) \s+ (0x[0-9A-Fa-f]+) >/x with the
# decimal literal equivalent that would really appear in printed LLVM IR.
from __future__ import print_function
import re
import sys
hex = re.compile(r"""<(i([0-9]+)\s+)0x([0-9A-Fa-f_]+)>""")
def hexReplace(match):
# Integer type is match group 1
ty = match.group(1)
# Integer bit width is match group 2
bits = int(match.group(2))
# Hex value is match group 3
value = int(match.group(3).replace("_", ""), base=16)
# LLVM prints the decimal value as if it's two's-complement signed in
# the given bitwidth, so the printed value will be negative if
# greater than 2^(bits - 1)
if value >= (1 << (bits - 1)):
value -= 1 << bits
return ty + str(value)
for line in sys.stdin:
print(re.sub(hex, hexReplace, line), end="")