[llvm-commits] [llvm] r119109 - /llvm/trunk/lib/Target/ARM/ARMLoadStoreOptimizer.cpp
Evan Cheng
evan.cheng at apple.com
Sun Nov 14 19:30:30 PST 2010
Author: evancheng
Date: Sun Nov 14 21:30:30 2010
New Revision: 119109
URL: http://llvm.org/viewvc/llvm-project?rev=119109&view=rev
Log:
Make sure ARM multi load / store pass copies memoperands when forming ldrd / strd. pr8113.
Modified:
llvm/trunk/lib/Target/ARM/ARMLoadStoreOptimizer.cpp
Modified: llvm/trunk/lib/Target/ARM/ARMLoadStoreOptimizer.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMLoadStoreOptimizer.cpp?rev=119109&r1=119108&r2=119109&view=diff
==============================================================================
--- llvm/trunk/lib/Target/ARM/ARMLoadStoreOptimizer.cpp (original)
+++ llvm/trunk/lib/Target/ARM/ARMLoadStoreOptimizer.cpp Sun Nov 14 21:30:30 2010
@@ -1380,6 +1380,14 @@
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 @@
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 @@
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);
More information about the llvm-commits
mailing list