[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 15:15:28 PST 2025


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


When --check-globals none, we skipped all the globals in check lines.
However, we are still checking the meta info in function defintion.

The generated checks still sensitive to metadata changes

This is to scrub the meta info and match them with {{.*}} instead.


>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/2] 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/2] 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



More information about the llvm-commits mailing list