1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
|
import re
from . import common
import sys
if sys.version_info[0] > 2:
class string:
expandtabs = str.expandtabs
else:
import string
# Support of isel debug checks
# RegEx: this is where the magic happens.
##### iSel parser
# TODO: add function prefix
ISEL_FUNCTION_DEFAULT_RE = re.compile(
r"Selected[\s]*selection[\s]*DAG:[\s]*%bb.0[\s]*\'(?P<func>.*?):[^\']*\'*\n"
r"(?P<body>.*?)\n"
r"Total[\s]*amount[\s]*of[\s]*phi[\s]*nodes[\s]*to[\s]*update:[\s]*[0-9]+",
flags=(re.M | re.S),
)
def scrub_isel_default(isel, args):
# Scrub runs of whitespace out of the iSel debug output, but leave the leading
# whitespace in place.
isel = common.SCRUB_WHITESPACE_RE.sub(r" ", isel)
# Expand the tabs used for indentation.
isel = string.expandtabs(isel, 2)
# Strip trailing whitespace.
isel = common.SCRUB_TRAILING_WHITESPACE_RE.sub(r"", isel)
return isel
def get_run_handler(triple):
target_handlers = {}
handler = None
best_prefix = ""
for prefix, s in target_handlers.items():
if triple.startswith(prefix) and len(prefix) > len(best_prefix):
handler = s
best_prefix = prefix
if handler is None:
common.debug("Using default handler.")
handler = (scrub_isel_default, ISEL_FUNCTION_DEFAULT_RE)
return handler
##### Generator of iSel CHECK lines
def add_checks(
output_lines,
comment_marker,
prefix_list,
func_dict,
func_name,
ginfo: common.GeneralizerInfo,
global_vars_seen_dict,
is_filtered,
):
# Label format is based on iSel string.
check_label_format = "{} %s-LABEL: %s%s%s%s".format(comment_marker)
return common.add_checks(
output_lines,
comment_marker,
prefix_list,
func_dict,
func_name,
check_label_format,
ginfo,
global_vars_seen_dict,
is_filtered=is_filtered,
)
|