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.*?):[^\']*\'*\n" r"(?P.*?)\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, )