mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-16 11:30:51 +00:00
Make sure ARM multi load / store pass copies memoperands when forming ldrd / strd. pr8113.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@119109 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
3a4dd305ac
commit
fbc8c67992
@ -1380,6 +1380,14 @@ ARMPreAllocLoadStoreOpt::CanFormLdStDWord(MachineInstr *Op0, MachineInstr *Op1,
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static MachineMemOperand *CopyMMO(const MachineMemOperand *MMO,
|
||||||
|
unsigned NewSize, MachineFunction *MF) {
|
||||||
|
return MF->getMachineMemOperand(MachinePointerInfo(MMO->getValue(),
|
||||||
|
MMO->getOffset()),
|
||||||
|
MMO->getFlags(), NewSize,
|
||||||
|
MMO->getAlignment(), MMO->getTBAAInfo());
|
||||||
|
}
|
||||||
|
|
||||||
bool ARMPreAllocLoadStoreOpt::RescheduleOps(MachineBasicBlock *MBB,
|
bool ARMPreAllocLoadStoreOpt::RescheduleOps(MachineBasicBlock *MBB,
|
||||||
SmallVector<MachineInstr*, 4> &Ops,
|
SmallVector<MachineInstr*, 4> &Ops,
|
||||||
unsigned Base, bool isLd,
|
unsigned Base, bool isLd,
|
||||||
@ -1487,6 +1495,11 @@ bool ARMPreAllocLoadStoreOpt::RescheduleOps(MachineBasicBlock *MBB,
|
|||||||
if (!isT2)
|
if (!isT2)
|
||||||
MIB.addReg(0);
|
MIB.addReg(0);
|
||||||
MIB.addImm(Offset).addImm(Pred).addReg(PredReg);
|
MIB.addImm(Offset).addImm(Pred).addReg(PredReg);
|
||||||
|
|
||||||
|
// Copy memoperands bug change size to 8.
|
||||||
|
for (MachineInstr::mmo_iterator mmo = Op0->memoperands_begin();
|
||||||
|
mmo != Op0->memoperands_end(); ++mmo)
|
||||||
|
MIB.addMemOperand(CopyMMO(*mmo, 8, MF));
|
||||||
++NumLDRDFormed;
|
++NumLDRDFormed;
|
||||||
} else {
|
} else {
|
||||||
MachineInstrBuilder MIB = BuildMI(*MBB, InsertPos,
|
MachineInstrBuilder MIB = BuildMI(*MBB, InsertPos,
|
||||||
@ -1500,6 +1513,10 @@ bool ARMPreAllocLoadStoreOpt::RescheduleOps(MachineBasicBlock *MBB,
|
|||||||
if (!isT2)
|
if (!isT2)
|
||||||
MIB.addReg(0);
|
MIB.addReg(0);
|
||||||
MIB.addImm(Offset).addImm(Pred).addReg(PredReg);
|
MIB.addImm(Offset).addImm(Pred).addReg(PredReg);
|
||||||
|
// Copy memoperands bug change size to 8.
|
||||||
|
for (MachineInstr::mmo_iterator mmo = Op0->memoperands_begin();
|
||||||
|
mmo != Op0->memoperands_end(); ++mmo)
|
||||||
|
MIB.addMemOperand(CopyMMO(*mmo, 8, MF));
|
||||||
++NumSTRDFormed;
|
++NumSTRDFormed;
|
||||||
}
|
}
|
||||||
MBB->erase(Op0);
|
MBB->erase(Op0);
|
||||||
|
Loading…
Reference in New Issue
Block a user