diff options
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])); } |