mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-12 13:38:21 +00:00
Remove many calls to TII::isMoveInstr. Targets should be producing COPY anyway.
TII::isMoveInstr is going tobe completely removed. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108507 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -107,29 +107,9 @@ bool MachineCSE::PerformTrivialCoalescing(MachineInstr *MI,
|
||||
MachineInstr *DefMI = MRI->getVRegDef(Reg);
|
||||
if (DefMI->getParent() != MBB)
|
||||
continue;
|
||||
unsigned SrcReg, DstReg, SrcSubIdx, DstSubIdx;
|
||||
if (TII->isMoveInstr(*DefMI, SrcReg, DstReg, SrcSubIdx, DstSubIdx) &&
|
||||
TargetRegisterInfo::isVirtualRegister(SrcReg) &&
|
||||
!SrcSubIdx && !DstSubIdx) {
|
||||
const TargetRegisterClass *SRC = MRI->getRegClass(SrcReg);
|
||||
const TargetRegisterClass *RC = MRI->getRegClass(Reg);
|
||||
const TargetRegisterClass *NewRC = getCommonSubClass(RC, SRC);
|
||||
if (!NewRC)
|
||||
continue;
|
||||
DEBUG(dbgs() << "Coalescing: " << *DefMI);
|
||||
DEBUG(dbgs() << "*** to: " << *MI);
|
||||
MO.setReg(SrcReg);
|
||||
MRI->clearKillFlags(SrcReg);
|
||||
if (NewRC != SRC)
|
||||
MRI->setRegClass(SrcReg, NewRC);
|
||||
DefMI->eraseFromParent();
|
||||
++NumCoalesces;
|
||||
Changed = true;
|
||||
}
|
||||
|
||||
if (!DefMI->isCopy())
|
||||
continue;
|
||||
SrcReg = DefMI->getOperand(1).getReg();
|
||||
unsigned SrcReg = DefMI->getOperand(1).getReg();
|
||||
if (!TargetRegisterInfo::isVirtualRegister(SrcReg))
|
||||
continue;
|
||||
if (DefMI->getOperand(0).getSubReg() || DefMI->getOperand(1).getSubReg())
|
||||
@ -261,19 +241,13 @@ bool MachineCSE::PhysRegDefReaches(MachineInstr *CSMI, MachineInstr *MI,
|
||||
return false;
|
||||
}
|
||||
|
||||
static bool isCopy(const MachineInstr *MI, const TargetInstrInfo *TII) {
|
||||
unsigned SrcReg, DstReg, SrcSubIdx, DstSubIdx;
|
||||
return MI->isCopyLike() ||
|
||||
TII->isMoveInstr(*MI, SrcReg, DstReg, SrcSubIdx, DstSubIdx);
|
||||
}
|
||||
|
||||
bool MachineCSE::isCSECandidate(MachineInstr *MI) {
|
||||
if (MI->isLabel() || MI->isPHI() || MI->isImplicitDef() ||
|
||||
MI->isKill() || MI->isInlineAsm() || MI->isDebugValue())
|
||||
return false;
|
||||
|
||||
// Ignore copies.
|
||||
if (isCopy(MI, TII))
|
||||
if (MI->isCopyLike())
|
||||
return false;
|
||||
|
||||
// Ignore stuff that we obviously can't move.
|
||||
@ -329,7 +303,7 @@ bool MachineCSE::isProfitableToCSE(unsigned CSReg, unsigned Reg,
|
||||
E = MRI->use_nodbg_end(); I != E; ++I) {
|
||||
MachineInstr *Use = &*I;
|
||||
// Ignore copies.
|
||||
if (!isCopy(Use, TII)) {
|
||||
if (!Use->isCopyLike()) {
|
||||
HasNonCopyUse = true;
|
||||
break;
|
||||
}
|
||||
@ -385,7 +359,7 @@ bool MachineCSE::ProcessBlock(MachineBasicBlock *MBB) {
|
||||
// Look for trivial copy coalescing opportunities.
|
||||
if (PerformTrivialCoalescing(MI, MBB)) {
|
||||
// After coalescing MI itself may become a copy.
|
||||
if (isCopy(MI, TII))
|
||||
if (MI->isCopyLike())
|
||||
continue;
|
||||
FoundCSE = VNT.count(MI);
|
||||
}
|
||||
|
Reference in New Issue
Block a user