[llvm] [utils][MCA] Add a helper script to create input-file-based tests (PR #190074)

Min-Yih Hsu via llvm-commits llvm-commits at lists.llvm.org
Fri Apr 3 09:14:28 PDT 2026


https://github.com/mshockwave updated https://github.com/llvm/llvm-project/pull/190074

>From b25a03eb058de12dd2ef7c00eea8d726289de203 Mon Sep 17 00:00:00 2001
From: Min-Yih Hsu <min.hsu at sifive.com>
Date: Wed, 1 Apr 2026 11:26:13 -0700
Subject: [PATCH 1/4] [utils][MCA] Add a helper script to create
 input-file-based tests

---
 llvm/utils/create-stencil-mca-tests.py | 57 ++++++++++++++++++++++++++
 1 file changed, 57 insertions(+)
 create mode 100755 llvm/utils/create-stencil-mca-tests.py

diff --git a/llvm/utils/create-stencil-mca-tests.py b/llvm/utils/create-stencil-mca-tests.py
new file mode 100755
index 0000000000000..d9420d4df6c09
--- /dev/null
+++ b/llvm/utils/create-stencil-mca-tests.py
@@ -0,0 +1,57 @@
+#!/usr/bin/env python3
+
+from pathlib import Path
+from os import path
+
+desc='''
+A simple script to create new llvm-mca tests from a set of input files. For each .s files under <input files folder>,
+it creates a corresponding .test file containing the RUN line, in which the llvm-mca command reads the input from the
+said .s file.
+
+Example Usage:
+```
+create_mca_tests.py --triple riscv64 --cpu generic-rv64 test/tools/llvm-mca/RISCV/Inputs test/tools/llvm-mca/RISCV/Generic
+```
+
+This command will create files like `test/tools/llvm-mca/RISCV/Generic/mul-div.test` whose RUN line takes
+`test/tools/llvm-mca/RISCV/Inputs/mul-div.s` as input.
+'''
+
+run_line_template = '# RUN: llvm-mca -mtriple={triple} -mcpu={cpu} -iterations=1 -instruction-tables=full {extra_mca_args} %p/{input_file} | FileCheck {extra_filecheck_args} %s'
+
+def entry(args):
+    input_dir_path = Path(args.input_dir)
+    output_dir_path = Path(args.output_dir)
+
+    # Find all the input files.
+    for input_file in input_dir_path.glob('**/*.s'):
+        new_file = input_file.relative_to(input_dir_path)
+        # Filter out unwanted files.
+        if any(new_file.match(x) for x in (args.exclude or [])):
+            continue
+        new_file = output_dir_path / new_file.with_suffix('.test')
+        # Make sure the destination folder is there
+        new_file.parent.mkdir(exist_ok=True, parents=True)
+        with open(new_file, 'w') as output_file:
+            input_relative_path = path.relpath(input_file, start=new_file.parent)
+            run_line = run_line_template.format(
+                    triple=args.triple, cpu=args.cpu, input_file=input_relative_path,
+                    extra_mca_args=args.extra_mca_args, extra_filecheck_args=args.extra_filecheck_args)
+            print(run_line, file=output_file)
+
+if __name__ == '__main__':
+    from argparse import ArgumentParser
+    parser = ArgumentParser(description=desc)
+    parser.add_argument('input_dir', type=str, metavar='<input files folder>',
+            help='Folder to read input files from')
+    parser.add_argument('output_dir', type=str, metavar='<output folder>',
+            help='Folder to put output test files to')
+    parser.add_argument('--triple', required=True, type=str, help='-mtriple to use')
+    parser.add_argument('--cpu', required=True, type=str, help='-mcpu to use')
+    parser.add_argument('--exclude', nargs='+', metavar='<file>',
+            help='Input files, relative to the input folder, to exclude')
+    parser.add_argument('--extra-mca-args', type=str, default='', metavar='<flags>',
+            help='Extra command line arguments for llvm-mca')
+    parser.add_argument('--extra-filecheck-args', type=str, default='', metavar='<flags>',
+            help='Extra command line arguments for FileCheck')
+    entry(parser.parse_args())

>From a1b567846b6426589a7233fe853185dee1d8a464 Mon Sep 17 00:00:00 2001
From: Min-Yih Hsu <min.hsu at sifive.com>
Date: Wed, 1 Apr 2026 15:37:26 -0700
Subject: [PATCH 2/4] fixup! Formatting

---
 llvm/utils/create-stencil-mca-tests.py | 71 ++++++++++++++++++--------
 1 file changed, 50 insertions(+), 21 deletions(-)

diff --git a/llvm/utils/create-stencil-mca-tests.py b/llvm/utils/create-stencil-mca-tests.py
index d9420d4df6c09..03a579cefc734 100755
--- a/llvm/utils/create-stencil-mca-tests.py
+++ b/llvm/utils/create-stencil-mca-tests.py
@@ -3,7 +3,7 @@
 from pathlib import Path
 from os import path
 
-desc='''
+desc = """
 A simple script to create new llvm-mca tests from a set of input files. For each .s files under <input files folder>,
 it creates a corresponding .test file containing the RUN line, in which the llvm-mca command reads the input from the
 said .s file.
@@ -15,43 +15,72 @@
 
 This command will create files like `test/tools/llvm-mca/RISCV/Generic/mul-div.test` whose RUN line takes
 `test/tools/llvm-mca/RISCV/Inputs/mul-div.s` as input.
-'''
+"""
+
+run_line_template = "# RUN: llvm-mca -mtriple={triple} -mcpu={cpu} -iterations=1 -instruction-tables=full {extra_mca_args} %p/{input_file} | FileCheck {extra_filecheck_args} %s"
 
-run_line_template = '# RUN: llvm-mca -mtriple={triple} -mcpu={cpu} -iterations=1 -instruction-tables=full {extra_mca_args} %p/{input_file} | FileCheck {extra_filecheck_args} %s'
 
 def entry(args):
     input_dir_path = Path(args.input_dir)
     output_dir_path = Path(args.output_dir)
 
     # Find all the input files.
-    for input_file in input_dir_path.glob('**/*.s'):
+    for input_file in input_dir_path.glob("**/*.s"):
         new_file = input_file.relative_to(input_dir_path)
         # Filter out unwanted files.
         if any(new_file.match(x) for x in (args.exclude or [])):
             continue
-        new_file = output_dir_path / new_file.with_suffix('.test')
+        new_file = output_dir_path / new_file.with_suffix(".test")
         # Make sure the destination folder is there
         new_file.parent.mkdir(exist_ok=True, parents=True)
-        with open(new_file, 'w') as output_file:
+        with open(new_file, "w") as output_file:
             input_relative_path = path.relpath(input_file, start=new_file.parent)
             run_line = run_line_template.format(
-                    triple=args.triple, cpu=args.cpu, input_file=input_relative_path,
-                    extra_mca_args=args.extra_mca_args, extra_filecheck_args=args.extra_filecheck_args)
+                triple=args.triple,
+                cpu=args.cpu,
+                input_file=input_relative_path,
+                extra_mca_args=args.extra_mca_args,
+                extra_filecheck_args=args.extra_filecheck_args,
+            )
             print(run_line, file=output_file)
 
-if __name__ == '__main__':
+
+if __name__ == "__main__":
     from argparse import ArgumentParser
+
     parser = ArgumentParser(description=desc)
-    parser.add_argument('input_dir', type=str, metavar='<input files folder>',
-            help='Folder to read input files from')
-    parser.add_argument('output_dir', type=str, metavar='<output folder>',
-            help='Folder to put output test files to')
-    parser.add_argument('--triple', required=True, type=str, help='-mtriple to use')
-    parser.add_argument('--cpu', required=True, type=str, help='-mcpu to use')
-    parser.add_argument('--exclude', nargs='+', metavar='<file>',
-            help='Input files, relative to the input folder, to exclude')
-    parser.add_argument('--extra-mca-args', type=str, default='', metavar='<flags>',
-            help='Extra command line arguments for llvm-mca')
-    parser.add_argument('--extra-filecheck-args', type=str, default='', metavar='<flags>',
-            help='Extra command line arguments for FileCheck')
+    parser.add_argument(
+        "input_dir",
+        type=str,
+        metavar="<input files folder>",
+        help="Folder to read input files from",
+    )
+    parser.add_argument(
+        "output_dir",
+        type=str,
+        metavar="<output folder>",
+        help="Folder to put output test files to",
+    )
+    parser.add_argument("--triple", required=True, type=str, help="-mtriple to use")
+    parser.add_argument("--cpu", required=True, type=str, help="-mcpu to use")
+    parser.add_argument(
+        "--exclude",
+        nargs="+",
+        metavar="<file>",
+        help="Input files, relative to the input folder, to exclude",
+    )
+    parser.add_argument(
+        "--extra-mca-args",
+        type=str,
+        default="",
+        metavar="<flags>",
+        help="Extra command line arguments for llvm-mca",
+    )
+    parser.add_argument(
+        "--extra-filecheck-args",
+        type=str,
+        default="",
+        metavar="<flags>",
+        help="Extra command line arguments for FileCheck",
+    )
     entry(parser.parse_args())

>From f7629c0734d53d6d0a2e669e648e4da79d61ba4f Mon Sep 17 00:00:00 2001
From: Min-Yih Hsu <min.hsu at sifive.com>
Date: Thu, 2 Apr 2026 13:28:28 -0700
Subject: [PATCH 3/4] fixup! Address review comments

---
 ...reate-stencil-mca-tests.py => create-template-mca-tests.py} | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)
 rename llvm/utils/{create-stencil-mca-tests.py => create-template-mca-tests.py} (98%)

diff --git a/llvm/utils/create-stencil-mca-tests.py b/llvm/utils/create-template-mca-tests.py
similarity index 98%
rename from llvm/utils/create-stencil-mca-tests.py
rename to llvm/utils/create-template-mca-tests.py
index 03a579cefc734..87462bf2e499a 100755
--- a/llvm/utils/create-stencil-mca-tests.py
+++ b/llvm/utils/create-template-mca-tests.py
@@ -2,6 +2,7 @@
 
 from pathlib import Path
 from os import path
+from argparse import ArgumentParser
 
 desc = """
 A simple script to create new llvm-mca tests from a set of input files. For each .s files under <input files folder>,
@@ -46,8 +47,6 @@ def entry(args):
 
 
 if __name__ == "__main__":
-    from argparse import ArgumentParser
-
     parser = ArgumentParser(description=desc)
     parser.add_argument(
         "input_dir",

>From 7848d306915dd69a4cd736280e31809b3b247e16 Mon Sep 17 00:00:00 2001
From: Min-Yih Hsu <min.hsu at sifive.com>
Date: Fri, 3 Apr 2026 09:14:01 -0700
Subject: [PATCH 4/4] fixup! Update file name

---
 ...reate-template-mca-tests.py => create_template_mca_tests.py} | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
 rename llvm/utils/{create-template-mca-tests.py => create_template_mca_tests.py} (95%)

diff --git a/llvm/utils/create-template-mca-tests.py b/llvm/utils/create_template_mca_tests.py
similarity index 95%
rename from llvm/utils/create-template-mca-tests.py
rename to llvm/utils/create_template_mca_tests.py
index 87462bf2e499a..428989a462cac 100755
--- a/llvm/utils/create-template-mca-tests.py
+++ b/llvm/utils/create_template_mca_tests.py
@@ -11,7 +11,7 @@
 
 Example Usage:
 ```
-create_mca_tests.py --triple riscv64 --cpu generic-rv64 test/tools/llvm-mca/RISCV/Inputs test/tools/llvm-mca/RISCV/Generic
+create_template_mca_tests.py --triple riscv64 --cpu generic-rv64 test/tools/llvm-mca/RISCV/Inputs test/tools/llvm-mca/RISCV/Generic
 ```
 
 This command will create files like `test/tools/llvm-mca/RISCV/Generic/mul-div.test` whose RUN line takes



More information about the llvm-commits mailing list