[llvm] [RISCV] Implement `isLoadFromStackSlotPostFE` and ... (PR #184673)
Mikhail Gudim via llvm-commits
llvm-commits at lists.llvm.org
Wed Mar 4 12:03:10 PST 2026
https://github.com/mgudim created https://github.com/llvm/llvm-project/pull/184673
... `isStoreToStackSlotPostFE`.
>From dab4830b7dc22c76c99108a6069958812c4fc982 Mon Sep 17 00:00:00 2001
From: Mikhail Gudim <mgudim at qti.qualcomm.com>
Date: Wed, 4 Mar 2026 11:35:44 -0800
Subject: [PATCH] [RISCV] Implement `isLoadFromStackSlotPostFE` and ...
... `isStoreToStackSlotPostFE`.
---
llvm/lib/Target/RISCV/RISCVInstrInfo.cpp | 42 ++++++++++++++++++++++++
llvm/lib/Target/RISCV/RISCVInstrInfo.h | 4 +++
2 files changed, 46 insertions(+)
diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfo.cpp b/llvm/lib/Target/RISCV/RISCVInstrInfo.cpp
index e4624064e4c37..e5a37be2e9f7a 100644
--- a/llvm/lib/Target/RISCV/RISCVInstrInfo.cpp
+++ b/llvm/lib/Target/RISCV/RISCVInstrInfo.cpp
@@ -182,6 +182,27 @@ Register RISCVInstrInfo::isLoadFromStackSlot(const MachineInstr &MI,
return 0;
}
+Register RISCVInstrInfo::isLoadFromStackSlotPostFE(const MachineInstr &MI,
+ int &FrameIndex) const {
+ if (!MI.mayLoad())
+ return Register();
+
+ if (Register Reg = isLoadFromStackSlot(MI, FrameIndex))
+ return Reg;
+
+ SmallVector<const MachineMemOperand *, 1> Accesses;
+ if (hasLoadFromStackSlot(MI, Accesses)) {
+ if (Accesses.size() > 1)
+ return Register();
+
+ FrameIndex =
+ cast<FixedStackPseudoSourceValue>(Accesses.front()->getPseudoValue())
+ ->getFrameIndex();
+ return MI.getOperand(0).getReg();
+ }
+ return Register();
+}
+
Register RISCVInstrInfo::isStoreToStackSlot(const MachineInstr &MI,
int &FrameIndex) const {
TypeSize Dummy = TypeSize::getZero();
@@ -233,6 +254,27 @@ Register RISCVInstrInfo::isStoreToStackSlot(const MachineInstr &MI,
return 0;
}
+Register RISCVInstrInfo::isStoreToStackSlotPostFE(const MachineInstr &MI,
+ int &FrameIndex) const {
+ if (!MI.mayStore())
+ return Register();
+
+ if (Register Reg = isStoreToStackSlot(MI, FrameIndex))
+ return Reg;
+
+ SmallVector<const MachineMemOperand *, 1> Accesses;
+ if (hasStoreToStackSlot(MI, Accesses)) {
+ if (Accesses.size() > 1)
+ return Register();
+
+ FrameIndex =
+ cast<FixedStackPseudoSourceValue>(Accesses.front()->getPseudoValue())
+ ->getFrameIndex();
+ return MI.getOperand(0).getReg();
+ }
+ return Register();
+}
+
bool RISCVInstrInfo::isReMaterializableImpl(
const MachineInstr &MI) const {
switch (RISCV::getRVVMCOpcode(MI.getOpcode())) {
diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfo.h b/llvm/lib/Target/RISCV/RISCVInstrInfo.h
index cfe2e5c474fbd..044bb6810ba48 100644
--- a/llvm/lib/Target/RISCV/RISCVInstrInfo.h
+++ b/llvm/lib/Target/RISCV/RISCVInstrInfo.h
@@ -91,10 +91,14 @@ class RISCVInstrInfo : public RISCVGenInstrInfo {
int &FrameIndex) const override;
Register isLoadFromStackSlot(const MachineInstr &MI, int &FrameIndex,
TypeSize &MemBytes) const override;
+ Register isLoadFromStackSlotPostFE(const MachineInstr &MI,
+ int &FrameIndex) const override;
Register isStoreToStackSlot(const MachineInstr &MI,
int &FrameIndex) const override;
Register isStoreToStackSlot(const MachineInstr &MI, int &FrameIndex,
TypeSize &MemBytes) const override;
+ Register isStoreToStackSlotPostFE(const MachineInstr &MI,
+ int &FrameIndex) const override;
bool isReMaterializableImpl(const MachineInstr &MI) const override;
More information about the llvm-commits
mailing list