[PATCH] D75367: [SystemZ] Bugfix for backchain with packed-stack
Jonas Paulsson via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Mar 3 06:05:54 PST 2020
This revision was automatically updated to reflect the committed changes.
Closed by commit rG237625757a1f: [SystemZ] Bugfix for backchain with packed-stack (authored by jonpa).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D75367/new/
https://reviews.llvm.org/D75367
Files:
llvm/lib/Target/SystemZ/SystemZFrameLowering.cpp
llvm/test/CodeGen/SystemZ/frame-25.ll
Index: llvm/test/CodeGen/SystemZ/frame-25.ll
===================================================================
--- /dev/null
+++ llvm/test/CodeGen/SystemZ/frame-25.ll
@@ -0,0 +1,24 @@
+; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s
+;
+; Test that space is allocated for the incoming back chain also in cases
+; where no GPRs are saved / restored.
+
+define void @fun0() #0 {
+; CHECK-LABEL: fun0:
+; CHECK: lgr %r1, %r15
+; CHECK-NEXT: aghi %r15, -24
+; CHECK-NEXT: stg %r1, 152(%r15)
+; CHECK-NEXT: #APP
+; CHECK-NEXT: stcke 160(%r15)
+; CHECK-NEXT: #NO_APP
+; CHECK-NEXT: aghi %r15, 24
+; CHECK-NEXT: br %r14
+
+entry:
+ %b = alloca [16 x i8], align 1
+ %0 = getelementptr inbounds [16 x i8], [16 x i8]* %b, i64 0, i64 0
+ call void asm "stcke $0", "=*Q"([16 x i8]* nonnull %b) #2
+ ret void
+}
+
+attributes #0 = { nounwind "packed-stack" "backchain" "use-soft-float"="true" }
Index: llvm/lib/Target/SystemZ/SystemZFrameLowering.cpp
===================================================================
--- llvm/lib/Target/SystemZ/SystemZFrameLowering.cpp
+++ llvm/lib/Target/SystemZ/SystemZFrameLowering.cpp
@@ -315,9 +315,10 @@
processFunctionBeforeFrameFinalized(MachineFunction &MF,
RegScavenger *RS) const {
MachineFrameInfo &MFFrame = MF.getFrameInfo();
+ bool BackChain = MF.getFunction().hasFnAttribute("backchain");
- if (!usePackedStack(MF))
- // Always create the full incoming register save area.
+ if (!usePackedStack(MF) || BackChain)
+ // Create the incoming register save area.
getOrCreateFramePointerSaveIndex(MF);
// Get the size of our stack frame to be allocated ...
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D75367.247874.patch
Type: text/x-patch
Size: 1687 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200303/478d1a0d/attachment.bin>
More information about the llvm-commits
mailing list