[llvm] AMDGPU: Set transient stack alignment to 4 (PR #193517)

Matt Arsenault via llvm-commits llvm-commits at lists.llvm.org
Thu Apr 23 01:51:28 PDT 2026


https://github.com/arsenm updated https://github.com/llvm/llvm-project/pull/193517

>From a005e1f618ee5718b281b35d65d5e3b054ffa59f Mon Sep 17 00:00:00 2001
From: Matt Arsenault <Matthew.Arsenault at amd.com>
Date: Wed, 22 Apr 2026 14:55:42 +0100
Subject: [PATCH 1/2] AMDGPU: Set transient stack alignment to 4

Some of the frame index handling code seems to assume
it can preserve values in SCC through an add by using an
add carry, and clearing the low bit of the resultant pointer,
which means an odd SP value could be corrupted. I haven't
found a case where this was meaningful; we always end up
using a 4 byte aligned pointer anyway. Set this just in case.
---
 llvm/lib/Target/AMDGPU/GCNSubtarget.cpp | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/llvm/lib/Target/AMDGPU/GCNSubtarget.cpp b/llvm/lib/Target/AMDGPU/GCNSubtarget.cpp
index c56a746d63000..bbb491a4849b2 100644
--- a/llvm/lib/Target/AMDGPU/GCNSubtarget.cpp
+++ b/llvm/lib/Target/AMDGPU/GCNSubtarget.cpp
@@ -185,7 +185,8 @@ GCNSubtarget::GCNSubtarget(const Triple &TT, StringRef GPU, StringRef FS,
     InstrItins(getInstrItineraryForCPU(GPU)),
     InstrInfo(initializeSubtargetDependencies(TT, GPU, FS)),
     TLInfo(TM, *this),
-    FrameLowering(TargetFrameLowering::StackGrowsUp, getStackAlignment(), 0) {
+    FrameLowering(TargetFrameLowering::StackGrowsUp, getStackAlignment(), 0,
+                  /*TransAl=*/Align(4)) {
   // clang-format on
   MaxWavesPerEU = AMDGPU::IsaInfo::getMaxWavesPerEU(this);
   EUsPerCU = AMDGPU::IsaInfo::getEUsPerCU(this);

>From 67366d7f9da5769f3224ab19da8f176f030a40ea Mon Sep 17 00:00:00 2001
From: Matt Arsenault <Matthew.Arsenault at amd.com>
Date: Thu, 23 Apr 2026 09:51:01 +0100
Subject: [PATCH 2/2] comment

---
 llvm/lib/Target/AMDGPU/GCNSubtarget.cpp | 1 +
 1 file changed, 1 insertion(+)

diff --git a/llvm/lib/Target/AMDGPU/GCNSubtarget.cpp b/llvm/lib/Target/AMDGPU/GCNSubtarget.cpp
index bbb491a4849b2..e6a13d5e0f115 100644
--- a/llvm/lib/Target/AMDGPU/GCNSubtarget.cpp
+++ b/llvm/lib/Target/AMDGPU/GCNSubtarget.cpp
@@ -185,6 +185,7 @@ GCNSubtarget::GCNSubtarget(const Triple &TT, StringRef GPU, StringRef FS,
     InstrItins(getInstrItineraryForCPU(GPU)),
     InstrInfo(initializeSubtargetDependencies(TT, GPU, FS)),
     TLInfo(TM, *this),
+    // Frame index expansion sometimes assumes the low bit of SP is 0
     FrameLowering(TargetFrameLowering::StackGrowsUp, getStackAlignment(), 0,
                   /*TransAl=*/Align(4)) {
   // clang-format on



More information about the llvm-commits mailing list