71 lines
3.0 KiB
C++
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);
|
|
}
|