18565b6f9SYatao Wangimport re 28565b6f9SYatao Wangfrom . import common 38565b6f9SYatao Wangimport sys 48565b6f9SYatao Wang 58565b6f9SYatao Wangif sys.version_info[0] > 2: 68565b6f9SYatao Wang class string: 78565b6f9SYatao Wang expandtabs = str.expandtabs 88565b6f9SYatao Wangelse: 98565b6f9SYatao Wang import string 108565b6f9SYatao Wang 118565b6f9SYatao Wang# Support of isel debug checks 128565b6f9SYatao Wang# RegEx: this is where the magic happens. 138565b6f9SYatao Wang 148565b6f9SYatao Wang##### iSel parser 158565b6f9SYatao Wang 168565b6f9SYatao Wang# TODO: add function prefix 178565b6f9SYatao WangISEL_FUNCTION_DEFAULT_RE = re.compile( 188565b6f9SYatao Wang r'Selected[\s]*selection[\s]*DAG:[\s]*%bb.0[\s]*\'(?P<func>.*?):[^\']*\'*\n' 198565b6f9SYatao Wang r'(?P<body>.*?)\n' 208565b6f9SYatao Wang r'Total[\s]*amount[\s]*of[\s]*phi[\s]*nodes[\s]*to[\s]*update:[\s]*[0-9]+', 218565b6f9SYatao Wang flags=(re.M | re.S)) 228565b6f9SYatao Wang 238565b6f9SYatao Wangdef scrub_isel_default(isel, args): 248565b6f9SYatao Wang # Scrub runs of whitespace out of the iSel debug output, but leave the leading 258565b6f9SYatao Wang # whitespace in place. 268565b6f9SYatao Wang isel = common.SCRUB_WHITESPACE_RE.sub(r' ', isel) 278565b6f9SYatao Wang # Expand the tabs used for indentation. 288565b6f9SYatao Wang isel = string.expandtabs(isel, 2) 298565b6f9SYatao Wang # Strip trailing whitespace. 308565b6f9SYatao Wang isel = common.SCRUB_TRAILING_WHITESPACE_RE.sub(r'', isel) 318565b6f9SYatao Wang return isel 328565b6f9SYatao Wang 338565b6f9SYatao Wangdef get_run_handler(triple): 348565b6f9SYatao Wang target_handlers = { 358565b6f9SYatao Wang } 368565b6f9SYatao Wang handler = None 378565b6f9SYatao Wang best_prefix = '' 388565b6f9SYatao Wang for prefix, s in target_handlers.items(): 398565b6f9SYatao Wang if triple.startswith(prefix) and len(prefix) > len(best_prefix): 408565b6f9SYatao Wang handler = s 418565b6f9SYatao Wang best_prefix = prefix 428565b6f9SYatao Wang 438565b6f9SYatao Wang if handler is None: 448565b6f9SYatao Wang common.debug('Using default handler.') 458565b6f9SYatao Wang handler = (scrub_isel_default, ISEL_FUNCTION_DEFAULT_RE) 468565b6f9SYatao Wang 478565b6f9SYatao Wang return handler 488565b6f9SYatao Wang 498565b6f9SYatao Wang##### Generator of iSel CHECK lines 508565b6f9SYatao Wang 5137a68497SAlex Richardsondef add_checks(output_lines, comment_marker, prefix_list, func_dict, func_name, 5237a68497SAlex Richardson global_vars_seen_dict, is_filtered): 538565b6f9SYatao Wang # Label format is based on iSel string. 548e43cbabSDaniil Kovalev check_label_format = '{} %s-LABEL: %s%s%s'.format(comment_marker) 55*f15c6021SMircea Trofin return common.add_checks(output_lines, comment_marker, prefix_list, func_dict, 568565b6f9SYatao Wang func_name, check_label_format, True, False, 578565b6f9SYatao Wang global_vars_seen_dict, is_filtered=is_filtered) 58