mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-25 00:29:20 +00:00
Avoid using a live std::multimap iterator while editing the map. It looks like
we sometimes compare singular iterators, reported by ENABLE_EXPENSIVE_CHECKS. This fixes PR7825. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@110355 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
a34c885d51
commit
a330d4c3ea
@ -1914,7 +1914,6 @@ LocalRewriter::RewriteMBB(LiveIntervals *LIs,
|
||||
if (InsertSpills(MII))
|
||||
NextMII = llvm::next(MII);
|
||||
|
||||
VirtRegMap::MI2VirtMapTy::const_iterator I, End;
|
||||
bool Erased = false;
|
||||
bool BackTracked = false;
|
||||
MachineInstr &MI = *MII;
|
||||
@ -2248,15 +2247,22 @@ LocalRewriter::RewriteMBB(LiveIntervals *LIs,
|
||||
// If we have folded references to memory operands, make sure we clear all
|
||||
// physical registers that may contain the value of the spilled virtual
|
||||
// register
|
||||
|
||||
// Copy the folded virts to a small vector, we may change MI2VirtMap.
|
||||
SmallVector<std::pair<unsigned, VirtRegMap::ModRef>, 4> FoldedVirts;
|
||||
// C++0x FTW!
|
||||
for (std::pair<VirtRegMap::MI2VirtMapTy::const_iterator,
|
||||
VirtRegMap::MI2VirtMapTy::const_iterator> FVRange =
|
||||
VRM->getFoldedVirts(&MI);
|
||||
FVRange.first != FVRange.second; ++FVRange.first)
|
||||
FoldedVirts.push_back(FVRange.first->second);
|
||||
|
||||
SmallSet<int, 2> FoldedSS;
|
||||
for (tie(I, End) = VRM->getFoldedVirts(&MI); I != End; ) {
|
||||
unsigned VirtReg = I->second.first;
|
||||
VirtRegMap::ModRef MR = I->second.second;
|
||||
for (unsigned FVI = 0, FVE = FoldedVirts.size(); FVI != FVE; ++FVI) {
|
||||
unsigned VirtReg = FoldedVirts[FVI].first;
|
||||
VirtRegMap::ModRef MR = FoldedVirts[FVI].second;
|
||||
DEBUG(dbgs() << "Folded vreg: " << VirtReg << " MR: " << MR);
|
||||
|
||||
// MI2VirtMap be can updated which invalidate the iterator.
|
||||
// Increment the iterator first.
|
||||
++I;
|
||||
int SS = VRM->getStackSlot(VirtReg);
|
||||
if (SS == VirtRegMap::NO_STACK_SLOT)
|
||||
continue;
|
||||
|
Loading…
Reference in New Issue
Block a user