mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-12-02 16:36:40 +00:00
Remove the TII::scheduleTwoAddrSource() hook.
It never does anything when running 'make check', and it get's in the way of updating live intervals in 2-addr. The hook was originally added to help form IT blocks in Thumb2 code before register allocation, but the pass ordering has changed since then, and we run if-conversion after register allocation now. When the MI scheduler is enabled, there will be no less than two schedulers between 2-addr and Thumb2ITBlockPass, so this hook is unlikely to help anything. llvm-svn: 161794
This commit is contained in:
parent
9cd2a5dbb9
commit
33e364a3df
@ -188,14 +188,6 @@ public:
|
||||
const MachineInstr *Orig,
|
||||
const TargetRegisterInfo &TRI) const = 0;
|
||||
|
||||
/// scheduleTwoAddrSource - Schedule the copy / re-mat of the source of the
|
||||
/// two-addrss instruction inserted by two-address pass.
|
||||
virtual void scheduleTwoAddrSource(MachineInstr *SrcMI,
|
||||
MachineInstr *UseMI,
|
||||
const TargetRegisterInfo &TRI) const {
|
||||
// Do nothing.
|
||||
}
|
||||
|
||||
/// duplicate - Create a duplicate of the Orig instruction in MF. This is like
|
||||
/// MachineFunction::CloneMachineInstr(), but the target may update operands
|
||||
/// that are required to be unique.
|
||||
|
@ -1352,17 +1352,6 @@ TwoAddressInstructionPass::processTiedPairs(MachineInstr *MI,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// We didn't change anything if there was a single tied pair, and that
|
||||
// pair didn't require copies.
|
||||
if (AllUsesCopied || TiedPairs.size() > 1) {
|
||||
// Schedule the source copy / remat inserted to form two-address
|
||||
// instruction. FIXME: Does it matter the distance map may not be
|
||||
// accurate after it's scheduled?
|
||||
MachineBasicBlock::iterator PrevMI = MI;
|
||||
--PrevMI;
|
||||
TII->scheduleTwoAddrSource(PrevMI, MI, *TRI);
|
||||
}
|
||||
}
|
||||
|
||||
/// runOnMachineFunction - Reduce two-address instructions to two operands.
|
||||
|
@ -563,48 +563,6 @@ bool llvm::rewriteT2FrameIndex(MachineInstr &MI, unsigned FrameRegIdx,
|
||||
return Offset == 0;
|
||||
}
|
||||
|
||||
/// scheduleTwoAddrSource - Schedule the copy / re-mat of the source of the
|
||||
/// two-addrss instruction inserted by two-address pass.
|
||||
void
|
||||
Thumb2InstrInfo::scheduleTwoAddrSource(MachineInstr *SrcMI,
|
||||
MachineInstr *UseMI,
|
||||
const TargetRegisterInfo &TRI) const {
|
||||
if (SrcMI->getOpcode() != ARM::tMOVr || SrcMI->getOperand(1).isKill())
|
||||
return;
|
||||
|
||||
unsigned PredReg = 0;
|
||||
ARMCC::CondCodes CC = getInstrPredicate(UseMI, PredReg);
|
||||
if (CC == ARMCC::AL || PredReg != ARM::CPSR)
|
||||
return;
|
||||
|
||||
// Schedule the copy so it doesn't come between previous instructions
|
||||
// and UseMI which can form an IT block.
|
||||
unsigned SrcReg = SrcMI->getOperand(1).getReg();
|
||||
ARMCC::CondCodes OCC = ARMCC::getOppositeCondition(CC);
|
||||
MachineBasicBlock *MBB = UseMI->getParent();
|
||||
MachineBasicBlock::iterator MBBI = SrcMI;
|
||||
unsigned NumInsts = 0;
|
||||
while (--MBBI != MBB->begin()) {
|
||||
if (MBBI->isDebugValue())
|
||||
continue;
|
||||
|
||||
MachineInstr *NMI = &*MBBI;
|
||||
ARMCC::CondCodes NCC = getInstrPredicate(NMI, PredReg);
|
||||
if (!(NCC == CC || NCC == OCC) ||
|
||||
NMI->modifiesRegister(SrcReg, &TRI) ||
|
||||
NMI->modifiesRegister(ARM::CPSR, &TRI))
|
||||
break;
|
||||
if (++NumInsts == 4)
|
||||
// Too many in a row!
|
||||
return;
|
||||
}
|
||||
|
||||
if (NumInsts) {
|
||||
MBB->remove(SrcMI);
|
||||
MBB->insert(++MBBI, SrcMI);
|
||||
}
|
||||
}
|
||||
|
||||
ARMCC::CondCodes
|
||||
llvm::getITInstrPredicate(const MachineInstr *MI, unsigned &PredReg) {
|
||||
unsigned Opc = MI->getOpcode();
|
||||
|
@ -57,11 +57,6 @@ public:
|
||||
const TargetRegisterClass *RC,
|
||||
const TargetRegisterInfo *TRI) const;
|
||||
|
||||
/// scheduleTwoAddrSource - Schedule the copy / re-mat of the source of the
|
||||
/// two-addrss instruction inserted by two-address pass.
|
||||
void scheduleTwoAddrSource(MachineInstr *SrcMI, MachineInstr *UseMI,
|
||||
const TargetRegisterInfo &TRI) const;
|
||||
|
||||
/// getRegisterInfo - TargetInstrInfo is a superset of MRegister info. As
|
||||
/// such, whenever a client has an instance of instruction info, it should
|
||||
/// always be able to get register info as well (through this method).
|
||||
|
Loading…
Reference in New Issue
Block a user