Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[UpdateTestChecks][llvm-mca] Use common.itertests in update_mca_test_checks #67477

Merged
merged 4 commits into from
Sep 26, 2023

Conversation

michaelmaitland
Copy link
Contributor

@michaelmaitland michaelmaitland commented Sep 26, 2023

common.itertests has useful functionality such as skipping test case if it starts with UTC_AVOID comment string. It also does some of the functionality, such as skipping test file pattern if not found, that was duplicated by update_mca_test_checks.

This patch uses this function to take advantage of extra behavior and remove duplication.

…checks

common.itertests has useful functionality such as skipping test case
if it starts with UTC_AVOID comment string. It also does some of the
functionality, such as skipping test file pattern if not found, that was
duplicated by update_mca_test_checks.

This patch uses common.itertests to take advantage of this behavior and
rely on it to do some other checks.
@llvmbot
Copy link
Collaborator

llvmbot commented Sep 26, 2023

@llvm/pr-subscribers-testing-tools

@llvm/pr-subscribers-tools-llvm-mca

Changes

common.itertests has useful functionality such as skipping test case if it starts with UTC_AVOID comment string. It also does some of the functionality, such as skipping test file pattern if not found, that was duplicated by update_mca_test_checks.

common.parse_commandline_args can be reused as well to avoid duplication.

This patch uses these functions to take advantage of extra behavior and remove duplication.


Full diff: https://github.com/llvm/llvm-project/pull/67477.diff

1 Files Affected:

  • (modified) llvm/utils/update_mca_test_checks.py (+38-44)
diff --git a/llvm/utils/update_mca_test_checks.py b/llvm/utils/update_mca_test_checks.py
index f7b29fec4efec8f..0efaa5997ed74a7 100755
--- a/llvm/utils/update_mca_test_checks.py
+++ b/llvm/utils/update_mca_test_checks.py
@@ -52,7 +52,7 @@ def _showwarning(message, category, filename, lineno, file=None, line=None):
     file.write(warnings.formatwarning(message, category, filename, lineno, line))
 
 
-def _parse_args():
+def _get_parser():
     parser = argparse.ArgumentParser(description=__doc__)
     parser.add_argument("-w", action="store_true", help="suppress warnings")
     parser.add_argument(
@@ -65,18 +65,7 @@ def _parse_args():
         help="the binary to use to generate the test case " "(default: llvm-mca)",
     )
     parser.add_argument("tests", metavar="<test-path>", nargs="+")
-    args = common.parse_commandline_args(parser)
-
-    _configure_warnings(args)
-
-    if not args.llvm_mca_binary:
-        raise Error("--llvm-mca-binary value cannot be empty string")
-
-    if "llvm-mca" not in os.path.basename(args.llvm_mca_binary):
-        _warn("unexpected binary name: {}".format(args.llvm_mca_binary))
-
-    return args
-
+    return parser
 
 def _get_run_infos(run_lines, args):
     run_infos = []
@@ -546,39 +535,44 @@ def _write_output(
         f.writelines(["{}\n".format(l).encode("utf-8") for l in output_lines])
 
 
-def main():
-    args = _parse_args()
-    test_paths = [test for pattern in args.tests for test in glob.glob(pattern)]
-    for test_path in test_paths:
-        sys.stderr.write("Test: {}\n".format(test_path))
-
-        # Call this per test. By default each warning will only be written once
-        # per source location. Reset the warning filter so that now each warning
-        # will be written once per source location per test.
-        _configure_warnings(args)
-
-        if not os.path.isfile(test_path):
-            raise Error("could not find test file: {}".format(test_path))
-
-        with open(test_path) as f:
-            input_lines = [l.rstrip() for l in f]
-
-        run_lines = common.find_run_lines(test_path, input_lines)
-        run_infos = _get_run_infos(run_lines, args)
-        common_prefix, prefix_pad = _get_useful_prefix_info(run_infos)
-        block_infos = _get_block_infos(run_infos, test_path, args, common_prefix)
-        _write_output(
-            test_path,
-            input_lines,
-            run_infos,
-            block_infos,
-            args,
-            common_prefix,
-            prefix_pad,
-        )
+def update_test_file(args, test_path, autogenerated_note):
+    sys.stderr.write("Test: {}\n".format(test_path))
 
-    return 0
+    # Call this per test. By default each warning will only be written once
+    # per source location. Reset the warning filter so that now each warning
+    # will be written once per source location per test.
+    _configure_warnings(args)
+
+    with open(test_path) as f:
+        input_lines = [l.rstrip() for l in f]
+
+    run_lines = common.find_run_lines(test_path, input_lines)
+    run_infos = _get_run_infos(run_lines, args)
+    common_prefix, prefix_pad = _get_useful_prefix_info(run_infos)
+    block_infos = _get_block_infos(run_infos, test_path, args, common_prefix)
+    _write_output(
+        test_path,
+        input_lines,
+        run_infos,
+        block_infos,
+        args,
+        common_prefix,
+        prefix_pad,
+    )
 
+def main():
+    script_name = "utils/" + os.path.basename(__file__)
+    parser = _get_parser()
+    args = common.parse_commandline_args(parser)
+    for ti in common.itertests(
+        args.tests, parser, script_name=script_name
+    ):
+        try:
+            update_test_file(ti.args, ti.path, ti.test_autogenerated_note)
+        except Exception:
+            common.warn("Error processing file", test_file=ti.path)
+            raise
+    return 0
 
 if __name__ == "__main__":
     try:

@github-actions
Copy link

github-actions bot commented Sep 26, 2023

✅ With the latest revision this PR passed the Python code formatter.


_configure_warnings(args)

if not args.llvm_mca_binary:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we should also preserve the checks from line 72 to 76

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Updated, but moved to main since parse_commandline_args is called in main.

@michaelmaitland michaelmaitland changed the title [UpdateTestChecks][llvm-mca] Use common.itertests and common.parse_commandline_args in update_mca_test_checks [UpdateTestChecks][llvm-mca] Use common.itertests in update_mca_test_checks Sep 26, 2023
Copy link
Member

@mshockwave mshockwave left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@michaelmaitland michaelmaitland merged commit 891d511 into llvm:main Sep 26, 2023
2 checks passed
legrosbuffle pushed a commit to legrosbuffle/llvm-project that referenced this pull request Sep 29, 2023
…checks (llvm#67477)

common.itertests has useful functionality such as skipping test case if
it starts with UTC_AVOID comment string. It also does some of the
functionality, such as skipping test file pattern if not found, that was
duplicated by update_mca_test_checks.

This patch uses this function to take advantage of extra behavior and
remove duplication.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants