mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-03 15:36:21 +00:00
ARM scheduling fix: don't guess at implicit operand latency.
This is a minor drive-by fix with no robust way to unit test. As an example see neon-div.ll: SU(16): %Q8<def> = VMOVLsv4i32 %D17, pred:14, pred:%noreg, %Q8<imp-use,kill> val SU(1): Latency=2 Reg=%Q8 ...should be latency=1 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@158960 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
ef2d9e59ab
commit
e2b32bb20e
@ -2746,12 +2746,13 @@ ARMBaseInstrInfo::getOperandLatency(const InstrItineraryData *ItinData,
|
|||||||
unsigned NewUseIdx;
|
unsigned NewUseIdx;
|
||||||
const MachineInstr *NewUseMI = getBundledUseMI(&getRegisterInfo(), UseMI,
|
const MachineInstr *NewUseMI = getBundledUseMI(&getRegisterInfo(), UseMI,
|
||||||
Reg, NewUseIdx, UseAdj);
|
Reg, NewUseIdx, UseAdj);
|
||||||
if (NewUseMI) {
|
if (!NewUseMI)
|
||||||
|
return -1;
|
||||||
|
|
||||||
UseMI = NewUseMI;
|
UseMI = NewUseMI;
|
||||||
UseIdx = NewUseIdx;
|
UseIdx = NewUseIdx;
|
||||||
UseMCID = &UseMI->getDesc();
|
UseMCID = &UseMI->getDesc();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (Reg == ARM::CPSR) {
|
if (Reg == ARM::CPSR) {
|
||||||
if (DefMI->getOpcode() == ARM::FMSTAT) {
|
if (DefMI->getOpcode() == ARM::FMSTAT) {
|
||||||
@ -2778,6 +2779,9 @@ ARMBaseInstrInfo::getOperandLatency(const InstrItineraryData *ItinData,
|
|||||||
return Latency;
|
return Latency;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (DefMO.isImplicit() || UseMI->getOperand(UseIdx).isImplicit())
|
||||||
|
return -1;
|
||||||
|
|
||||||
unsigned DefAlign = DefMI->hasOneMemOperand()
|
unsigned DefAlign = DefMI->hasOneMemOperand()
|
||||||
? (*DefMI->memoperands_begin())->getAlignment() : 0;
|
? (*DefMI->memoperands_begin())->getAlignment() : 0;
|
||||||
unsigned UseAlign = UseMI->hasOneMemOperand()
|
unsigned UseAlign = UseMI->hasOneMemOperand()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user