[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