File: isel.py

package info (click to toggle)
llvm-toolchain-16 1%3A16.0.6-15~deb11u2
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 1,634,820 kB
  • sloc: cpp: 6,179,261; ansic: 1,216,205; asm: 741,319; python: 196,614; objc: 75,325; f90: 49,640; lisp: 32,396; pascal: 12,286; sh: 9,394; perl: 7,442; ml: 5,494; awk: 3,523; makefile: 2,723; javascript: 1,206; xml: 886; fortran: 581; cs: 573
file content (57 lines) | stat: -rw-r--r-- 1,795 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
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,
               global_vars_seen_dict, is_filtered):
  # Label format is based on iSel string.
  check_label_format = '{} %s-LABEL: %s%s%s'.format(comment_marker)
  return 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)