[PATCH] D28384: Update update_test_checks to work properly with phi nodes and other fun things.

Phabricator via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Sat Jan 7 11:15:50 PST 2017


This revision was automatically updated to reflect the committed changes.
Closed by commit rL291357: Update update_test_checks to work properly with phi nodes and other fun things. (authored by dannyb).

Changed prior to commit:
  https://reviews.llvm.org/D28384?vs=83525&id=83530#toc

Repository:
  rL LLVM

https://reviews.llvm.org/D28384

Files:
  llvm/trunk/utils/update_test_checks.py


Index: llvm/trunk/utils/update_test_checks.py
===================================================================
--- llvm/trunk/utils/update_test_checks.py
+++ llvm/trunk/utils/update_test_checks.py
@@ -68,7 +68,9 @@
     flags=(re.M | re.S))
 CHECK_PREFIX_RE = re.compile('--check-prefix=(\S+)')
 CHECK_RE = re.compile(r'^\s*;\s*([^:]+?)(?:-NEXT|-NOT|-DAG|-LABEL)?:')
-IR_VALUE_DEF_RE = re.compile(r'\s+%(.*) =')
+# Match things that look at identifiers, but only if they are followed by
+# spaces, commas, paren, or end of the string
+IR_VALUE_RE = re.compile(r'(\s+)%(.+?)([,\s\(\)]|\Z)')
 
 
 # Invoke the tool that is being tested.
@@ -156,33 +158,34 @@
 def get_value_use(var):
   return '[[' + get_value_name(var) + ']]'
 
-
 # Replace IR value defs and uses with FileCheck variables.
 def genericize_check_lines(lines):
+  # This gets called for each match that occurs in
+  # a line. We transform variables we haven't seen
+  # into defs, and variables we have seen into uses.
+  def transform_line_vars(match):
+    var = match.group(2)
+    if var in vars_seen:
+      rv = get_value_use(var)
+    else:
+      vars_seen.add(var)
+      rv = get_value_definition(var)
+    # re.sub replaces the entire regex match
+    # with whatever you return, so we have
+    # to make sure to hand it back everything
+    # including the commas and spaces.
+    return match.group(1) + rv + match.group(3)
+
+  vars_seen = set()
   lines_with_def = []
-  vars_seen = []
-  for line in lines:
+
+  for i, line in enumerate(lines):
     # An IR variable named '%.' matches the FileCheck regex string.
     line = line.replace('%.', '%dot')
-    m = IR_VALUE_DEF_RE.match(line)
-    if m:
-      vars_seen.append(m.group(1))
-      line = line.replace('%' + m.group(1), get_value_definition(m.group(1)))
-
-    lines_with_def.append(line)
-
-  # A single def isn't worth replacing?
-  #if len(vars_seen) < 2:
-  #  return lines
-
-  output_lines = []
-  vars_seen.sort(key=len, reverse=True)
-  for line in lines_with_def:
-    for var in vars_seen:
-      line = line.replace('%' + var, get_value_use(var))
-    output_lines.append(line)
-
-  return output_lines
+    # Ignore any comments, since the check lines will too.
+    scrubbed_line = SCRUB_IR_COMMENT_RE.sub(r'', line)
+    lines[i] =  IR_VALUE_RE.sub(transform_line_vars, scrubbed_line)
+  return lines
 
 
 def add_checks(output_lines, prefix_list, func_dict, func_name, tool_basename):


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D28384.83530.patch
Type: text/x-patch
Size: 2447 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170107/32cbc262/attachment.bin>


More information about the llvm-commits mailing list