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;
|
||||
}
|
||||
|
||||
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,
|
||||
SmallVector<MachineInstr*, 4> &Ops,
|
||||
unsigned Base, bool isLd,
|
||||
@ -1487,6 +1495,11 @@ bool ARMPreAllocLoadStoreOpt::RescheduleOps(MachineBasicBlock *MBB,
|
||||
if (!isT2)
|
||||
MIB.addReg(0);
|
||||
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;
|
||||
} else {
|
||||
MachineInstrBuilder MIB = BuildMI(*MBB, InsertPos,
|
||||
@ -1500,6 +1513,10 @@ bool ARMPreAllocLoadStoreOpt::RescheduleOps(MachineBasicBlock *MBB,
|
||||
if (!isT2)
|
||||
MIB.addReg(0);
|
||||
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;
|
||||
}
|
||||
MBB->erase(Op0);
|
||||
|
Loading…
Reference in New Issue
Block a user