xref: /llvm-project/llvm/utils/UpdateTestChecks/isel.py (revision 597ac471cc7da97ccf957362a7e9f7a52d6910ee)
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