[llvm] [RISCV][NFC] Simplify the sp-offset reduction by spimm of CM.PUSH/POP. (PR #66667)

Yeting Kuo via llvm-commits llvm-commits at lists.llvm.org
Mon Sep 18 09:20:08 PDT 2023


https://github.com/yetingk created https://github.com/llvm/llvm-project/pull/66667

When inserting prolgue/epilogue, we use the spimm of CM.PUSH/POP to reduce the following offset for sp. Previously, we tried to use the free space of the push stack to minimize the following sp-offset. But it's useless, since free space must be less than 16 and required stack should be aligned to 16 before/after the adjustment.

>From 4cdad51512977697d9578c3301a6c4442c26d520 Mon Sep 17 00:00:00 2001
From: Yeting Kuo <yeting.kuo at sifive.com>
Date: Mon, 18 Sep 2023 23:45:19 +0800
Subject: [PATCH] [RISCV][NFC] Simplify the sp-offset reduction by spimm of
 CM.PUSH/POP.

When inserting prolgue/epilogue, we use the spimm of CM.PUSH/POP to reduce the
following offset for sp. Previously, we tried to use the free space of the push
stack to minimize the following sp-offset. But it's useless, since free space
must be less than 16 and required stack should be aligned to 16 before/after the adjustment.
---
 llvm/lib/Target/RISCV/RISCVFrameLowering.cpp | 23 +++++---------------
 1 file changed, 6 insertions(+), 17 deletions(-)

diff --git a/llvm/lib/Target/RISCV/RISCVFrameLowering.cpp b/llvm/lib/Target/RISCV/RISCVFrameLowering.cpp
index add933250f8473d..cbcf41a979c9e47 100644
--- a/llvm/lib/Target/RISCV/RISCVFrameLowering.cpp
+++ b/llvm/lib/Target/RISCV/RISCVFrameLowering.cpp
@@ -276,16 +276,6 @@ static Register getMaxPushPopReg(const MachineFunction &MF,
   return MaxPushPopReg;
 }
 
-static uint64_t adjSPInPushPop(MachineBasicBlock::iterator MBBI,
-                               unsigned RequiredStack, unsigned FreePushStack,
-                               bool IsPop) {
-  if (FreePushStack > RequiredStack)
-    RequiredStack = 0;
-  unsigned Spimm = std::min(RequiredStack, 48u);
-  MBBI->getOperand(1).setImm(Spimm);
-  return alignTo(RequiredStack - Spimm, 16);
-}
-
 // Return true if the specified function should have a dedicated frame
 // pointer register.  This is true if frame pointer elimination is
 // disabled, if it needs dynamic stack realignment, if the function has
@@ -539,10 +529,9 @@ void RISCVFrameLowering::emitPrologue(MachineFunction &MF,
   if (RVFI->isPushable(MF) && FirstFrameSetup->getOpcode() == RISCV::CM_PUSH) {
     // Use available stack adjustment in push instruction to allocate additional
     // stack space.
-    unsigned PushStack = RVFI->getRVPushRegs() * (STI.getXLen() / 8);
-    unsigned SpImmBase = RVFI->getRVPushStackSize();
-    StackSize = adjSPInPushPop(FirstFrameSetup, StackSize,
-                               (SpImmBase - PushStack), true);
+    uint64_t Spimm = std::min(StackSize, (uint64_t)48);
+    FirstFrameSetup->getOperand(1).setImm(Spimm);
+    StackSize -= Spimm;
   }
 
   if (StackSize != 0) {
@@ -777,9 +766,9 @@ void RISCVFrameLowering::emitEpilogue(MachineFunction &MF,
       MBBI->getOpcode() == RISCV::CM_POP) {
     // Use available stack adjustment in pop instruction to deallocate stack
     // space.
-    unsigned PushStack = RVFI->getRVPushRegs() * (STI.getXLen() / 8);
-    unsigned SpImmBase = RVFI->getRVPushStackSize();
-    StackSize = adjSPInPushPop(MBBI, StackSize, (SpImmBase - PushStack), true);
+    uint64_t Spimm = std::min(StackSize, (uint64_t)48);
+    MBBI->getOperand(1).setImm(Spimm);
+    StackSize -= Spimm;
   }
 
   // Deallocate stack



More information about the llvm-commits mailing list