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