[llvm] [AMDGPU] PreRA Peephole: EliminateSaveRestore (PR #191583)

Zeng Wu via llvm-commits llvm-commits at lists.llvm.org
Mon Apr 13 21:55:24 PDT 2026


https://github.com/zwu-2025 updated https://github.com/llvm/llvm-project/pull/191583

>From 31aa2fa61cd748ece35c89cf23fe6f67ce329d2e Mon Sep 17 00:00:00 2001
From: root <Zeng.Wu2 at amd.com>
Date: Tue, 14 Apr 2026 04:52:31 +0000
Subject: [PATCH] [AMDGPU] Add a mir test to verify register-coalesce works for
 eliminate-save-restore pattern

---
 .../AMDGPU/amdgcn-eliminate-save-restore.mir  | 44 +++++++++++++++++++
 1 file changed, 44 insertions(+)
 create mode 100644 llvm/test/CodeGen/AMDGPU/amdgcn-eliminate-save-restore.mir

diff --git a/llvm/test/CodeGen/AMDGPU/amdgcn-eliminate-save-restore.mir b/llvm/test/CodeGen/AMDGPU/amdgcn-eliminate-save-restore.mir
new file mode 100644
index 0000000000000..45d2ec48aad89
--- /dev/null
+++ b/llvm/test/CodeGen/AMDGPU/amdgcn-eliminate-save-restore.mir
@@ -0,0 +1,44 @@
+# RUN: llc -march=amdgcn -mcpu=gfx950 -run-pass="phi-node-elimination,register-coalescer"  --verify-machineinstrs %s -o - | FileCheck %s
+
+---
+name:            test_basic_case
+tracksRegLiveness: true
+body:             |
+  bb.0:
+    successors: %bb.1(0x40000000)
+    liveins: $vgpr0
+
+    %orig_0:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
+    S_BRANCH %bb.1
+
+  bb.1:
+    successors: %bb.1(0x40000000)
+    %tmp:vgpr_32 = PHI %orig_0, %bb.0, %orig_next, %bb.1
+    
+    %other:vgpr_32 = V_MOV_B32_e32 42, implicit $exec
+    %orig:vgpr_32 = V_ADD_U32_e32 %tmp, %other, implicit $exec
+    %2:vgpr_32 = V_MUL_LO_U32_e64 %orig, %orig, implicit $exec
+    %orig_next:vgpr_32 = V_MOV_B32_e32 %tmp, implicit $exec
+
+    S_BRANCH %bb.1
+
+...
+
+
+# CHECK-LABEL: body:
+
+# bb.0
+# CHECK:  bb.0:
+# CHECK-NEXT:    successors: %bb.1
+# CHECK-NEXT:    liveins: $vgpr0
+# CHECK:    [[R1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
+# CHECK-NEXT:    S_BRANCH %bb.1
+
+# bb.1
+# CHECK:  bb.1:
+# CHECK-NEXT:    successors: %bb.1
+# CHECK:         %other:vgpr_32 = V_MOV_B32_e32 42, implicit $exec
+# CHECK-NEXT:    %orig:vgpr_32 = V_ADD_U32_e32 [[R1]], %other, implicit $exec
+# CHECK-NEXT:    dead %{{[0-9]+}}:vgpr_32 = V_MUL_LO_U32_e64 %orig, %orig, implicit $exec
+# CHECK-NEXT:    [[R1]]:vgpr_32 = V_MOV_B32_e32 [[R1]], implicit $exec
+# CHECK-NEXT:    S_BRANCH %bb.1



More information about the llvm-commits mailing list