[llvm] [RISCV] Add short forward branch support for `lb`, `lbu`, `lh`, `lhu`, `lw`, `lwu` and `ld` (PR #170829)
via llvm-commits
llvm-commits at lists.llvm.org
Tue Dec 9 20:22:55 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);
}
+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();
+ bool Invert = MRI.getVRegDef(MI.getOperand(4).getReg()) == &LoadMI;
+ const MachineOperand &FalseReg = MI.getOperand(Invert ? 5 : 4);
+ Register DestReg = MI.getOperand(0).getReg();
+ const TargetRegisterClass *PreviousClass = MRI.getRegClass(FalseReg.getReg());
+ if (!MRI.constrainRegClass(DestReg, PreviousClass))
+ return nullptr;
+
+ // Create a new predicated version of DefMI.
+ MachineInstrBuilder NewMI = BuildMI(*MI.getParent(), InsertPt,
+ MI.getDebugLoc(), get(PredOpc), DestReg);
+
+ // Copy the condition portion.
+ NewMI.add(MI.getOperand(1));
+ NewMI.add(MI.getOperand(2));
----------------
hchandel wrote:
Done
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