diff options
Diffstat (limited to 'llvm/lib/Target/Mips/MipsDelaySlotFiller.cpp')
| -rw-r--r-- | llvm/lib/Target/Mips/MipsDelaySlotFiller.cpp | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/llvm/lib/Target/Mips/MipsDelaySlotFiller.cpp b/llvm/lib/Target/Mips/MipsDelaySlotFiller.cpp index 4ec01ab7b456..a576c531c8c0 100644 --- a/llvm/lib/Target/Mips/MipsDelaySlotFiller.cpp +++ b/llvm/lib/Target/Mips/MipsDelaySlotFiller.cpp @@ -744,6 +744,12 @@ bool MipsDelaySlotFiller::searchRange(MachineBasicBlock &MBB, IterTy Begin, bool InMicroMipsMode = STI.inMicroMipsMode(); const MipsInstrInfo *TII = STI.getInstrInfo(); unsigned Opcode = (*Slot).getOpcode(); + + // In mips1-4, should not put mflo into the delay slot for the return. + if ((IsMFLOMFHI(CurrI->getOpcode())) && + (!STI.hasMips32() && !STI.hasMips5())) + continue; + // This is complicated by the tail call optimization. For non-PIC code // there is only a 32bit sized unconditional branch which can be assumed // to be able to reach the target. b16 only has a range of +/- 1 KB. |
