| 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, |
| global_vars_seen_dict, is_filtered): |
| # Label format is based on iSel string. |
| check_label_format = '{} %s-LABEL: %s%s%s'.format(comment_marker) |
| return common.add_checks(output_lines, comment_marker, prefix_list, func_dict, |
| func_name, check_label_format, True, False, |
| global_vars_seen_dict, is_filtered=is_filtered) |