diff options
author | Chris Lattner <sabre@nondot.org> | 2004-02-19 18:32:29 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2004-02-19 18:32:29 +0000 |
commit | a96478d7d6b2aee1aecad4af23506167ec16752c (patch) | |
tree | 851a00fdb4ebcfddd6be88849d5fbfee60c37724 /lib/CodeGen/LiveVariables.cpp | |
parent | da8ab2ea451676f7093dc272aaaedf113b58f6f9 (diff) |
Fix an iterator invalidation problem. :(
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11627 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/LiveVariables.cpp')
-rw-r--r-- | lib/CodeGen/LiveVariables.cpp | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/lib/CodeGen/LiveVariables.cpp b/lib/CodeGen/LiveVariables.cpp index c4c8d63929..361b5038a2 100644 --- a/lib/CodeGen/LiveVariables.cpp +++ b/lib/CodeGen/LiveVariables.cpp @@ -337,13 +337,22 @@ void LiveVariables::instructionChanged(MachineInstr *OldMI, // Move the killed information over... killed_iterator I, E; tie(I, E) = killed_range(OldMI); + std::vector<unsigned> Regs; for (killed_iterator A = I; A != E; ++A) - RegistersKilled.insert(std::make_pair(NewMI, A->second)); + Regs.push_back(A->second); RegistersKilled.erase(I, E); + for (unsigned i = 0, e = Regs.size(); i != e; ++i) + RegistersKilled.insert(std::make_pair(NewMI, Regs[i])); + Regs.clear(); + + // Move the dead information over... tie(I, E) = dead_range(OldMI); for (killed_iterator A = I; A != E; ++A) - RegistersDead.insert(std::make_pair(NewMI, A->second)); + Regs.push_back(A->second); RegistersDead.erase(I, E); + + for (unsigned i = 0, e = Regs.size(); i != e; ++i) + RegistersDead.insert(std::make_pair(NewMI, Regs[i])); } |