From dbea9731b12e62f70d9da40cf273cdd9105f987c Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Thu, 30 Sep 2004 16:35:08 +0000 Subject: Use more efficient map operations. Fix a bug that would affect hypothetical targets that supported multiple memory operands. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@16614 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/VirtRegMap.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'lib/CodeGen/VirtRegMap.cpp') diff --git a/lib/CodeGen/VirtRegMap.cpp b/lib/CodeGen/VirtRegMap.cpp index 4d7c826a89..b687c57ae7 100644 --- a/lib/CodeGen/VirtRegMap.cpp +++ b/lib/CodeGen/VirtRegMap.cpp @@ -79,17 +79,19 @@ void VirtRegMap::virtFolded(unsigned virtReg, MachineInstr* oldMI, MachineInstr* newMI) { // move previous memory references folded to new instruction - MI2VirtMapTy::iterator i, e; std::vector regs; - for (tie(i, e) = MI2VirtMap.equal_range(oldMI); i != e; ) { - regs.push_back(i->second); - MI2VirtMap.erase(i++); + for (MI2VirtMapTy::iterator I = MI2VirtMap.lower_bound(oldMI), + E = MI2VirtMap.end(); I != E && I->first == oldMI; ) { + regs.push_back(I->second); + MI2VirtMap.erase(I++); } + + MI2VirtMapTy::iterator IP = MI2VirtMap.lower_bound(newMI); for (unsigned i = 0, e = regs.size(); i != e; ++i) - MI2VirtMap.insert(std::make_pair(newMI, i)); + MI2VirtMap.insert(IP, std::make_pair(newMI, regs[i])); // add new memory reference - MI2VirtMap.insert(std::make_pair(newMI, virtReg)); + MI2VirtMap.insert(IP, std::make_pair(newMI, virtReg)); } void VirtRegMap::print(std::ostream &OS) const { -- cgit v1.2.3-18-g5258