llvm-project/llvm/lib/Target/Foot/FootInstrInfo.cpp
2025-10-21 18:25:06 -04:00

71 lines
3.0 KiB
C++

#include "FootInstrInfo.h"
#include "MCTargetDesc/FootMCTargetDesc.h"
#define GET_INSTRINFO_CTOR_DTOR
#define ENABLE_INSTR_PREDICATE_VERIFIER
#include "FootGenInstrInfo.inc"
#include "llvm/CodeGen/MachineFrameInfo.h"
using namespace llvm;
FootInstrInfo::FootInstrInfo() : FootGenInstrInfo() {}
void FootInstrInfo::storeRegToStackSlot(MachineBasicBlock &MBB,
MachineBasicBlock::iterator MI,
Register SrcReg, bool IsKill, int FrameIndex,
const TargetRegisterClass *RC,
const TargetRegisterInfo *TRI,
Register VReg,
MachineInstr::MIFlag Flag) const {
MachineFunction &MF = *MBB.getParent();
MachineFrameInfo &MFI = MF.getFrameInfo();
MachinePointerInfo PtrInfo = MachinePointerInfo::getFixedStack(MF, FrameIndex);
MachineMemOperand *MMO =
MF.getMachineMemOperand(PtrInfo, MachineMemOperand::MOStore,
MFI.getObjectSize(FrameIndex), MFI.getObjectAlign(FrameIndex));
unsigned Opc = Foot::BWOR_I_D_M_A;
MFI.setStackID(FrameIndex, TargetStackID::Default);
BuildMI(MBB, MI, DebugLoc(), get(Opc))
.addFrameIndex(FrameIndex)
.addReg(SrcReg, getKillRegState(IsKill))
.addImm(0)
.addMemOperand(MMO);
}
void FootInstrInfo::loadRegFromStackSlot(MachineBasicBlock &MBB,
MachineBasicBlock::iterator MI,
Register DestReg, int FrameIndex,
const TargetRegisterClass *RC,
const TargetRegisterInfo *TRI,
Register VReg,
MachineInstr::MIFlag Flag) const {
MachineFunction &MF = *MBB.getParent();
MachineFrameInfo &MFI = MF.getFrameInfo();
MachinePointerInfo PtrInfo = MachinePointerInfo::getFixedStack(MF, FrameIndex);
MachineMemOperand *MMO =
MF.getMachineMemOperand(PtrInfo, MachineMemOperand::MOLoad,
MFI.getObjectSize(FrameIndex), MFI.getObjectAlign(FrameIndex));
unsigned Opc = Foot::BWOR_D_I_M_A;
MFI.setStackID(FrameIndex, TargetStackID::Default);
BuildMI(MBB, MI, DebugLoc(), get(Opc))
.addReg(DestReg)
.addFrameIndex(FrameIndex)
.addImm(0)
.addMemOperand(MMO);
}
void FootInstrInfo::copyPhysReg(MachineBasicBlock &MBB,
MachineBasicBlock::iterator MI, const DebugLoc &DL,
Register DestReg, Register SrcReg, bool KillSrc,
bool RenamableDest,
bool RenamableSrc) const {
BuildMI(MBB, MI, MI->getDebugLoc(), get(Foot::BWOR_D_D_M_A))
.addReg(DestReg, RegState::Define | getRenamableRegState(RenamableDest))
.addReg(SrcReg, getKillRegState(KillSrc) | getRenamableRegState(RenamableSrc))
.addImm(0);
}