18565b6f9SYatao Wangimport re 28565b6f9SYatao Wangfrom . import common 38565b6f9SYatao Wangimport sys 48565b6f9SYatao Wang 58565b6f9SYatao Wangif sys.version_info[0] > 2: 6b71edfaaSTobias Hieta 78565b6f9SYatao Wang class string: 88565b6f9SYatao Wang expandtabs = str.expandtabs 9b71edfaaSTobias Hieta 108565b6f9SYatao Wangelse: 118565b6f9SYatao Wang import string 128565b6f9SYatao Wang 138565b6f9SYatao Wang# Support of isel debug checks 148565b6f9SYatao Wang# RegEx: this is where the magic happens. 158565b6f9SYatao Wang 168565b6f9SYatao Wang##### iSel parser 178565b6f9SYatao Wang 188565b6f9SYatao Wang# TODO: add function prefix 198565b6f9SYatao WangISEL_FUNCTION_DEFAULT_RE = re.compile( 20b71edfaaSTobias Hieta r"Selected[\s]*selection[\s]*DAG:[\s]*%bb.0[\s]*\'(?P<func>.*?):[^\']*\'*\n" 21b71edfaaSTobias Hieta r"(?P<body>.*?)\n" 22b71edfaaSTobias Hieta r"Total[\s]*amount[\s]*of[\s]*phi[\s]*nodes[\s]*to[\s]*update:[\s]*[0-9]+", 23b71edfaaSTobias Hieta flags=(re.M | re.S), 24b71edfaaSTobias Hieta) 25b71edfaaSTobias Hieta 268565b6f9SYatao Wang 278565b6f9SYatao Wangdef scrub_isel_default(isel, args): 288565b6f9SYatao Wang # Scrub runs of whitespace out of the iSel debug output, but leave the leading 298565b6f9SYatao Wang # whitespace in place. 30b71edfaaSTobias Hieta isel = common.SCRUB_WHITESPACE_RE.sub(r" ", isel) 318565b6f9SYatao Wang # Expand the tabs used for indentation. 328565b6f9SYatao Wang isel = string.expandtabs(isel, 2) 338565b6f9SYatao Wang # Strip trailing whitespace. 34b71edfaaSTobias Hieta isel = common.SCRUB_TRAILING_WHITESPACE_RE.sub(r"", isel) 358565b6f9SYatao Wang return isel 368565b6f9SYatao Wang 37b71edfaaSTobias Hieta 388565b6f9SYatao Wangdef get_run_handler(triple): 39b71edfaaSTobias Hieta target_handlers = {} 408565b6f9SYatao Wang handler = None 41b71edfaaSTobias Hieta best_prefix = "" 428565b6f9SYatao Wang for prefix, s in target_handlers.items(): 438565b6f9SYatao Wang if triple.startswith(prefix) and len(prefix) > len(best_prefix): 448565b6f9SYatao Wang handler = s 458565b6f9SYatao Wang best_prefix = prefix 468565b6f9SYatao Wang 478565b6f9SYatao Wang if handler is None: 48b71edfaaSTobias Hieta common.debug("Using default handler.") 498565b6f9SYatao Wang handler = (scrub_isel_default, ISEL_FUNCTION_DEFAULT_RE) 508565b6f9SYatao Wang 518565b6f9SYatao Wang return handler 528565b6f9SYatao Wang 53b71edfaaSTobias Hieta 548565b6f9SYatao Wang##### Generator of iSel CHECK lines 558565b6f9SYatao Wang 56b71edfaaSTobias Hieta 57b71edfaaSTobias Hietadef add_checks( 58b71edfaaSTobias Hieta output_lines, 59b71edfaaSTobias Hieta comment_marker, 60b71edfaaSTobias Hieta prefix_list, 61b71edfaaSTobias Hieta func_dict, 62b71edfaaSTobias Hieta func_name, 63*597ac471SNicolai Hähnle ginfo: common.GeneralizerInfo, 64b71edfaaSTobias Hieta global_vars_seen_dict, 65b71edfaaSTobias Hieta is_filtered, 66b71edfaaSTobias Hieta): 678565b6f9SYatao Wang # Label format is based on iSel string. 68b71edfaaSTobias Hieta check_label_format = "{} %s-LABEL: %s%s%s%s".format(comment_marker) 69b71edfaaSTobias Hieta return common.add_checks( 70b71edfaaSTobias Hieta output_lines, 71b71edfaaSTobias Hieta comment_marker, 72b71edfaaSTobias Hieta prefix_list, 73b71edfaaSTobias Hieta func_dict, 74b71edfaaSTobias Hieta func_name, 75b71edfaaSTobias Hieta check_label_format, 76*597ac471SNicolai Hähnle ginfo, 77b71edfaaSTobias Hieta global_vars_seen_dict, 78b71edfaaSTobias Hieta is_filtered=is_filtered, 79b71edfaaSTobias Hieta ) 80