[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