forked from OSchip/llvm-project
Use MCRegister in copyPhysReg
This commit is contained in:
parent
a26d7b6298
commit
e6c9a9af39
|
@ -920,7 +920,7 @@ public:
|
|||
/// large registers. See for example the ARM target.
|
||||
virtual void copyPhysReg(MachineBasicBlock &MBB,
|
||||
MachineBasicBlock::iterator MI, const DebugLoc &DL,
|
||||
unsigned DestReg, unsigned SrcReg,
|
||||
MCRegister DestReg, MCRegister SrcReg,
|
||||
bool KillSrc) const {
|
||||
llvm_unreachable("Target didn't implement TargetInstrInfo::copyPhysReg!");
|
||||
}
|
||||
|
|
|
@ -2409,8 +2409,8 @@ static bool forwardCopyWillClobberTuple(unsigned DestReg, unsigned SrcReg,
|
|||
|
||||
void AArch64InstrInfo::copyPhysRegTuple(MachineBasicBlock &MBB,
|
||||
MachineBasicBlock::iterator I,
|
||||
const DebugLoc &DL, unsigned DestReg,
|
||||
unsigned SrcReg, bool KillSrc,
|
||||
const DebugLoc &DL, MCRegister DestReg,
|
||||
MCRegister SrcReg, bool KillSrc,
|
||||
unsigned Opcode,
|
||||
ArrayRef<unsigned> Indices) const {
|
||||
assert(Subtarget.hasNEON() && "Unexpected register copy without NEON");
|
||||
|
@ -2461,8 +2461,8 @@ void AArch64InstrInfo::copyGPRRegTuple(MachineBasicBlock &MBB,
|
|||
|
||||
void AArch64InstrInfo::copyPhysReg(MachineBasicBlock &MBB,
|
||||
MachineBasicBlock::iterator I,
|
||||
const DebugLoc &DL, unsigned DestReg,
|
||||
unsigned SrcReg, bool KillSrc) const {
|
||||
const DebugLoc &DL, MCRegister DestReg,
|
||||
MCRegister SrcReg, bool KillSrc) const {
|
||||
if (AArch64::GPR32spRegClass.contains(DestReg) &&
|
||||
(AArch64::GPR32spRegClass.contains(SrcReg) || SrcReg == AArch64::WZR)) {
|
||||
const TargetRegisterInfo *TRI = &getRegisterInfo();
|
||||
|
@ -2471,10 +2471,10 @@ void AArch64InstrInfo::copyPhysReg(MachineBasicBlock &MBB,
|
|||
// If either operand is WSP, expand to ADD #0.
|
||||
if (Subtarget.hasZeroCycleRegMove()) {
|
||||
// Cyclone recognizes "ADD Xd, Xn, #0" as a zero-cycle register move.
|
||||
unsigned DestRegX = TRI->getMatchingSuperReg(DestReg, AArch64::sub_32,
|
||||
&AArch64::GPR64spRegClass);
|
||||
unsigned SrcRegX = TRI->getMatchingSuperReg(SrcReg, AArch64::sub_32,
|
||||
&AArch64::GPR64spRegClass);
|
||||
MCRegister DestRegX = TRI->getMatchingSuperReg(
|
||||
DestReg, AArch64::sub_32, &AArch64::GPR64spRegClass);
|
||||
MCRegister SrcRegX = TRI->getMatchingSuperReg(
|
||||
SrcReg, AArch64::sub_32, &AArch64::GPR64spRegClass);
|
||||
// This instruction is reading and writing X registers. This may upset
|
||||
// the register scavenger and machine verifier, so we need to indicate
|
||||
// that we are reading an undefined value from SrcRegX, but a proper
|
||||
|
@ -2497,10 +2497,10 @@ void AArch64InstrInfo::copyPhysReg(MachineBasicBlock &MBB,
|
|||
} else {
|
||||
if (Subtarget.hasZeroCycleRegMove()) {
|
||||
// Cyclone recognizes "ORR Xd, XZR, Xm" as a zero-cycle register move.
|
||||
unsigned DestRegX = TRI->getMatchingSuperReg(DestReg, AArch64::sub_32,
|
||||
&AArch64::GPR64spRegClass);
|
||||
unsigned SrcRegX = TRI->getMatchingSuperReg(SrcReg, AArch64::sub_32,
|
||||
&AArch64::GPR64spRegClass);
|
||||
MCRegister DestRegX = TRI->getMatchingSuperReg(
|
||||
DestReg, AArch64::sub_32, &AArch64::GPR64spRegClass);
|
||||
MCRegister SrcRegX = TRI->getMatchingSuperReg(
|
||||
SrcReg, AArch64::sub_32, &AArch64::GPR64spRegClass);
|
||||
// This instruction is reading and writing X registers. This may upset
|
||||
// the register scavenger and machine verifier, so we need to indicate
|
||||
// that we are reading an undefined value from SrcRegX, but a proper
|
||||
|
|
|
@ -131,15 +131,15 @@ public:
|
|||
unsigned NumLoads) const override;
|
||||
|
||||
void copyPhysRegTuple(MachineBasicBlock &MBB, MachineBasicBlock::iterator I,
|
||||
const DebugLoc &DL, unsigned DestReg, unsigned SrcReg,
|
||||
bool KillSrc, unsigned Opcode,
|
||||
const DebugLoc &DL, MCRegister DestReg,
|
||||
MCRegister SrcReg, bool KillSrc, unsigned Opcode,
|
||||
llvm::ArrayRef<unsigned> Indices) const;
|
||||
void copyGPRRegTuple(MachineBasicBlock &MBB, MachineBasicBlock::iterator I,
|
||||
DebugLoc DL, unsigned DestReg, unsigned SrcReg,
|
||||
bool KillSrc, unsigned Opcode, unsigned ZeroReg,
|
||||
llvm::ArrayRef<unsigned> Indices) const;
|
||||
void copyPhysReg(MachineBasicBlock &MBB, MachineBasicBlock::iterator I,
|
||||
const DebugLoc &DL, unsigned DestReg, unsigned SrcReg,
|
||||
const DebugLoc &DL, MCRegister DestReg, MCRegister SrcReg,
|
||||
bool KillSrc) const override;
|
||||
|
||||
void storeRegToStackSlot(MachineBasicBlock &MBB,
|
||||
|
|
|
@ -60,8 +60,8 @@ bool R600InstrInfo::isVector(const MachineInstr &MI) const {
|
|||
|
||||
void R600InstrInfo::copyPhysReg(MachineBasicBlock &MBB,
|
||||
MachineBasicBlock::iterator MI,
|
||||
const DebugLoc &DL, unsigned DestReg,
|
||||
unsigned SrcReg, bool KillSrc) const {
|
||||
const DebugLoc &DL, MCRegister DestReg,
|
||||
MCRegister SrcReg, bool KillSrc) const {
|
||||
unsigned VectorComponents = 0;
|
||||
if ((R600::R600_Reg128RegClass.contains(DestReg) ||
|
||||
R600::R600_Reg128VerticalRegClass.contains(DestReg)) &&
|
||||
|
|
|
@ -73,7 +73,7 @@ public:
|
|||
}
|
||||
|
||||
void copyPhysReg(MachineBasicBlock &MBB, MachineBasicBlock::iterator MI,
|
||||
const DebugLoc &DL, unsigned DestReg, unsigned SrcReg,
|
||||
const DebugLoc &DL, MCRegister DestReg, MCRegister SrcReg,
|
||||
bool KillSrc) const override;
|
||||
bool isLegalToSplitMBBAt(MachineBasicBlock &MBB,
|
||||
MachineBasicBlock::iterator MBBI) const override;
|
||||
|
|
|
@ -508,8 +508,8 @@ bool SIInstrInfo::shouldScheduleLoadsNear(SDNode *Load0, SDNode *Load1,
|
|||
|
||||
static void reportIllegalCopy(const SIInstrInfo *TII, MachineBasicBlock &MBB,
|
||||
MachineBasicBlock::iterator MI,
|
||||
const DebugLoc &DL, unsigned DestReg,
|
||||
unsigned SrcReg, bool KillSrc) {
|
||||
const DebugLoc &DL, MCRegister DestReg,
|
||||
MCRegister SrcReg, bool KillSrc) {
|
||||
MachineFunction *MF = MBB.getParent();
|
||||
DiagnosticInfoUnsupported IllegalCopy(MF->getFunction(),
|
||||
"illegal SGPR to VGPR copy",
|
||||
|
@ -523,8 +523,8 @@ static void reportIllegalCopy(const SIInstrInfo *TII, MachineBasicBlock &MBB,
|
|||
|
||||
void SIInstrInfo::copyPhysReg(MachineBasicBlock &MBB,
|
||||
MachineBasicBlock::iterator MI,
|
||||
const DebugLoc &DL, unsigned DestReg,
|
||||
unsigned SrcReg, bool KillSrc) const {
|
||||
const DebugLoc &DL, MCRegister DestReg,
|
||||
MCRegister SrcReg, bool KillSrc) const {
|
||||
const TargetRegisterClass *RC = RI.getPhysRegClass(DestReg);
|
||||
|
||||
if (RC == &AMDGPU::VGPR_32RegClass) {
|
||||
|
|
|
@ -192,7 +192,7 @@ public:
|
|||
int64_t Offset1, unsigned NumLoads) const override;
|
||||
|
||||
void copyPhysReg(MachineBasicBlock &MBB, MachineBasicBlock::iterator MI,
|
||||
const DebugLoc &DL, unsigned DestReg, unsigned SrcReg,
|
||||
const DebugLoc &DL, MCRegister DestReg, MCRegister SrcReg,
|
||||
bool KillSrc) const override;
|
||||
|
||||
unsigned calculateLDSSpillAddress(MachineBasicBlock &MBB, MachineInstr &MI,
|
||||
|
|
|
@ -280,8 +280,8 @@ unsigned ARCInstrInfo::removeBranch(MachineBasicBlock &MBB,
|
|||
|
||||
void ARCInstrInfo::copyPhysReg(MachineBasicBlock &MBB,
|
||||
MachineBasicBlock::iterator I,
|
||||
const DebugLoc &dl, unsigned DestReg,
|
||||
unsigned SrcReg, bool KillSrc) const {
|
||||
const DebugLoc &dl, MCRegister DestReg,
|
||||
MCRegister SrcReg, bool KillSrc) const {
|
||||
assert(ARC::GPR32RegClass.contains(SrcReg) &&
|
||||
"Only GPR32 src copy supported.");
|
||||
assert(ARC::GPR32RegClass.contains(DestReg) &&
|
||||
|
|
|
@ -64,7 +64,7 @@ public:
|
|||
int *BytesRemoved = nullptr) const override;
|
||||
|
||||
void copyPhysReg(MachineBasicBlock &MBB, MachineBasicBlock::iterator I,
|
||||
const DebugLoc &dl, unsigned DestReg, unsigned SrcReg,
|
||||
const DebugLoc &dl, MCRegister DestReg, MCRegister SrcReg,
|
||||
bool KillSrc) const override;
|
||||
|
||||
void storeRegToStackSlot(MachineBasicBlock &MBB,
|
||||
|
|
|
@ -829,8 +829,8 @@ void llvm::addPredicatedMveVpredROp(MachineInstrBuilder &MIB,
|
|||
|
||||
void ARMBaseInstrInfo::copyPhysReg(MachineBasicBlock &MBB,
|
||||
MachineBasicBlock::iterator I,
|
||||
const DebugLoc &DL, unsigned DestReg,
|
||||
unsigned SrcReg, bool KillSrc) const {
|
||||
const DebugLoc &DL, MCRegister DestReg,
|
||||
MCRegister SrcReg, bool KillSrc) const {
|
||||
bool GPRDest = ARM::GPRRegClass.contains(DestReg);
|
||||
bool GPRSrc = ARM::GPRRegClass.contains(SrcReg);
|
||||
|
||||
|
|
|
@ -202,7 +202,7 @@ public:
|
|||
const ARMSubtarget &Subtarget) const;
|
||||
|
||||
void copyPhysReg(MachineBasicBlock &MBB, MachineBasicBlock::iterator I,
|
||||
const DebugLoc &DL, unsigned DestReg, unsigned SrcReg,
|
||||
const DebugLoc &DL, MCRegister DestReg, MCRegister SrcReg,
|
||||
bool KillSrc) const override;
|
||||
|
||||
void storeRegToStackSlot(MachineBasicBlock &MBB,
|
||||
|
|
|
@ -37,8 +37,8 @@ unsigned Thumb1InstrInfo::getUnindexedOpcode(unsigned Opc) const {
|
|||
|
||||
void Thumb1InstrInfo::copyPhysReg(MachineBasicBlock &MBB,
|
||||
MachineBasicBlock::iterator I,
|
||||
const DebugLoc &DL, unsigned DestReg,
|
||||
unsigned SrcReg, bool KillSrc) const {
|
||||
const DebugLoc &DL, MCRegister DestReg,
|
||||
MCRegister SrcReg, bool KillSrc) const {
|
||||
// Need to check the arch.
|
||||
MachineFunction &MF = *MBB.getParent();
|
||||
const ARMSubtarget &st = MF.getSubtarget<ARMSubtarget>();
|
||||
|
|
|
@ -38,7 +38,7 @@ public:
|
|||
const ThumbRegisterInfo &getRegisterInfo() const override { return RI; }
|
||||
|
||||
void copyPhysReg(MachineBasicBlock &MBB, MachineBasicBlock::iterator I,
|
||||
const DebugLoc &DL, unsigned DestReg, unsigned SrcReg,
|
||||
const DebugLoc &DL, MCRegister DestReg, MCRegister SrcReg,
|
||||
bool KillSrc) const override;
|
||||
void storeRegToStackSlot(MachineBasicBlock &MBB,
|
||||
MachineBasicBlock::iterator MBBI,
|
||||
|
|
|
@ -120,8 +120,8 @@ Thumb2InstrInfo::isLegalToSplitMBBAt(MachineBasicBlock &MBB,
|
|||
|
||||
void Thumb2InstrInfo::copyPhysReg(MachineBasicBlock &MBB,
|
||||
MachineBasicBlock::iterator I,
|
||||
const DebugLoc &DL, unsigned DestReg,
|
||||
unsigned SrcReg, bool KillSrc) const {
|
||||
const DebugLoc &DL, MCRegister DestReg,
|
||||
MCRegister SrcReg, bool KillSrc) const {
|
||||
// Handle SPR, DPR, and QPR copies.
|
||||
if (!ARM::GPRRegClass.contains(DestReg, SrcReg))
|
||||
return ARMBaseInstrInfo::copyPhysReg(MBB, I, DL, DestReg, SrcReg, KillSrc);
|
||||
|
|
|
@ -39,7 +39,7 @@ public:
|
|||
MachineBasicBlock::iterator MBBI) const override;
|
||||
|
||||
void copyPhysReg(MachineBasicBlock &MBB, MachineBasicBlock::iterator I,
|
||||
const DebugLoc &DL, unsigned DestReg, unsigned SrcReg,
|
||||
const DebugLoc &DL, MCRegister DestReg, MCRegister SrcReg,
|
||||
bool KillSrc) const override;
|
||||
|
||||
void storeRegToStackSlot(MachineBasicBlock &MBB,
|
||||
|
|
|
@ -40,8 +40,8 @@ AVRInstrInfo::AVRInstrInfo()
|
|||
|
||||
void AVRInstrInfo::copyPhysReg(MachineBasicBlock &MBB,
|
||||
MachineBasicBlock::iterator MI,
|
||||
const DebugLoc &DL, unsigned DestReg,
|
||||
unsigned SrcReg, bool KillSrc) const {
|
||||
const DebugLoc &DL, MCRegister DestReg,
|
||||
MCRegister SrcReg, bool KillSrc) const {
|
||||
const AVRSubtarget &STI = MBB.getParent()->getSubtarget<AVRSubtarget>();
|
||||
const AVRRegisterInfo &TRI = *STI.getRegisterInfo();
|
||||
unsigned Opc;
|
||||
|
|
|
@ -72,7 +72,7 @@ public:
|
|||
unsigned getInstSizeInBytes(const MachineInstr &MI) const override;
|
||||
|
||||
void copyPhysReg(MachineBasicBlock &MBB, MachineBasicBlock::iterator MI,
|
||||
const DebugLoc &DL, unsigned DestReg, unsigned SrcReg,
|
||||
const DebugLoc &DL, MCRegister DestReg, MCRegister SrcReg,
|
||||
bool KillSrc) const override;
|
||||
void storeRegToStackSlot(MachineBasicBlock &MBB,
|
||||
MachineBasicBlock::iterator MI, unsigned SrcReg,
|
||||
|
|
|
@ -30,8 +30,8 @@ BPFInstrInfo::BPFInstrInfo()
|
|||
|
||||
void BPFInstrInfo::copyPhysReg(MachineBasicBlock &MBB,
|
||||
MachineBasicBlock::iterator I,
|
||||
const DebugLoc &DL, unsigned DestReg,
|
||||
unsigned SrcReg, bool KillSrc) const {
|
||||
const DebugLoc &DL, MCRegister DestReg,
|
||||
MCRegister SrcReg, bool KillSrc) const {
|
||||
if (BPF::GPRRegClass.contains(DestReg, SrcReg))
|
||||
BuildMI(MBB, I, DL, get(BPF::MOV_rr), DestReg)
|
||||
.addReg(SrcReg, getKillRegState(KillSrc));
|
||||
|
|
|
@ -30,7 +30,7 @@ public:
|
|||
const BPFRegisterInfo &getRegisterInfo() const { return RI; }
|
||||
|
||||
void copyPhysReg(MachineBasicBlock &MBB, MachineBasicBlock::iterator I,
|
||||
const DebugLoc &DL, unsigned DestReg, unsigned SrcReg,
|
||||
const DebugLoc &DL, MCRegister DestReg, MCRegister SrcReg,
|
||||
bool KillSrc) const override;
|
||||
|
||||
bool expandPostRAPseudo(MachineInstr &MI) const override;
|
||||
|
|
|
@ -786,8 +786,8 @@ bool HexagonInstrInfo::isProfitableToDupForIfCvt(MachineBasicBlock &MBB,
|
|||
|
||||
void HexagonInstrInfo::copyPhysReg(MachineBasicBlock &MBB,
|
||||
MachineBasicBlock::iterator I,
|
||||
const DebugLoc &DL, unsigned DestReg,
|
||||
unsigned SrcReg, bool KillSrc) const {
|
||||
const DebugLoc &DL, MCRegister DestReg,
|
||||
MCRegister SrcReg, bool KillSrc) const {
|
||||
const HexagonRegisterInfo &HRI = *Subtarget.getRegisterInfo();
|
||||
unsigned KillFlag = getKillRegState(KillSrc);
|
||||
|
||||
|
|
|
@ -173,7 +173,7 @@ public:
|
|||
/// careful implementation when multiple copy instructions are required for
|
||||
/// large registers. See for example the ARM target.
|
||||
void copyPhysReg(MachineBasicBlock &MBB, MachineBasicBlock::iterator I,
|
||||
const DebugLoc &DL, unsigned DestReg, unsigned SrcReg,
|
||||
const DebugLoc &DL, MCRegister DestReg, MCRegister SrcReg,
|
||||
bool KillSrc) const override;
|
||||
|
||||
/// Store the specified register of the given register class to the specified
|
||||
|
|
|
@ -34,8 +34,8 @@ LanaiInstrInfo::LanaiInstrInfo()
|
|||
void LanaiInstrInfo::copyPhysReg(MachineBasicBlock &MBB,
|
||||
MachineBasicBlock::iterator Position,
|
||||
const DebugLoc &DL,
|
||||
unsigned DestinationRegister,
|
||||
unsigned SourceRegister,
|
||||
MCRegister DestinationRegister,
|
||||
MCRegister SourceRegister,
|
||||
bool KillSource) const {
|
||||
if (!Lanai::GPRRegClass.contains(DestinationRegister, SourceRegister)) {
|
||||
llvm_unreachable("Impossible reg-to-reg copy");
|
||||
|
|
|
@ -48,8 +48,8 @@ public:
|
|||
int &FrameIndex) const override;
|
||||
|
||||
void copyPhysReg(MachineBasicBlock &MBB, MachineBasicBlock::iterator Position,
|
||||
const DebugLoc &DL, unsigned DestinationRegister,
|
||||
unsigned SourceRegister, bool KillSource) const override;
|
||||
const DebugLoc &DL, MCRegister DestinationRegister,
|
||||
MCRegister SourceRegister, bool KillSource) const override;
|
||||
|
||||
void
|
||||
storeRegToStackSlot(MachineBasicBlock &MBB,
|
||||
|
|
|
@ -89,8 +89,8 @@ void MSP430InstrInfo::loadRegFromStackSlot(MachineBasicBlock &MBB,
|
|||
|
||||
void MSP430InstrInfo::copyPhysReg(MachineBasicBlock &MBB,
|
||||
MachineBasicBlock::iterator I,
|
||||
const DebugLoc &DL, unsigned DestReg,
|
||||
unsigned SrcReg, bool KillSrc) const {
|
||||
const DebugLoc &DL, MCRegister DestReg,
|
||||
MCRegister SrcReg, bool KillSrc) const {
|
||||
unsigned Opc;
|
||||
if (MSP430::GR16RegClass.contains(DestReg, SrcReg))
|
||||
Opc = MSP430::MOV16rr;
|
||||
|
|
|
@ -36,7 +36,7 @@ public:
|
|||
const TargetRegisterInfo &getRegisterInfo() const { return RI; }
|
||||
|
||||
void copyPhysReg(MachineBasicBlock &MBB, MachineBasicBlock::iterator I,
|
||||
const DebugLoc &DL, unsigned DestReg, unsigned SrcReg,
|
||||
const DebugLoc &DL, MCRegister DestReg, MCRegister SrcReg,
|
||||
bool KillSrc) const override;
|
||||
|
||||
void storeRegToStackSlot(MachineBasicBlock &MBB,
|
||||
|
|
|
@ -68,8 +68,8 @@ unsigned Mips16InstrInfo::isStoreToStackSlot(const MachineInstr &MI,
|
|||
|
||||
void Mips16InstrInfo::copyPhysReg(MachineBasicBlock &MBB,
|
||||
MachineBasicBlock::iterator I,
|
||||
const DebugLoc &DL, unsigned DestReg,
|
||||
unsigned SrcReg, bool KillSrc) const {
|
||||
const DebugLoc &DL, MCRegister DestReg,
|
||||
MCRegister SrcReg, bool KillSrc) const {
|
||||
unsigned Opc = 0;
|
||||
|
||||
if (Mips::CPU16RegsRegClass.contains(DestReg) &&
|
||||
|
|
|
@ -49,7 +49,7 @@ public:
|
|||
int &FrameIndex) const override;
|
||||
|
||||
void copyPhysReg(MachineBasicBlock &MBB, MachineBasicBlock::iterator MI,
|
||||
const DebugLoc &DL, unsigned DestReg, unsigned SrcReg,
|
||||
const DebugLoc &DL, MCRegister DestReg, MCRegister SrcReg,
|
||||
bool KillSrc) const override;
|
||||
|
||||
void storeRegToStack(MachineBasicBlock &MBB,
|
||||
|
|
|
@ -82,8 +82,8 @@ unsigned MipsSEInstrInfo::isStoreToStackSlot(const MachineInstr &MI,
|
|||
|
||||
void MipsSEInstrInfo::copyPhysReg(MachineBasicBlock &MBB,
|
||||
MachineBasicBlock::iterator I,
|
||||
const DebugLoc &DL, unsigned DestReg,
|
||||
unsigned SrcReg, bool KillSrc) const {
|
||||
const DebugLoc &DL, MCRegister DestReg,
|
||||
MCRegister SrcReg, bool KillSrc) const {
|
||||
unsigned Opc = 0, ZeroReg = 0;
|
||||
bool isMicroMips = Subtarget.inMicroMipsMode();
|
||||
|
||||
|
|
|
@ -43,7 +43,7 @@ public:
|
|||
int &FrameIndex) const override;
|
||||
|
||||
void copyPhysReg(MachineBasicBlock &MBB, MachineBasicBlock::iterator MI,
|
||||
const DebugLoc &DL, unsigned DestReg, unsigned SrcReg,
|
||||
const DebugLoc &DL, MCRegister DestReg, MCRegister SrcReg,
|
||||
bool KillSrc) const override;
|
||||
|
||||
void storeRegToStack(MachineBasicBlock &MBB,
|
||||
|
|
|
@ -31,8 +31,8 @@ NVPTXInstrInfo::NVPTXInstrInfo() : NVPTXGenInstrInfo(), RegInfo() {}
|
|||
|
||||
void NVPTXInstrInfo::copyPhysReg(MachineBasicBlock &MBB,
|
||||
MachineBasicBlock::iterator I,
|
||||
const DebugLoc &DL, unsigned DestReg,
|
||||
unsigned SrcReg, bool KillSrc) const {
|
||||
const DebugLoc &DL, MCRegister DestReg,
|
||||
MCRegister SrcReg, bool KillSrc) const {
|
||||
const MachineRegisterInfo &MRI = MBB.getParent()->getRegInfo();
|
||||
const TargetRegisterClass *DestRC = MRI.getRegClass(DestReg);
|
||||
const TargetRegisterClass *SrcRC = MRI.getRegClass(SrcReg);
|
||||
|
|
|
@ -49,7 +49,7 @@ public:
|
|||
*/
|
||||
|
||||
void copyPhysReg(MachineBasicBlock &MBB, MachineBasicBlock::iterator I,
|
||||
const DebugLoc &DL, unsigned DestReg, unsigned SrcReg,
|
||||
const DebugLoc &DL, MCRegister DestReg, MCRegister SrcReg,
|
||||
bool KillSrc) const override;
|
||||
|
||||
// Branch analysis.
|
||||
|
|
|
@ -903,15 +903,15 @@ static unsigned getCRBitValue(unsigned CRBit) {
|
|||
|
||||
void PPCInstrInfo::copyPhysReg(MachineBasicBlock &MBB,
|
||||
MachineBasicBlock::iterator I,
|
||||
const DebugLoc &DL, unsigned DestReg,
|
||||
unsigned SrcReg, bool KillSrc) const {
|
||||
const DebugLoc &DL, MCRegister DestReg,
|
||||
MCRegister SrcReg, bool KillSrc) const {
|
||||
// We can end up with self copies and similar things as a result of VSX copy
|
||||
// legalization. Promote them here.
|
||||
const TargetRegisterInfo *TRI = &getRegisterInfo();
|
||||
if (PPC::F8RCRegClass.contains(DestReg) &&
|
||||
PPC::VSRCRegClass.contains(SrcReg)) {
|
||||
unsigned SuperReg =
|
||||
TRI->getMatchingSuperReg(DestReg, PPC::sub_64, &PPC::VSRCRegClass);
|
||||
MCRegister SuperReg =
|
||||
TRI->getMatchingSuperReg(DestReg, PPC::sub_64, &PPC::VSRCRegClass);
|
||||
|
||||
if (VSXSelfCopyCrash && SrcReg == SuperReg)
|
||||
llvm_unreachable("nop VSX copy");
|
||||
|
@ -919,8 +919,8 @@ void PPCInstrInfo::copyPhysReg(MachineBasicBlock &MBB,
|
|||
DestReg = SuperReg;
|
||||
} else if (PPC::F8RCRegClass.contains(SrcReg) &&
|
||||
PPC::VSRCRegClass.contains(DestReg)) {
|
||||
unsigned SuperReg =
|
||||
TRI->getMatchingSuperReg(SrcReg, PPC::sub_64, &PPC::VSRCRegClass);
|
||||
MCRegister SuperReg =
|
||||
TRI->getMatchingSuperReg(SrcReg, PPC::sub_64, &PPC::VSRCRegClass);
|
||||
|
||||
if (VSXSelfCopyCrash && DestReg == SuperReg)
|
||||
llvm_unreachable("nop VSX copy");
|
||||
|
@ -931,7 +931,7 @@ void PPCInstrInfo::copyPhysReg(MachineBasicBlock &MBB,
|
|||
// Different class register copy
|
||||
if (PPC::CRBITRCRegClass.contains(SrcReg) &&
|
||||
PPC::GPRCRegClass.contains(DestReg)) {
|
||||
unsigned CRReg = getCRFromCRBit(SrcReg);
|
||||
MCRegister CRReg = getCRFromCRBit(SrcReg);
|
||||
BuildMI(MBB, I, DL, get(PPC::MFOCRF), DestReg).addReg(CRReg);
|
||||
getKillRegState(KillSrc);
|
||||
// Rotate the CR bit in the CR fields to be the least significant bit and
|
||||
|
|
|
@ -280,7 +280,7 @@ public:
|
|||
unsigned FalseReg) const override;
|
||||
|
||||
void copyPhysReg(MachineBasicBlock &MBB, MachineBasicBlock::iterator I,
|
||||
const DebugLoc &DL, unsigned DestReg, unsigned SrcReg,
|
||||
const DebugLoc &DL, MCRegister DestReg, MCRegister SrcReg,
|
||||
bool KillSrc) const override;
|
||||
|
||||
void storeRegToStackSlot(MachineBasicBlock &MBB,
|
||||
|
|
|
@ -84,8 +84,8 @@ unsigned RISCVInstrInfo::isStoreToStackSlot(const MachineInstr &MI,
|
|||
|
||||
void RISCVInstrInfo::copyPhysReg(MachineBasicBlock &MBB,
|
||||
MachineBasicBlock::iterator MBBI,
|
||||
const DebugLoc &DL, unsigned DstReg,
|
||||
unsigned SrcReg, bool KillSrc) const {
|
||||
const DebugLoc &DL, MCRegister DstReg,
|
||||
MCRegister SrcReg, bool KillSrc) const {
|
||||
if (RISCV::GPRRegClass.contains(DstReg, SrcReg)) {
|
||||
BuildMI(MBB, MBBI, DL, get(RISCV::ADDI), DstReg)
|
||||
.addReg(SrcReg, getKillRegState(KillSrc))
|
||||
|
|
|
@ -34,7 +34,7 @@ public:
|
|||
int &FrameIndex) const override;
|
||||
|
||||
void copyPhysReg(MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI,
|
||||
const DebugLoc &DL, unsigned DstReg, unsigned SrcReg,
|
||||
const DebugLoc &DL, MCRegister DstReg, MCRegister SrcReg,
|
||||
bool KillSrc) const override;
|
||||
|
||||
void storeRegToStackSlot(MachineBasicBlock &MBB,
|
||||
|
|
|
@ -304,8 +304,8 @@ bool SparcInstrInfo::reverseBranchCondition(
|
|||
|
||||
void SparcInstrInfo::copyPhysReg(MachineBasicBlock &MBB,
|
||||
MachineBasicBlock::iterator I,
|
||||
const DebugLoc &DL, unsigned DestReg,
|
||||
unsigned SrcReg, bool KillSrc) const {
|
||||
const DebugLoc &DL, MCRegister DestReg,
|
||||
MCRegister SrcReg, bool KillSrc) const {
|
||||
unsigned numSubRegs = 0;
|
||||
unsigned movOpc = 0;
|
||||
const unsigned *subRegIdx = nullptr;
|
||||
|
|
|
@ -81,7 +81,7 @@ public:
|
|||
reverseBranchCondition(SmallVectorImpl<MachineOperand> &Cond) const override;
|
||||
|
||||
void copyPhysReg(MachineBasicBlock &MBB, MachineBasicBlock::iterator I,
|
||||
const DebugLoc &DL, unsigned DestReg, unsigned SrcReg,
|
||||
const DebugLoc &DL, MCRegister DestReg, MCRegister SrcReg,
|
||||
bool KillSrc) const override;
|
||||
|
||||
void storeRegToStackSlot(MachineBasicBlock &MBB,
|
||||
|
|
|
@ -765,8 +765,8 @@ bool SystemZInstrInfo::PredicateInstruction(
|
|||
|
||||
void SystemZInstrInfo::copyPhysReg(MachineBasicBlock &MBB,
|
||||
MachineBasicBlock::iterator MBBI,
|
||||
const DebugLoc &DL, unsigned DestReg,
|
||||
unsigned SrcReg, bool KillSrc) const {
|
||||
const DebugLoc &DL, MCRegister DestReg,
|
||||
MCRegister SrcReg, bool KillSrc) const {
|
||||
// Split 128-bit GPR moves into two 64-bit moves. Add implicit uses of the
|
||||
// super register in case one of the subregs is undefined.
|
||||
// This handles ADDR128 too.
|
||||
|
@ -791,12 +791,12 @@ void SystemZInstrInfo::copyPhysReg(MachineBasicBlock &MBB,
|
|||
// Move 128-bit floating-point values between VR128 and FP128.
|
||||
if (SystemZ::VR128BitRegClass.contains(DestReg) &&
|
||||
SystemZ::FP128BitRegClass.contains(SrcReg)) {
|
||||
unsigned SrcRegHi =
|
||||
RI.getMatchingSuperReg(RI.getSubReg(SrcReg, SystemZ::subreg_h64),
|
||||
SystemZ::subreg_h64, &SystemZ::VR128BitRegClass);
|
||||
unsigned SrcRegLo =
|
||||
RI.getMatchingSuperReg(RI.getSubReg(SrcReg, SystemZ::subreg_l64),
|
||||
SystemZ::subreg_h64, &SystemZ::VR128BitRegClass);
|
||||
MCRegister SrcRegHi =
|
||||
RI.getMatchingSuperReg(RI.getSubReg(SrcReg, SystemZ::subreg_h64),
|
||||
SystemZ::subreg_h64, &SystemZ::VR128BitRegClass);
|
||||
MCRegister SrcRegLo =
|
||||
RI.getMatchingSuperReg(RI.getSubReg(SrcReg, SystemZ::subreg_l64),
|
||||
SystemZ::subreg_h64, &SystemZ::VR128BitRegClass);
|
||||
|
||||
BuildMI(MBB, MBBI, DL, get(SystemZ::VMRHG), DestReg)
|
||||
.addReg(SrcRegHi, getKillRegState(KillSrc))
|
||||
|
@ -805,12 +805,12 @@ void SystemZInstrInfo::copyPhysReg(MachineBasicBlock &MBB,
|
|||
}
|
||||
if (SystemZ::FP128BitRegClass.contains(DestReg) &&
|
||||
SystemZ::VR128BitRegClass.contains(SrcReg)) {
|
||||
unsigned DestRegHi =
|
||||
RI.getMatchingSuperReg(RI.getSubReg(DestReg, SystemZ::subreg_h64),
|
||||
SystemZ::subreg_h64, &SystemZ::VR128BitRegClass);
|
||||
unsigned DestRegLo =
|
||||
RI.getMatchingSuperReg(RI.getSubReg(DestReg, SystemZ::subreg_l64),
|
||||
SystemZ::subreg_h64, &SystemZ::VR128BitRegClass);
|
||||
MCRegister DestRegHi =
|
||||
RI.getMatchingSuperReg(RI.getSubReg(DestReg, SystemZ::subreg_h64),
|
||||
SystemZ::subreg_h64, &SystemZ::VR128BitRegClass);
|
||||
MCRegister DestRegLo =
|
||||
RI.getMatchingSuperReg(RI.getSubReg(DestReg, SystemZ::subreg_l64),
|
||||
SystemZ::subreg_h64, &SystemZ::VR128BitRegClass);
|
||||
|
||||
if (DestRegHi != SrcReg)
|
||||
copyPhysReg(MBB, MBBI, DL, DestRegHi, SrcReg, false);
|
||||
|
|
|
@ -242,7 +242,7 @@ public:
|
|||
bool PredicateInstruction(MachineInstr &MI,
|
||||
ArrayRef<MachineOperand> Pred) const override;
|
||||
void copyPhysReg(MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI,
|
||||
const DebugLoc &DL, unsigned DestReg, unsigned SrcReg,
|
||||
const DebugLoc &DL, MCRegister DestReg, MCRegister SrcReg,
|
||||
bool KillSrc) const override;
|
||||
void storeRegToStackSlot(MachineBasicBlock &MBB,
|
||||
MachineBasicBlock::iterator MBBI,
|
||||
|
|
|
@ -54,8 +54,8 @@ bool WebAssemblyInstrInfo::isReallyTriviallyReMaterializable(
|
|||
|
||||
void WebAssemblyInstrInfo::copyPhysReg(MachineBasicBlock &MBB,
|
||||
MachineBasicBlock::iterator I,
|
||||
const DebugLoc &DL, unsigned DestReg,
|
||||
unsigned SrcReg, bool KillSrc) const {
|
||||
const DebugLoc &DL, MCRegister DestReg,
|
||||
MCRegister SrcReg, bool KillSrc) const {
|
||||
// This method is called by post-RA expansion, which expects only pregs to
|
||||
// exist. However we need to handle both here.
|
||||
auto &MRI = MBB.getParent()->getRegInfo();
|
||||
|
|
|
@ -46,7 +46,7 @@ public:
|
|||
AAResults *AA) const override;
|
||||
|
||||
void copyPhysReg(MachineBasicBlock &MBB, MachineBasicBlock::iterator MI,
|
||||
const DebugLoc &DL, unsigned DestReg, unsigned SrcReg,
|
||||
const DebugLoc &DL, MCRegister DestReg, MCRegister SrcReg,
|
||||
bool KillSrc) const override;
|
||||
MachineInstr *commuteInstructionImpl(MachineInstr &MI, bool NewMI,
|
||||
unsigned OpIdx1,
|
||||
|
|
|
@ -2963,8 +2963,8 @@ static unsigned CopyToFromAsymmetricReg(unsigned DestReg, unsigned SrcReg,
|
|||
|
||||
void X86InstrInfo::copyPhysReg(MachineBasicBlock &MBB,
|
||||
MachineBasicBlock::iterator MI,
|
||||
const DebugLoc &DL, unsigned DestReg,
|
||||
unsigned SrcReg, bool KillSrc) const {
|
||||
const DebugLoc &DL, MCRegister DestReg,
|
||||
MCRegister SrcReg, bool KillSrc) const {
|
||||
// First deal with the normal symmetric copies.
|
||||
bool HasAVX = Subtarget.hasAVX();
|
||||
bool HasVLX = Subtarget.hasVLX();
|
||||
|
|
|
@ -312,7 +312,7 @@ public:
|
|||
ArrayRef<MachineOperand> Cond, unsigned TrueReg,
|
||||
unsigned FalseReg) const override;
|
||||
void copyPhysReg(MachineBasicBlock &MBB, MachineBasicBlock::iterator MI,
|
||||
const DebugLoc &DL, unsigned DestReg, unsigned SrcReg,
|
||||
const DebugLoc &DL, MCRegister DestReg, MCRegister SrcReg,
|
||||
bool KillSrc) const override;
|
||||
void storeRegToStackSlot(MachineBasicBlock &MBB,
|
||||
MachineBasicBlock::iterator MI, unsigned SrcReg,
|
||||
|
|
|
@ -330,8 +330,8 @@ XCoreInstrInfo::removeBranch(MachineBasicBlock &MBB, int *BytesRemoved) const {
|
|||
|
||||
void XCoreInstrInfo::copyPhysReg(MachineBasicBlock &MBB,
|
||||
MachineBasicBlock::iterator I,
|
||||
const DebugLoc &DL, unsigned DestReg,
|
||||
unsigned SrcReg, bool KillSrc) const {
|
||||
const DebugLoc &DL, MCRegister DestReg,
|
||||
MCRegister SrcReg, bool KillSrc) const {
|
||||
bool GRDest = XCore::GRRegsRegClass.contains(DestReg);
|
||||
bool GRSrc = XCore::GRRegsRegClass.contains(SrcReg);
|
||||
|
||||
|
|
|
@ -63,7 +63,7 @@ public:
|
|||
int *BytesRemoved = nullptr) const override;
|
||||
|
||||
void copyPhysReg(MachineBasicBlock &MBB, MachineBasicBlock::iterator I,
|
||||
const DebugLoc &DL, unsigned DestReg, unsigned SrcReg,
|
||||
const DebugLoc &DL, MCRegister DestReg, MCRegister SrcReg,
|
||||
bool KillSrc) const override;
|
||||
|
||||
void storeRegToStackSlot(MachineBasicBlock &MBB,
|
||||
|
|
Loading…
Reference in New Issue