[llvm] UpdateTestChecks: Don't check meta details in func definition w/--global none (PR #124205)

Jinsong Ji via llvm-commits llvm-commits at lists.llvm.org
Thu Jan 23 16:17:01 PST 2025


https://github.com/jsji updated https://github.com/llvm/llvm-project/pull/124205

>From a5d5564db928fe9d3f4f6bd766566a765954ed0f Mon Sep 17 00:00:00 2001
From: Jinsong Ji <jinsong.ji at intel.com>
Date: Thu, 23 Jan 2025 17:51:08 +0100
Subject: [PATCH 1/3] UpdateTestChecks: Ignore globals in checks when
 check-globals is none

---
 llvm/utils/UpdateTestChecks/common.py | 15 +++++++++++++--
 llvm/utils/update_cc_test_checks.py   |  2 +-
 llvm/utils/update_test_checks.py      |  2 +-
 3 files changed, 15 insertions(+), 4 deletions(-)

diff --git a/llvm/utils/UpdateTestChecks/common.py b/llvm/utils/UpdateTestChecks/common.py
index 1a875c2b523e42..05d4f81dc35447 100644
--- a/llvm/utils/UpdateTestChecks/common.py
+++ b/llvm/utils/UpdateTestChecks/common.py
@@ -982,6 +982,7 @@ def get_failed_prefixes(self):
 ##### Generator of LLVM IR CHECK lines
 
 SCRUB_IR_COMMENT_RE = re.compile(r"\s*;.*")
+SCRUB_IR_FUNC_META_RE = re.compile(r'((?:\!(?!dbg\b)[a-zA-Z_]\w*(?:\s+![0-9]+)?)\s*)+')
 
 # TODO: We should also derive check lines for global, debug, loop declarations, etc..
 
@@ -1086,6 +1087,7 @@ def __init__(
         nameless_values: List[NamelessValue],
         regexp_prefix,
         regexp_suffix,
+        no_meta_details = False
     ):
         self._version = version
         self._mode = mode
@@ -1093,6 +1095,7 @@ def __init__(
 
         self._regexp_prefix = regexp_prefix
         self._regexp_suffix = regexp_suffix
+        self._no_meta_details = no_meta_details
 
         self._regexp, _ = self._build_regexp(False, False)
         (
@@ -1146,6 +1149,9 @@ def get_regexp(self):
     def get_unstable_globals_regexp(self):
         return self._unstable_globals_regexp
 
+    def no_meta_details(self):
+        return self._no_meta_details
+
     # The entire match is group 0, the prefix has one group (=1), the entire
     # IR_VALUE_REGEXP_STRING is one group (=2), and then the nameless values start.
     FIRST_NAMELESS_GROUP_IN_MATCH = 3
@@ -1174,7 +1180,7 @@ def get_nameless_value_from_match(self, match) -> NamelessValue:
         return self.get_match_info(match)[1]
 
 
-def make_ir_generalizer(version):
+def make_ir_generalizer(version, no_meta_details):
     values = []
 
     if version >= 5:
@@ -1223,7 +1229,7 @@ def make_ir_generalizer(version):
     #        not (unstable_ids_only and nameless_value.match_literally)
     # ]
 
-    return GeneralizerInfo(version, GeneralizerInfo.MODE_IR, values, prefix, suffix)
+    return GeneralizerInfo(version, GeneralizerInfo.MODE_IR, values, prefix, suffix, no_meta_details)
 
 
 def make_asm_generalizer(version):
@@ -1725,6 +1731,7 @@ def generalize_check_lines(
     original_check_lines=None,
     *,
     unstable_globals_only=False,
+    no_meta_details = False,
 ):
     if unstable_globals_only:
         regexp = ginfo.get_unstable_globals_regexp()
@@ -1754,6 +1761,9 @@ def escape_braces(match_obj):
                     break
             # Ignore any comments, since the check lines will too.
             scrubbed_line = SCRUB_IR_COMMENT_RE.sub(r"", line)
+            # Ignore the metadata details if check global is none
+            if no_meta_details:
+               scrubbed_line = SCRUB_IR_FUNC_META_RE.sub(r"{{.*}}", scrubbed_line)
             lines[i] = scrubbed_line
 
     if not preserve_names:
@@ -1985,6 +1995,7 @@ def add_checks(
                     global_vars_seen,
                     preserve_names,
                     original_check_lines=[],
+                    no_meta_details=ginfo.no_meta_details()
                 )[0]
             func_name_separator = func_dict[checkprefix][func_name].func_name_separator
             if "[[" in args_and_sig:
diff --git a/llvm/utils/update_cc_test_checks.py b/llvm/utils/update_cc_test_checks.py
index 7a4796eaabb3bf..7b8fff6f24c084 100755
--- a/llvm/utils/update_cc_test_checks.py
+++ b/llvm/utils/update_cc_test_checks.py
@@ -368,7 +368,7 @@ def main():
 
         # Store only filechecked runlines.
         filecheck_run_list = [i for i in run_list if i[0]]
-        ginfo = common.make_ir_generalizer(version=ti.args.version)
+        ginfo = common.make_ir_generalizer(ti.args.version, ti.args.check_globals == "none")
         builder = common.FunctionTestBuilder(
             run_list=filecheck_run_list,
             flags=ti.args,
diff --git a/llvm/utils/update_test_checks.py b/llvm/utils/update_test_checks.py
index b413c253e39757..e71910bbb7e421 100755
--- a/llvm/utils/update_test_checks.py
+++ b/llvm/utils/update_test_checks.py
@@ -153,7 +153,7 @@ def main():
             # now, we just ignore all but the last.
             prefix_list.append((check_prefixes, tool_cmd_args, preprocess_cmd))
 
-        ginfo = common.make_ir_generalizer(ti.args.version)
+        ginfo = common.make_ir_generalizer(ti.args.version, ti.args.check_globals == "none")
         global_vars_seen_dict = {}
         builder = common.FunctionTestBuilder(
             run_list=prefix_list,

>From 0752d400441e7e35f977e6afa2c751ee3fdcb395 Mon Sep 17 00:00:00 2001
From: Jinsong Ji <jinsong.ji at intel.com>
Date: Fri, 24 Jan 2025 00:04:32 +0100
Subject: [PATCH 2/3] Add test

---
 .../Inputs/global_none_meta.ll                | 33 +++++++++++++++++++
 .../Inputs/global_none_meta.ll.expected       | 33 +++++++++++++++++++
 .../update_test_checks/global_none_meta.test  |  3 ++
 3 files changed, 69 insertions(+)
 create mode 100644 llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/global_none_meta.ll
 create mode 100644 llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/global_none_meta.ll.expected
 create mode 100644 llvm/test/tools/UpdateTestChecks/update_test_checks/global_none_meta.test

diff --git a/llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/global_none_meta.ll b/llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/global_none_meta.ll
new file mode 100644
index 00000000000000..b9fd8a47df14be
--- /dev/null
+++ b/llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/global_none_meta.ll
@@ -0,0 +1,33 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-globals none --version 5
+; RUN: opt < %s -S | FileCheck %s
+
+; Function Attrs: convergent noinline nounwind
+declare hidden spir_func void @__cxx_global_var_init() #0
+
+; Function Attrs: convergent noinline nounwind
+define hidden spir_kernel void @_GLOBAL__sub_I_global_init.clcpp() #0 !kernel_arg_addr_space !4 !kernel_arg_access_qual !4 !kernel_arg_type !4 !kernel_arg_base_type !4 !kernel_arg_type_qual !4 {
+; CHECK-LABEL: define hidden spir_kernel void @_GLOBAL__sub_I_global_init.clcpp(
+; CHECK-SAME: ) #[[ATTR0:[0-9]+]] {{.*}}{
+; CHECK-NEXT:  [[ENTRY:.*:]]
+; CHECK-NEXT:    call spir_func void @__cxx_global_var_init()
+; CHECK-NEXT:    ret void
+;
+entry:
+  call spir_func void @__cxx_global_var_init()
+  ret void
+}
+
+attributes #0 = { convergent noinline nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" }
+
+!llvm.module.flags = !{!0}
+!opencl.ocl.version = !{!1}
+!opencl.cxx.version = !{!2}
+!opencl.spir.version = !{!1}
+!llvm.ident = !{!3}
+
+!0 = !{i32 1, !"wchar_size", i32 4}
+!1 = !{i32 2, i32 0}
+!2 = !{i32 1, i32 0}
+!3 = !{!"clang version 20.0.0git"}
+!4 = !{}
+
diff --git a/llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/global_none_meta.ll.expected b/llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/global_none_meta.ll.expected
new file mode 100644
index 00000000000000..b9fd8a47df14be
--- /dev/null
+++ b/llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/global_none_meta.ll.expected
@@ -0,0 +1,33 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-globals none --version 5
+; RUN: opt < %s -S | FileCheck %s
+
+; Function Attrs: convergent noinline nounwind
+declare hidden spir_func void @__cxx_global_var_init() #0
+
+; Function Attrs: convergent noinline nounwind
+define hidden spir_kernel void @_GLOBAL__sub_I_global_init.clcpp() #0 !kernel_arg_addr_space !4 !kernel_arg_access_qual !4 !kernel_arg_type !4 !kernel_arg_base_type !4 !kernel_arg_type_qual !4 {
+; CHECK-LABEL: define hidden spir_kernel void @_GLOBAL__sub_I_global_init.clcpp(
+; CHECK-SAME: ) #[[ATTR0:[0-9]+]] {{.*}}{
+; CHECK-NEXT:  [[ENTRY:.*:]]
+; CHECK-NEXT:    call spir_func void @__cxx_global_var_init()
+; CHECK-NEXT:    ret void
+;
+entry:
+  call spir_func void @__cxx_global_var_init()
+  ret void
+}
+
+attributes #0 = { convergent noinline nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" }
+
+!llvm.module.flags = !{!0}
+!opencl.ocl.version = !{!1}
+!opencl.cxx.version = !{!2}
+!opencl.spir.version = !{!1}
+!llvm.ident = !{!3}
+
+!0 = !{i32 1, !"wchar_size", i32 4}
+!1 = !{i32 2, i32 0}
+!2 = !{i32 1, i32 0}
+!3 = !{!"clang version 20.0.0git"}
+!4 = !{}
+
diff --git a/llvm/test/tools/UpdateTestChecks/update_test_checks/global_none_meta.test b/llvm/test/tools/UpdateTestChecks/update_test_checks/global_none_meta.test
new file mode 100644
index 00000000000000..11a4665c44f929
--- /dev/null
+++ b/llvm/test/tools/UpdateTestChecks/update_test_checks/global_none_meta.test
@@ -0,0 +1,3 @@
+## Basic test checking that update_test_checks.py --check-globals none works correctly
+# RUN: cp -f %S/Inputs/global_none_meta.ll %t.ll && %update_test_checks %t.ll --check-globals none
+# RUN: diff -u %t.ll %S/Inputs/global_none_meta.ll.expected

>From 81e22597b7a0d6872fcb9906270526de86330c86 Mon Sep 17 00:00:00 2001
From: Jinsong Ji <jinsong.ji at intel.com>
Date: Fri, 24 Jan 2025 01:14:57 +0100
Subject: [PATCH 3/3] format

---
 llvm/utils/UpdateTestChecks/common.py | 14 ++++++++------
 llvm/utils/update_cc_test_checks.py   |  4 +++-
 llvm/utils/update_test_checks.py      |  4 +++-
 3 files changed, 14 insertions(+), 8 deletions(-)

diff --git a/llvm/utils/UpdateTestChecks/common.py b/llvm/utils/UpdateTestChecks/common.py
index 05d4f81dc35447..27a4f2e8f40567 100644
--- a/llvm/utils/UpdateTestChecks/common.py
+++ b/llvm/utils/UpdateTestChecks/common.py
@@ -982,7 +982,7 @@ def get_failed_prefixes(self):
 ##### Generator of LLVM IR CHECK lines
 
 SCRUB_IR_COMMENT_RE = re.compile(r"\s*;.*")
-SCRUB_IR_FUNC_META_RE = re.compile(r'((?:\!(?!dbg\b)[a-zA-Z_]\w*(?:\s+![0-9]+)?)\s*)+')
+SCRUB_IR_FUNC_META_RE = re.compile(r"((?:\!(?!dbg\b)[a-zA-Z_]\w*(?:\s+![0-9]+)?)\s*)+")
 
 # TODO: We should also derive check lines for global, debug, loop declarations, etc..
 
@@ -1087,7 +1087,7 @@ def __init__(
         nameless_values: List[NamelessValue],
         regexp_prefix,
         regexp_suffix,
-        no_meta_details = False
+        no_meta_details=False,
     ):
         self._version = version
         self._mode = mode
@@ -1229,7 +1229,9 @@ def make_ir_generalizer(version, no_meta_details):
     #        not (unstable_ids_only and nameless_value.match_literally)
     # ]
 
-    return GeneralizerInfo(version, GeneralizerInfo.MODE_IR, values, prefix, suffix, no_meta_details)
+    return GeneralizerInfo(
+        version, GeneralizerInfo.MODE_IR, values, prefix, suffix, no_meta_details
+    )
 
 
 def make_asm_generalizer(version):
@@ -1731,7 +1733,7 @@ def generalize_check_lines(
     original_check_lines=None,
     *,
     unstable_globals_only=False,
-    no_meta_details = False,
+    no_meta_details=False,
 ):
     if unstable_globals_only:
         regexp = ginfo.get_unstable_globals_regexp()
@@ -1763,7 +1765,7 @@ def escape_braces(match_obj):
             scrubbed_line = SCRUB_IR_COMMENT_RE.sub(r"", line)
             # Ignore the metadata details if check global is none
             if no_meta_details:
-               scrubbed_line = SCRUB_IR_FUNC_META_RE.sub(r"{{.*}}", scrubbed_line)
+                scrubbed_line = SCRUB_IR_FUNC_META_RE.sub(r"{{.*}}", scrubbed_line)
             lines[i] = scrubbed_line
 
     if not preserve_names:
@@ -1995,7 +1997,7 @@ def add_checks(
                     global_vars_seen,
                     preserve_names,
                     original_check_lines=[],
-                    no_meta_details=ginfo.no_meta_details()
+                    no_meta_details=ginfo.no_meta_details(),
                 )[0]
             func_name_separator = func_dict[checkprefix][func_name].func_name_separator
             if "[[" in args_and_sig:
diff --git a/llvm/utils/update_cc_test_checks.py b/llvm/utils/update_cc_test_checks.py
index 7b8fff6f24c084..7529d480b35dd8 100755
--- a/llvm/utils/update_cc_test_checks.py
+++ b/llvm/utils/update_cc_test_checks.py
@@ -368,7 +368,9 @@ def main():
 
         # Store only filechecked runlines.
         filecheck_run_list = [i for i in run_list if i[0]]
-        ginfo = common.make_ir_generalizer(ti.args.version, ti.args.check_globals == "none")
+        ginfo = common.make_ir_generalizer(
+            ti.args.version, ti.args.check_globals == "none"
+        )
         builder = common.FunctionTestBuilder(
             run_list=filecheck_run_list,
             flags=ti.args,
diff --git a/llvm/utils/update_test_checks.py b/llvm/utils/update_test_checks.py
index e71910bbb7e421..4f83c02f19f6f2 100755
--- a/llvm/utils/update_test_checks.py
+++ b/llvm/utils/update_test_checks.py
@@ -153,7 +153,9 @@ def main():
             # now, we just ignore all but the last.
             prefix_list.append((check_prefixes, tool_cmd_args, preprocess_cmd))
 
-        ginfo = common.make_ir_generalizer(ti.args.version, ti.args.check_globals == "none")
+        ginfo = common.make_ir_generalizer(
+            ti.args.version, ti.args.check_globals == "none"
+        )
         global_vars_seen_dict = {}
         builder = common.FunctionTestBuilder(
             run_list=prefix_list,



More information about the llvm-commits mailing list