[llvm] Add metadata pointer regex substitution to MIR update script (PR #163253)
via llvm-commits
llvm-commits at lists.llvm.org
Tue Oct 14 08:31:05 PDT 2025
https://github.com/saxlungs updated https://github.com/llvm/llvm-project/pull/163253
>From 2c7492f5db4b0beed883adfdc4d791e908584135 Mon Sep 17 00:00:00 2001
From: Domenic <domenic.nutile at gmail.com>
Date: Mon, 13 Oct 2025 15:28:48 -0400
Subject: [PATCH 1/2] Add metadata pointer regex substitution to MIR update
script
Signed-off-by: Domenic <domenic.nutile at gmail.com>
---
llvm/utils/update_mir_test_checks.py | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/llvm/utils/update_mir_test_checks.py b/llvm/utils/update_mir_test_checks.py
index c4ee0523a6469..6b0a3084a3f10 100755
--- a/llvm/utils/update_mir_test_checks.py
+++ b/llvm/utils/update_mir_test_checks.py
@@ -65,6 +65,8 @@
flags=(re.M | re.S),
)
+META_PTR_RE = re.compile(r"\<0x[a-f0-9]+\>", re.IGNORECASE)
+
class LLC:
def __init__(self, bin):
@@ -247,6 +249,14 @@ def update_test_file(args, test, autogenerated_note):
common.warn("No triple found: skipping file", test_file=test)
return
+ # Replace metadata pointer values inserted by LLC with generic regex
+ # capturing the pointer's format so that stale values don't break tests
+ no_pointer_output = ""
+ for line in raw_tool_output.splitlines():
+ line = META_PTR_RE.sub("<0x{{[0-9a-f]+}}>", line)
+ no_pointer_output += line + "\n"
+ raw_tool_output = no_pointer_output
+
build_function_info_dictionary(
test,
raw_tool_output,
>From bf7ed92f8734bc3e91782dcacf3af3a3f4d93276 Mon Sep 17 00:00:00 2001
From: Domenic <domenic.nutile at gmail.com>
Date: Tue, 14 Oct 2025 09:49:22 -0400
Subject: [PATCH 2/2] Add unit testing to ensure script updates behave as
expected
---
.../Inputs/metadata-pointer.ll | 29 +++++++++++++++
.../Inputs/metadata-pointer.ll.expected | 36 +++++++++++++++++++
.../metadata-pointer.test | 7 ++++
3 files changed, 72 insertions(+)
create mode 100644 llvm/test/tools/UpdateTestChecks/update_mir_test_checks/Inputs/metadata-pointer.ll
create mode 100644 llvm/test/tools/UpdateTestChecks/update_mir_test_checks/Inputs/metadata-pointer.ll.expected
create mode 100644 llvm/test/tools/UpdateTestChecks/update_mir_test_checks/metadata-pointer.test
diff --git a/llvm/test/tools/UpdateTestChecks/update_mir_test_checks/Inputs/metadata-pointer.ll b/llvm/test/tools/UpdateTestChecks/update_mir_test_checks/Inputs/metadata-pointer.ll
new file mode 100644
index 0000000000000..3268f1bfdf30a
--- /dev/null
+++ b/llvm/test/tools/UpdateTestChecks/update_mir_test_checks/Inputs/metadata-pointer.ll
@@ -0,0 +1,29 @@
+; NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 6
+; RUN: llc -global-isel -mtriple=amdgcn -mcpu=gfx900 -stop-after=irtranslator -o - %s | FileCheck %s
+
+define i32 @reloc_constant() {
+ ; CHECK-LABEL: name: reloc_constant
+ ; CHECK: bb.1 (%ir-block.0):
+ ; CHECK-NEXT: [[INT:%[0-9]+]]:_(s32) = G_INTRINSIC intrinsic(@llvm.amdgcn.reloc.constant), !0
+ ; CHECK-NEXT: [[INT1:%[0-9]+]]:_(s32) = G_INTRINSIC intrinsic(@llvm.amdgcn.reloc.constant), <0xc50ff1ce>
+ ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(s32) = G_ADD [[INT]], [[INT1]]
+ ; CHECK-NEXT: $vgpr0 = COPY [[ADD]](s32)
+ ; CHECK-NEXT: SI_RETURN implicit $vgpr0
+ %val0 = call i32 @llvm.amdgcn.reloc.constant(metadata !0)
+ %val1 = call i32 @llvm.amdgcn.reloc.constant(metadata i32 4)
+ %res = add i32 %val0, %val1
+ ret i32 %res
+}
+
+define i32 @reloc_other_constant() {
+ %val0 = call i32 @llvm.amdgcn.reloc.constant(metadata !0)
+ %val1 = call i32 @llvm.amdgcn.reloc.constant(metadata i32 8)
+ %res = add i32 %val0, %val1
+ ret i32 %res
+}
+
+declare i32 @llvm.amdgcn.reloc.constant(metadata) #0
+
+attributes #0 = { nounwind readnone speculatable willreturn }
+
+!0 = !{!"arst"}
diff --git a/llvm/test/tools/UpdateTestChecks/update_mir_test_checks/Inputs/metadata-pointer.ll.expected b/llvm/test/tools/UpdateTestChecks/update_mir_test_checks/Inputs/metadata-pointer.ll.expected
new file mode 100644
index 0000000000000..71bbe7cbb1d02
--- /dev/null
+++ b/llvm/test/tools/UpdateTestChecks/update_mir_test_checks/Inputs/metadata-pointer.ll.expected
@@ -0,0 +1,36 @@
+; NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 6
+; RUN: llc -global-isel -mtriple=amdgcn -mcpu=gfx900 -stop-after=irtranslator -o - %s | FileCheck %s
+
+define i32 @reloc_constant() {
+ ; CHECK-LABEL: name: reloc_constant
+ ; CHECK: bb.1 (%ir-block.0):
+ ; CHECK-NEXT: [[INT:%[0-9]+]]:_(s32) = G_INTRINSIC intrinsic(@llvm.amdgcn.reloc.constant), !0
+ ; CHECK-NEXT: [[INT1:%[0-9]+]]:_(s32) = G_INTRINSIC intrinsic(@llvm.amdgcn.reloc.constant), <0x{{[0-9a-f]+}}>
+ ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(s32) = G_ADD [[INT]], [[INT1]]
+ ; CHECK-NEXT: $vgpr0 = COPY [[ADD]](s32)
+ ; CHECK-NEXT: SI_RETURN implicit $vgpr0
+ %val0 = call i32 @llvm.amdgcn.reloc.constant(metadata !0)
+ %val1 = call i32 @llvm.amdgcn.reloc.constant(metadata i32 4)
+ %res = add i32 %val0, %val1
+ ret i32 %res
+}
+
+define i32 @reloc_other_constant() {
+ ; CHECK-LABEL: name: reloc_other_constant
+ ; CHECK: bb.1 (%ir-block.0):
+ ; CHECK-NEXT: [[INT:%[0-9]+]]:_(s32) = G_INTRINSIC intrinsic(@llvm.amdgcn.reloc.constant), !0
+ ; CHECK-NEXT: [[INT1:%[0-9]+]]:_(s32) = G_INTRINSIC intrinsic(@llvm.amdgcn.reloc.constant), <0x{{[0-9a-f]+}}>
+ ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(s32) = G_ADD [[INT]], [[INT1]]
+ ; CHECK-NEXT: $vgpr0 = COPY [[ADD]](s32)
+ ; CHECK-NEXT: SI_RETURN implicit $vgpr0
+ %val0 = call i32 @llvm.amdgcn.reloc.constant(metadata !0)
+ %val1 = call i32 @llvm.amdgcn.reloc.constant(metadata i32 8)
+ %res = add i32 %val0, %val1
+ ret i32 %res
+}
+
+declare i32 @llvm.amdgcn.reloc.constant(metadata) #0
+
+attributes #0 = { nounwind readnone speculatable willreturn }
+
+!0 = !{!"arst"}
diff --git a/llvm/test/tools/UpdateTestChecks/update_mir_test_checks/metadata-pointer.test b/llvm/test/tools/UpdateTestChecks/update_mir_test_checks/metadata-pointer.test
new file mode 100644
index 0000000000000..be27fc808bc76
--- /dev/null
+++ b/llvm/test/tools/UpdateTestChecks/update_mir_test_checks/metadata-pointer.test
@@ -0,0 +1,7 @@
+# REQUIRES: amdgpu-registered-target
+## Check that update_mir_test_checks properly replaces metadata operand pointers
+## written out by LLC with a pointer-capturing regex, and also does not produce
+## new metadata operand pointers
+
+# RUN: cp -f %S/Inputs/metadata-pointer.ll %t.ll && %update_mir_test_checks %t.ll
+# RUN: diff -u %S/Inputs/metadata-pointer.ll.expected %t.ll
More information about the llvm-commits
mailing list