diff options
| author | Scott Douglass <sdouglass@arm.com> | 2015-10-01 11:56:19 +0000 |
|---|---|---|
| committer | Scott Douglass <sdouglass@arm.com> | 2015-10-01 11:56:19 +0000 |
| commit | 290183d734695c9a9a3b653a0a7a02bb4012fb8b (patch) | |
| tree | d2b9d2a2b5dc1c5196cbf4ff3286b26a227a4c3e /llvm/lib/Target/ARM/ARMLoadStoreOptimizer.cpp | |
| parent | 54bb215fab81961821e4fb4650b55b2a4d62a854 (diff) | |
| download | bcm5719-llvm-290183d734695c9a9a3b653a0a7a02bb4012fb8b.tar.gz bcm5719-llvm-290183d734695c9a9a3b653a0a7a02bb4012fb8b.zip | |
[ARM] More care with Thumb1 writeback in ARMLoadStoreOptimizer
Differential Revision: http://reviews.llvm.org/D13240
llvm-svn: 249002
Diffstat (limited to 'llvm/lib/Target/ARM/ARMLoadStoreOptimizer.cpp')
| -rw-r--r-- | llvm/lib/Target/ARM/ARMLoadStoreOptimizer.cpp | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/llvm/lib/Target/ARM/ARMLoadStoreOptimizer.cpp b/llvm/lib/Target/ARM/ARMLoadStoreOptimizer.cpp index d099deda26c..d0cd9efc29a 100644 --- a/llvm/lib/Target/ARM/ARMLoadStoreOptimizer.cpp +++ b/llvm/lib/Target/ARM/ARMLoadStoreOptimizer.cpp @@ -630,9 +630,10 @@ MachineInstr *ARMLoadStoreOpt::CreateLoadStoreMulti(MachineBasicBlock &MBB, unsigned NewBase; if (isi32Load(Opcode)) { - // If it is a load, then just use one of the destination register to - // use as the new base. + // If it is a load, then just use one of the destination registers + // as the new base. Will no longer be writeback in Thumb1. NewBase = Regs[NumRegs-1].first; + Writeback = false; } else { // Find a free register that we can use as scratch register. moveLiveRegsBefore(MBB, InsertBefore); @@ -736,9 +737,12 @@ MachineInstr *ARMLoadStoreOpt::CreateLoadStoreMulti(MachineBasicBlock &MBB, MachineInstrBuilder MIB; if (Writeback) { - if (Opcode == ARM::tLDMIA) + assert(isThumb1 && "expected Writeback only inThumb1"); + if (Opcode == ARM::tLDMIA) { + assert(!(ContainsReg(Regs, Base)) && "Thumb1 can't LDM ! with Base in Regs"); // Update tLDMIA with writeback if necessary. Opcode = ARM::tLDMIA_UPD; + } MIB = BuildMI(MBB, InsertBefore, DL, TII->get(Opcode)); |

