[llvm] r264197 - reorganize llc checks script to allow more flexibility; NFCI

Sanjay Patel via llvm-commits llvm-commits at lists.llvm.org
Wed Mar 23 14:40:53 PDT 2016


Author: spatel
Date: Wed Mar 23 16:40:53 2016
New Revision: 264197

URL: http://llvm.org/viewvc/llvm-project?rev=264197&view=rev
Log:
reorganize llc checks script to allow more flexibility; NFCI
 
The goal is to enhance this script to be used with opt and clang:
Group all of the regexes together, so it's easier to see what's going on.
This will make it easier to break main() up into pieces too. 
Also, note that some of the regexes are for x86-specific asm. 


Modified:
    llvm/trunk/utils/update_llc_test_checks.py

Modified: llvm/trunk/utils/update_llc_test_checks.py
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/update_llc_test_checks.py?rev=264197&r1=264196&r2=264197&view=diff
==============================================================================
--- llvm/trunk/utils/update_llc_test_checks.py (original)
+++ llvm/trunk/utils/update_llc_test_checks.py Wed Mar 23 16:40:53 2016
@@ -15,7 +15,7 @@ import sys
 import tempfile
 import re
 
-
+# Invoke the tool that is being tested.
 def llc(args, cmd_args, ir):
   with open(ir) as ir_file:
     stdout = subprocess.check_output(args.llc_binary + ' ' + cmd_args,
@@ -25,33 +25,45 @@ def llc(args, cmd_args, ir):
   return stdout
 
 
-ASM_SCRUB_WHITESPACE_RE = re.compile(r'(?!^(|  \w))[ \t]+', flags=re.M)
-ASM_SCRUB_TRAILING_WHITESPACE_RE = re.compile(r'[ \t]+$', flags=re.M)
-ASM_SCRUB_SHUFFLES_RE = (
+# RegEx: this is where the magic happens.
+
+SCRUB_WHITESPACE_RE = re.compile(r'(?!^(|  \w))[ \t]+', flags=re.M)
+SCRUB_TRAILING_WHITESPACE_RE = re.compile(r'[ \t]+$', flags=re.M)
+SCRUB_X86_SHUFFLES_RE = (
     re.compile(
         r'^(\s*\w+) [^#\n]+#+ ((?:[xyz]mm\d+|mem) = .*)$',
         flags=re.M))
-ASM_SCRUB_SP_RE = re.compile(r'\d+\(%(esp|rsp)\)')
-ASM_SCRUB_RIP_RE = re.compile(r'[.\w]+\(%rip\)')
-ASM_SCRUB_KILL_COMMENT_RE = re.compile(r'^ *#+ +kill:.*\n')
+SCRUB_X86_SP_RE = re.compile(r'\d+\(%(esp|rsp)\)')
+SCRUB_X86_RIP_RE = re.compile(r'[.\w]+\(%rip\)')
+SCRUB_KILL_COMMENT_RE = re.compile(r'^ *#+ +kill:.*\n')
+
+RUN_LINE_RE = re.compile('^\s*;\s*RUN:\s*(.*)$')
+IR_FUNCTION_RE = re.compile('^\s*define\s+(?:internal\s+)?[^@]*@(\w+)\s*\(')
+ASM_FUNCTION_RE = re.compile(
+    r'^_?(?P<f>[^:]+):[ \t]*#+[ \t]*@(?P=f)\n[^:]*?'
+    r'(?P<body>^##?[ \t]+[^:]+:.*?)\s*'
+    r'^\s*(?:[^:\n]+?:\s*\n\s*\.size|\.cfi_endproc|\.globl|\.comm|\.(?:sub)?section)',
+    flags=(re.M | re.S))
+CHECK_PREFIX_RE = re.compile('--check-prefix=(\S+)')
+CHECK_RE = re.compile(r'^\s*;\s*([^:]+?)(?:-NEXT|-NOT|-DAG|-LABEL)?:')
 
 
 def scrub_asm(asm):
   # Scrub runs of whitespace out of the assembly, but leave the leading
   # whitespace in place.
-  asm = ASM_SCRUB_WHITESPACE_RE.sub(r' ', asm)
+  asm = SCRUB_WHITESPACE_RE.sub(r' ', asm)
   # Expand the tabs used for indentation.
   asm = string.expandtabs(asm, 2)
   # Detect shuffle asm comments and hide the operands in favor of the comments.
-  asm = ASM_SCRUB_SHUFFLES_RE.sub(r'\1 {{.*#+}} \2', asm)
+  asm = SCRUB_X86_SHUFFLES_RE.sub(r'\1 {{.*#+}} \2', asm)
   # Generically match the stack offset of a memory operand.
-  asm = ASM_SCRUB_SP_RE.sub(r'{{[0-9]+}}(%\1)', asm)
+  asm = SCRUB_X86_SP_RE.sub(r'{{[0-9]+}}(%\1)', asm)
   # Generically match a RIP-relative memory operand.
-  asm = ASM_SCRUB_RIP_RE.sub(r'{{.*}}(%rip)', asm)
+  asm = SCRUB_X86_RIP_RE.sub(r'{{.*}}(%rip)', asm)
   # Strip kill operands inserted into the asm.
-  asm = ASM_SCRUB_KILL_COMMENT_RE.sub('', asm)
+  asm = SCRUB_KILL_COMMENT_RE.sub('', asm)
   # Strip trailing whitespace.
-  asm = ASM_SCRUB_TRAILING_WHITESPACE_RE.sub(r'', asm)
+  asm = SCRUB_TRAILING_WHITESPACE_RE.sub(r'', asm)
   return asm
 
 
@@ -66,15 +78,6 @@ def main():
   parser.add_argument('tests', nargs='+')
   args = parser.parse_args()
 
-  run_line_re = re.compile('^\s*;\s*RUN:\s*(.*)$')
-  ir_function_re = re.compile('^\s*define\s+(?:internal\s+)?[^@]*@(\w+)\s*\(')
-  asm_function_re = re.compile(
-      r'^_?(?P<f>[^:]+):[ \t]*#+[ \t]*@(?P=f)\n[^:]*?'
-      r'(?P<body>^##?[ \t]+[^:]+:.*?)\s*'
-      r'^\s*(?:[^:\n]+?:\s*\n\s*\.size|\.cfi_endproc|\.globl|\.comm|\.(?:sub)?section)',
-      flags=(re.M | re.S))
-  check_prefix_re = re.compile('--check-prefix=(\S+)')
-  check_re = re.compile(r'^\s*;\s*([^:]+?)(?:-NEXT|-NOT|-DAG|-LABEL)?:')
   autogenerated_note = ('; NOTE: Assertions have been autogenerated by '
                         'utils/update_llc_test_checks.py')
 
@@ -85,7 +88,7 @@ def main():
       test_lines = [l.rstrip() for l in f]
 
     run_lines = [m.group(1)
-                 for m in [run_line_re.match(l) for l in test_lines] if m]
+                 for m in [RUN_LINE_RE.match(l) for l in test_lines] if m]
     if args.verbose:
       print >>sys.stderr, 'Found %d RUN lines:' % (len(run_lines),)
       for l in run_lines:
@@ -106,7 +109,7 @@ def main():
       llc_cmd_args = llc_cmd_args.replace('< %s', '').replace('%s', '').strip()
 
       check_prefixes = [m.group(1)
-                        for m in check_prefix_re.finditer(filecheck_cmd)]
+                        for m in CHECK_PREFIX_RE.finditer(filecheck_cmd)]
       if not check_prefixes:
         check_prefixes = ['CHECK']
 
@@ -124,7 +127,7 @@ def main():
         print >>sys.stderr, 'Extracted FileCheck prefixes: ' + str(prefixes)
       raw_asm = llc(args, llc_args, test)
       # Build up a dictionary of all the function bodies.
-      for m in asm_function_re.finditer(raw_asm):
+      for m in ASM_FUNCTION_RE.finditer(raw_asm):
         if not m:
           continue
         f = m.group('f')
@@ -158,7 +161,7 @@ def main():
     for l in test_lines:
       if is_in_function_start:
         if l.lstrip().startswith(';'):
-          m = check_re.match(l)
+          m = CHECK_RE.match(l)
           if not m or m.group(1) not in prefix_set:
             fixed_lines.append(l)
             continue
@@ -187,7 +190,7 @@ def main():
         if l.strip() == ';':
           continue
         # And skip any CHECK lines. We'll build our own.
-        m = check_re.match(l)
+        m = CHECK_RE.match(l)
         if m and m.group(1) in prefix_set:
           continue
         # Collect the remaining lines in the function body and look for the end
@@ -201,7 +204,7 @@ def main():
         continue
       fixed_lines.append(l)
 
-      m = ir_function_re.match(l)
+      m = IR_FUNCTION_RE.match(l)
       if not m:
         continue
       name = m.group(1)




More information about the llvm-commits mailing list