[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