[PATCH] D84218: [PowerPC] Fix wrong codegen when stack pointer has to realign in prologue
Kai Luo via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Jul 20 21:16:41 PDT 2020
lkail created this revision.
lkail added reviewers: PowerPC, jsji, steven.zhang.
Herald added subscribers: llvm-commits, shchenz, kbarton, hiraditya, nemanjai.
Herald added a project: LLVM.
lkail added a parent revision: D84152: [PowerPC] Fix wrong codegen when stack pointer has to realign performing dynalloc.
Herald added a subscriber: wuzish.
Current powerpc backend generates wrong code sequence if stack pointer has to realign if -fstack-clash-protection enabled. When probing in prologue, backend should generate a subtraction instruction rather than a `stux` instruction to realign the stack pointer.
This patch is part of fix of https://bugs.llvm.org/show_bug.cgi?id=46759
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D84218
Files:
llvm/lib/Target/PowerPC/PPCFrameLowering.cpp
llvm/test/CodeGen/PowerPC/pr46759.ll
Index: llvm/test/CodeGen/PowerPC/pr46759.ll
===================================================================
--- llvm/test/CodeGen/PowerPC/pr46759.ll
+++ llvm/test/CodeGen/PowerPC/pr46759.ll
@@ -12,7 +12,7 @@
; CHECK-LE-NEXT: mr r12, r1
; CHECK-LE-NEXT: .cfi_def_cfa r12, 0
; CHECK-LE-NEXT: clrldi r0, r12, 53
-; CHECK-LE-NEXT: stdux r12, r1, r0
+; CHECK-LE-NEXT: subc r1, r1, r0
; CHECK-LE-NEXT: stdu r12, -2048(r1)
; CHECK-LE-NEXT: stdu r12, -4096(r1)
; CHECK-LE-NEXT: .cfi_def_cfa_register r1
Index: llvm/lib/Target/PowerPC/PPCFrameLowering.cpp
===================================================================
--- llvm/lib/Target/PowerPC/PPCFrameLowering.cpp
+++ llvm/lib/Target/PowerPC/PPCFrameLowering.cpp
@@ -1466,11 +1466,10 @@
.addImm(0)
.addImm(32 - Log2(MaxAlign))
.addImm(31);
- BuildMI(PrologMBB, {MI}, DL, TII.get(isPPC64 ? PPC::STDUX : PPC::STWUX),
+ BuildMI(PrologMBB, {MI}, DL, TII.get(isPPC64 ? PPC::SUBFC8 : PPC::SUBFC),
SPReg)
- .addReg(FPReg)
- .addReg(SPReg)
- .addReg(ScratchReg);
+ .addReg(ScratchReg)
+ .addReg(SPReg);
}
// Probe residual part.
if (NegResidualSize) {
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D84218.279393.patch
Type: text/x-patch
Size: 1224 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200721/f3250c01/attachment-0001.bin>
More information about the llvm-commits
mailing list