diff options
author | Sjoerd Meijer <sjoerd.meijer@arm.com> | 2019-02-11 08:47:59 +0000 |
---|---|---|
committer | Sjoerd Meijer <sjoerd.meijer@arm.com> | 2019-02-11 08:47:59 +0000 |
commit | 0cc50c6b87c42da96d8e10d56e9b09be71b95a3f (patch) | |
tree | 792bb4ecc84238ee04077f335bef29bb33ac4ab1 /llvm/lib/Target/ARM/ARMLoadStoreOptimizer.cpp | |
parent | 9d610c5a539e022c95aa14dbcf67cb6faea55a5f (diff) | |
download | llvm-0cc50c6b87c42da96d8e10d56e9b09be71b95a3f.zip llvm-0cc50c6b87c42da96d8e10d56e9b09be71b95a3f.tar.gz llvm-0cc50c6b87c42da96d8e10d56e9b09be71b95a3f.tar.bz2 |
[ARM] LoadStoreOptimizer: just a clean-up. NFC.
Differential Revision: https://reviews.llvm.org/D57955
llvm-svn: 353670
Diffstat (limited to 'llvm/lib/Target/ARM/ARMLoadStoreOptimizer.cpp')
-rw-r--r-- | llvm/lib/Target/ARM/ARMLoadStoreOptimizer.cpp | 60 |
1 files changed, 25 insertions, 35 deletions
diff --git a/llvm/lib/Target/ARM/ARMLoadStoreOptimizer.cpp b/llvm/lib/Target/ARM/ARMLoadStoreOptimizer.cpp index 73db4ab..f64b00c 100644 --- a/llvm/lib/Target/ARM/ARMLoadStoreOptimizer.cpp +++ b/llvm/lib/Target/ARM/ARMLoadStoreOptimizer.cpp @@ -2350,10 +2350,13 @@ ARMPreAllocLoadStoreOpt::RescheduleLoadStoreInstrs(MachineBasicBlock *MBB) { bool RetVal = false; DenseMap<MachineInstr*, unsigned> MI2LocMap; - DenseMap<unsigned, SmallVector<MachineInstr *, 4>> Base2LdsMap; - DenseMap<unsigned, SmallVector<MachineInstr *, 4>> Base2StsMap; - SmallVector<unsigned, 4> LdBases; - SmallVector<unsigned, 4> StBases; + using MapIt = DenseMap<unsigned, SmallVector<MachineInstr *, 4>>::iterator; + using Base2InstMap = DenseMap<unsigned, SmallVector<MachineInstr *, 4>>; + using BaseVec = SmallVector<unsigned, 4>; + Base2InstMap Base2LdsMap; + Base2InstMap Base2StsMap; + BaseVec LdBases; + BaseVec StBases; unsigned Loc = 0; MachineBasicBlock::iterator MBBI = MBB->begin(); @@ -2380,41 +2383,28 @@ ARMPreAllocLoadStoreOpt::RescheduleLoadStoreInstrs(MachineBasicBlock *MBB) { bool isLd = isLoadSingle(Opc); unsigned Base = MI.getOperand(1).getReg(); int Offset = getMemoryOpOffset(MI); - bool StopHere = false; - if (isLd) { - DenseMap<unsigned, SmallVector<MachineInstr *, 4>>::iterator BI = - Base2LdsMap.find(Base); - if (BI != Base2LdsMap.end()) { - for (unsigned i = 0, e = BI->second.size(); i != e; ++i) { - if (Offset == getMemoryOpOffset(*BI->second[i])) { - StopHere = true; - break; - } - } - if (!StopHere) - BI->second.push_back(&MI); - } else { - Base2LdsMap[Base].push_back(&MI); - LdBases.push_back(Base); + auto FindBases = [&] (Base2InstMap &Base2Ops, BaseVec &Bases) { + MapIt BI = Base2Ops.find(Base); + if (BI == Base2Ops.end()) { + Base2Ops[Base].push_back(&MI); + Bases.push_back(Base); + return; } - } else { - DenseMap<unsigned, SmallVector<MachineInstr *, 4>>::iterator BI = - Base2StsMap.find(Base); - if (BI != Base2StsMap.end()) { - for (unsigned i = 0, e = BI->second.size(); i != e; ++i) { - if (Offset == getMemoryOpOffset(*BI->second[i])) { - StopHere = true; - break; - } + for (unsigned i = 0, e = BI->second.size(); i != e; ++i) { + if (Offset == getMemoryOpOffset(*BI->second[i])) { + StopHere = true; + break; } - if (!StopHere) - BI->second.push_back(&MI); - } else { - Base2StsMap[Base].push_back(&MI); - StBases.push_back(Base); } - } + if (!StopHere) + BI->second.push_back(&MI); + }; + + if (isLd) + FindBases(Base2LdsMap, LdBases); + else + FindBases(Base2StsMap, StBases); if (StopHere) { // Found a duplicate (a base+offset combination that's seen earlier). |