forked from OSchip/llvm-project
58 lines
1.7 KiB
Python
58 lines
1.7 KiB
Python
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, is_filtered):
|
|
# Label format is based on iSel string.
|
|
check_label_format = '{} %s-LABEL: %s%s:'.format(comment_marker)
|
|
global_vars_seen_dict = {}
|
|
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)
|