diff options
author | David Green <david.green@arm.com> | 2021-02-19 13:15:10 +0000 |
---|---|---|
committer | David Green <david.green@arm.com> | 2021-02-19 13:15:10 +0000 |
commit | 7a5c26e99afab1a79fc6777fc424510ce4caec9f (patch) | |
tree | 0cc9cf0041594942518210d35b9b522abff6f219 /llvm/lib/Target/ARM/ARMLoadStoreOptimizer.cpp | |
parent | edc92a1c42590a1fb5e852cea6ffbc253e5e0a7f (diff) | |
download | llvm-7a5c26e99afab1a79fc6777fc424510ce4caec9f.zip llvm-7a5c26e99afab1a79fc6777fc424510ce4caec9f.tar.gz llvm-7a5c26e99afab1a79fc6777fc424510ce4caec9f.tar.bz2 |
Revert "[ARM] Expand the range of allowed post-incs in load/store optimizer"
This reverts commit 3b34b06fc5908b4f7dc720c0655d5756bd8e2a28 as runtime
errors were reported.
Diffstat (limited to 'llvm/lib/Target/ARM/ARMLoadStoreOptimizer.cpp')
-rw-r--r-- | llvm/lib/Target/ARM/ARMLoadStoreOptimizer.cpp | 27 |
1 files changed, 11 insertions, 16 deletions
diff --git a/llvm/lib/Target/ARM/ARMLoadStoreOptimizer.cpp b/llvm/lib/Target/ARM/ARMLoadStoreOptimizer.cpp index bf6f775..5fe6180 100644 --- a/llvm/lib/Target/ARM/ARMLoadStoreOptimizer.cpp +++ b/llvm/lib/Target/ARM/ARMLoadStoreOptimizer.cpp @@ -1502,16 +1502,12 @@ bool ARMLoadStoreOpt::MergeBaseUpdateLoadStore(MachineInstr *MI) { NewOpc = getPreIndexedLoadStoreOpcode(Opcode, ARM_AM::sub); } else { MergeInstr = findIncDecAfter(MBBI, Base, Pred, PredReg, Offset, TRI); - if (MergeInstr == MBB.end()) - return false; - - NewOpc = getPostIndexedLoadStoreOpcode(Opcode, ARM_AM::add); - if ((isAM5 && Offset != Bytes) || - (!isAM5 && !isLegalAddressImm(NewOpc, Offset, TII))) { + if (Offset == Bytes) { + NewOpc = getPostIndexedLoadStoreOpcode(Opcode, ARM_AM::add); + } else if (!isAM5 && Offset == -Bytes) { NewOpc = getPostIndexedLoadStoreOpcode(Opcode, ARM_AM::sub); - if (isAM5 || !isLegalAddressImm(NewOpc, Offset, TII)) - return false; - } + } else + return false; } LLVM_DEBUG(dbgs() << " Erasing old increment: " << *MergeInstr); MBB.erase(MergeInstr); @@ -1550,7 +1546,7 @@ bool ARMLoadStoreOpt::MergeBaseUpdateLoadStore(MachineInstr *MI) { (void)MIB; LLVM_DEBUG(dbgs() << " Added new instruction: " << *MIB); } else { - int Imm = ARM_AM::getAM2Opc(AddSub, abs(Offset), ARM_AM::no_shift); + int Imm = ARM_AM::getAM2Opc(AddSub, Bytes, ARM_AM::no_shift); auto MIB = BuildMI(MBB, MBBI, DL, TII->get(NewOpc), MI->getOperand(0).getReg()) .addReg(Base, RegState::Define) @@ -1580,7 +1576,7 @@ bool ARMLoadStoreOpt::MergeBaseUpdateLoadStore(MachineInstr *MI) { // the vestigal zero-reg offset register. When that's fixed, this clause // can be removed entirely. if (isAM2 && NewOpc == ARM::STR_POST_IMM) { - int Imm = ARM_AM::getAM2Opc(AddSub, abs(Offset), ARM_AM::no_shift); + int Imm = ARM_AM::getAM2Opc(AddSub, Bytes, ARM_AM::no_shift); // STR_PRE, STR_POST auto MIB = BuildMI(MBB, MBBI, DL, TII->get(NewOpc), Base) .addReg(MO.getReg(), getKillRegState(MO.isKill())) @@ -1633,14 +1629,13 @@ bool ARMLoadStoreOpt::MergeBaseUpdateLSDouble(MachineInstr &MI) const { MachineBasicBlock::iterator MergeInstr = findIncDecBefore(MBBI, Base, Pred, PredReg, Offset); unsigned NewOpc; - if (Offset != 0) { + if (Offset == 8 || Offset == -8) { NewOpc = Opcode == ARM::t2LDRDi8 ? ARM::t2LDRD_PRE : ARM::t2STRD_PRE; } else { MergeInstr = findIncDecAfter(MBBI, Base, Pred, PredReg, Offset, TRI); - if (MergeInstr == MBB.end()) - return false; - NewOpc = Opcode == ARM::t2LDRDi8 ? ARM::t2LDRD_POST : ARM::t2STRD_POST; - if (!isLegalAddressImm(NewOpc, Offset, TII)) + if (Offset == 8 || Offset == -8) { + NewOpc = Opcode == ARM::t2LDRDi8 ? ARM::t2LDRD_POST : ARM::t2STRD_POST; + } else return false; } LLVM_DEBUG(dbgs() << " Erasing old increment: " << *MergeInstr); |