[llvm] 0b77949 - update_test_checks.py: allow use with custom tools
Nicolai Hähnle via llvm-commits
llvm-commits at lists.llvm.org
Thu Oct 27 01:07:20 PDT 2022
Author: Nicolai Hähnle
Date: 2022-10-27T10:06:01+02:00
New Revision: 0b779494a8523a0159afb399ba07f0086552b50d
URL: https://github.com/llvm/llvm-project/commit/0b779494a8523a0159afb399ba07f0086552b50d
DIFF: https://github.com/llvm/llvm-project/commit/0b779494a8523a0159afb399ba07f0086552b50d.diff
LOG: update_test_checks.py: allow use with custom tools
We have a downstream project with a command-line utility that operates
pretty much exactly like `opt`. So it would make sense for us to
maintain tests with update_test_checks.py with our custom tool
substituted for `opt`, as this change allows.
Differential Revision: https://reviews.llvm.org/D136329
Added:
llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/custom-tool.ll
llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/custom-tool.ll.expected
llvm/test/tools/UpdateTestChecks/update_test_checks/custom-tool.test
Modified:
llvm/utils/UpdateTestChecks/common.py
llvm/utils/update_test_checks.py
Removed:
################################################################################
diff --git a/llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/custom-tool.ll b/llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/custom-tool.ll
new file mode 100644
index 0000000000000..7c4f11f969eb8
--- /dev/null
+++ b/llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/custom-tool.ll
@@ -0,0 +1,6 @@
+; RUN: llvm-extract -S --func=foo %s | FileCheck --check-prefixes=CHECK %s
+
+define i32 @foo(i32 %x) {
+ %y = add i32 %x, 1
+ ret i32 %y
+}
diff --git a/llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/custom-tool.ll.expected b/llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/custom-tool.ll.expected
new file mode 100644
index 0000000000000..6b7ac81bd6d82
--- /dev/null
+++ b/llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/custom-tool.ll.expected
@@ -0,0 +1,11 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --tool llvm-extract
+; RUN: llvm-extract -S --func=foo %s | FileCheck --check-prefixes=CHECK %s
+
+define i32 @foo(i32 %x) {
+; CHECK-LABEL: @foo(
+; CHECK-NEXT: [[Y:%.*]] = add i32 [[X:%.*]], 1
+; CHECK-NEXT: ret i32 [[Y]]
+;
+ %y = add i32 %x, 1
+ ret i32 %y
+}
diff --git a/llvm/test/tools/UpdateTestChecks/update_test_checks/custom-tool.test b/llvm/test/tools/UpdateTestChecks/update_test_checks/custom-tool.test
new file mode 100644
index 0000000000000..42ab449158895
--- /dev/null
+++ b/llvm/test/tools/UpdateTestChecks/update_test_checks/custom-tool.test
@@ -0,0 +1,8 @@
+# NOTE: Use a '\' in 'llvm\-extract' to prevent substitution.
+
+# RUN: cp -f %S/Inputs/custom-tool.ll %t.ll && %update_test_checks %t.ll --tool=llvm\-extract --tool-binary=llvm-extract
+# RUN:
diff -u %t.ll %S/Inputs/custom-tool.ll.expected
+
+## Check that running the script again does not change the result.
+# RUN: %update_test_checks %t.ll --tool=llvm\-extract --tool-binary=llvm-extract
+# RUN:
diff -u %t.ll %S/Inputs/custom-tool.ll.expected
diff --git a/llvm/utils/UpdateTestChecks/common.py b/llvm/utils/UpdateTestChecks/common.py
index 8e02488da985e..127a7404431ed 100644
--- a/llvm/utils/UpdateTestChecks/common.py
+++ b/llvm/utils/UpdateTestChecks/common.py
@@ -1154,8 +1154,8 @@ def get_autogennote_suffix(parser, args):
if not hasattr(args, action.dest):
continue # Ignore options such as --help that aren't included in args
# Ignore parameters such as paths to the binary or the list of tests
- if action.dest in ('tests', 'update_only', 'opt_binary', 'llc_binary',
- 'clang', 'opt', 'llvm_bin', 'verbose'):
+ if action.dest in ('tests', 'update_only', 'tool_binary', 'opt_binary',
+ 'llc_binary', 'clang', 'opt', 'llvm_bin', 'verbose'):
continue
value = getattr(args, action.dest)
if action.const is not None: # action stores a constant (usually True/False)
diff --git a/llvm/utils/update_test_checks.py b/llvm/utils/update_test_checks.py
index f16103b892b06..701e5e8bdf2f1 100755
--- a/llvm/utils/update_test_checks.py
+++ b/llvm/utils/update_test_checks.py
@@ -7,7 +7,15 @@
a single test function.
Example usage:
-$ update_test_checks.py --opt=../bin/opt test/foo.ll
+
+# Default to using `opt` as found in your PATH.
+$ update_test_checks.py test/foo.ll
+
+# Override the path lookup.
+$ update_test_checks.py --tool-binary=../bin/opt test/foo.ll
+
+# Use a custom tool instead of `opt`.
+$ update_test_checks.py --tool=yourtool test/foo.ll
Workflow:
1. Make a compiler patch that requires updating some number of FileCheck lines
@@ -37,8 +45,10 @@
def main():
from argparse import RawTextHelpFormatter
parser = argparse.ArgumentParser(description=__doc__, formatter_class=RawTextHelpFormatter)
- parser.add_argument('--opt-binary', default='opt',
- help='The opt binary used to generate the test case')
+ parser.add_argument('--tool', default='opt',
+ help='The name of the tool used to generate the test case (defaults to "opt")')
+ parser.add_argument('--tool-binary', '--opt-binary',
+ help='The tool binary used to generate the test case')
parser.add_argument(
'--function', help='The function in the test file to update')
parser.add_argument('-p', '--preserve-names', action='store_true',
@@ -55,11 +65,13 @@ def main():
initial_args = common.parse_commandline_args(parser)
script_name = os.path.basename(__file__)
- opt_basename = os.path.basename(initial_args.opt_binary)
- if not re.match(r'^opt(-\d+)?(\.exe)?$', opt_basename):
- common.error('Unexpected opt name: ' + opt_basename)
- sys.exit(1)
- opt_basename = 'opt'
+
+ if initial_args.tool_binary:
+ tool_basename = os.path.basename(initial_args.tool_binary)
+ if not re.match(r'^%s(-\d+)?(\.exe)?$' % (initial_args.tool), tool_basename):
+ common.error('Unexpected tool name: ' + tool_basename)
+ sys.exit(1)
+ tool_basename = initial_args.tool
for ti in common.itertests(initial_args.tests, parser,
script_name='utils/' + script_name):
@@ -83,15 +95,15 @@ def main():
tool_cmd = commands[-2]
filecheck_cmd = commands[-1]
common.verify_filecheck_prefixes(filecheck_cmd)
- if not tool_cmd.startswith(opt_basename + ' '):
- common.warn('Skipping non-%s RUN line: %s' % (opt_basename, l))
+ if not tool_cmd.startswith(tool_basename + ' '):
+ common.warn('Skipping non-%s RUN line: %s' % (tool_basename, l))
continue
if not filecheck_cmd.startswith('FileCheck '):
common.warn('Skipping non-FileChecked RUN line: ' + l)
continue
- tool_cmd_args = tool_cmd[len(opt_basename):].strip()
+ tool_cmd_args = tool_cmd[len(tool_basename):].strip()
tool_cmd_args = tool_cmd_args.replace('< %s', '').replace('%s', '').strip()
check_prefixes = [item for m in
@@ -111,11 +123,15 @@ def main():
scrubber_args=[],
path=ti.path)
- for prefixes, opt_args, preprocess_cmd in prefix_list:
- common.debug('Extracted opt cmd: ' + opt_basename + ' ' + opt_args)
+ tool_binary = ti.args.tool_binary
+ if not tool_binary:
+ tool_binary = tool_basename
+
+ for prefixes, tool_args, preprocess_cmd in prefix_list:
+ common.debug('Extracted tool cmd: ' + tool_basename + ' ' + tool_args)
common.debug('Extracted FileCheck prefixes: ' + str(prefixes))
- raw_tool_output = common.invoke_tool(ti.args.opt_binary, opt_args,
+ raw_tool_output = common.invoke_tool(tool_binary, tool_args,
ti.path, preprocess_cmd=preprocess_cmd,
verbose=ti.args.verbose)
builder.process_run_line(common.OPT_FUNCTION_RE, common.scrub_body,
More information about the llvm-commits
mailing list