[llvm] [RISCV] Add short forward branch support for `lb`, `lbu`, `lh`, `lhu`, `lw`, `lwu` and `ld` (PR #170829)
Craig Topper via llvm-commits
llvm-commits at lists.llvm.org
Fri Dec 12 11:48:54 PST 2025
- Previous message: [llvm] [RISCV] Add short forward branch support for `lb`, `lbu`, `lh`, `lhu`, `lw`, `lwu` and `ld` (PR #170829)
- Next message: [llvm] [RISCV] Add short forward branch support for `lb`, `lbu`, `lh`, `lhu`, `lw`, `lwu` and `ld` (PR #170829)
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
================
@@ -897,6 +897,74 @@ MachineInstr *RISCVInstrInfo::foldMemoryOperandImpl(
.addImm(0);
}
+static unsigned getLoadPredicatedOpcode(unsigned Opcode) {
+ switch (Opcode) {
+ case RISCV::LB:
+ return RISCV::PseudoCCLB;
+ case RISCV::LBU:
+ return RISCV::PseudoCCLBU;
+ case RISCV::LH:
+ return RISCV::PseudoCCLH;
+ case RISCV::LHU:
+ return RISCV::PseudoCCLHU;
+ case RISCV::LW:
+ return RISCV::PseudoCCLW;
+ case RISCV::LWU:
+ return RISCV::PseudoCCLWU;
+ case RISCV::LD:
+ return RISCV::PseudoCCLD;
+ default:
+ return 0;
+ }
+}
+
+MachineInstr *RISCVInstrInfo::foldMemoryOperandImpl(
+ MachineFunction &MF, MachineInstr &MI, ArrayRef<unsigned> Ops,
+ MachineBasicBlock::iterator InsertPt, MachineInstr &LoadMI,
+ LiveIntervals *LIS) const {
+ // For now, only handle RISCV::PseudoCCMOVGPR.
+ if (MI.getOpcode() != RISCV::PseudoCCMOVGPR)
+ return nullptr;
+
+ unsigned PredOpc = getLoadPredicatedOpcode(LoadMI.getOpcode());
+
+ if (!STI.hasShortForwardBranchILoad() || !PredOpc)
+ return nullptr;
+
+ MachineRegisterInfo &MRI = MF.getRegInfo();
+ if (Ops[0] != 4 && Ops[0] != 5)
----------------
topperc wrote:
Still need to check Ops.size() == 1. If the register written by the Load is used in two operands of the PseudoCCMOVGPR, for example one of the compare operands and the false value, Ops.size() will be greater than 1. We can't handle that case so we need to return nullptr.
https://github.com/llvm/llvm-project/pull/170829
- Previous message: [llvm] [RISCV] Add short forward branch support for `lb`, `lbu`, `lh`, `lhu`, `lw`, `lwu` and `ld` (PR #170829)
- Next message: [llvm] [RISCV] Add short forward branch support for `lb`, `lbu`, `lh`, `lhu`, `lw`, `lwu` and `ld` (PR #170829)
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the llvm-commits
mailing list