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 | 4c988391e1de99755a5d872a501b69f2fbbe964c (patch) | |
| tree | 8414a85292698b49ecd7dc53d005e041297e5f9f /llvm/lib/CodeGen/LiveVariables.cpp | |
| parent | bef87a990a5cefe70ec18424cc09dfb3278b6de0 (diff) | |
| download | bcm5719-llvm-4c988391e1de99755a5d872a501b69f2fbbe964c.tar.gz bcm5719-llvm-4c988391e1de99755a5d872a501b69f2fbbe964c.zip | |
Fix an iterator invalidation problem. :(
llvm-svn: 11627
Diffstat (limited to 'llvm/lib/CodeGen/LiveVariables.cpp')
| -rw-r--r-- | llvm/lib/CodeGen/LiveVariables.cpp | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/llvm/lib/CodeGen/LiveVariables.cpp b/llvm/lib/CodeGen/LiveVariables.cpp index c4c8d639292..361b5038a2b 100644 --- a/llvm/lib/CodeGen/LiveVariables.cpp +++ b/llvm/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])); } |

