diff options
author | David Blaikie <dblaikie@gmail.com> | 2015-03-03 23:30:40 +0000 |
---|---|---|
committer | David Blaikie <dblaikie@gmail.com> | 2015-03-03 23:30:40 +0000 |
commit | 5a0206a3ff813633e744d4305db68e9de2ff1613 (patch) | |
tree | 9c397ef25c4c7612a33fd996ded8759ef1ec4e0e /llvm/lib/CodeGen/LiveStackAnalysis.cpp | |
parent | be5e0ed919e20bf6b1d0c8b7d96188a00f686738 (diff) | |
download | llvm-5a0206a3ff813633e744d4305db68e9de2ff1613.zip llvm-5a0206a3ff813633e744d4305db68e9de2ff1613.tar.gz llvm-5a0206a3ff813633e744d4305db68e9de2ff1613.tar.bz2 |
unique_ptrify LiveRange::segmentSet
This makes LiveRange non-copyable, and LiveInterval is already
non-movable (due to the explicit dtor), so now it's non-copyable and
non-movable.
Fix the one case where we were relying on the (deprecated in C++11)
implicit copy ctor of LiveInterval (which happened to work because the
ctor created an object with a null segmentSet, so double-deleting the
null pointer was fine).
llvm-svn: 231168
Diffstat (limited to 'llvm/lib/CodeGen/LiveStackAnalysis.cpp')
-rw-r--r-- | llvm/lib/CodeGen/LiveStackAnalysis.cpp | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/llvm/lib/CodeGen/LiveStackAnalysis.cpp b/llvm/lib/CodeGen/LiveStackAnalysis.cpp index 8a6ac25..5c9c679 100644 --- a/llvm/lib/CodeGen/LiveStackAnalysis.cpp +++ b/llvm/lib/CodeGen/LiveStackAnalysis.cpp @@ -61,8 +61,10 @@ LiveStacks::getOrCreateInterval(int Slot, const TargetRegisterClass *RC) { assert(Slot >= 0 && "Spill slot indice must be >= 0"); SS2IntervalMap::iterator I = S2IMap.find(Slot); if (I == S2IMap.end()) { - I = S2IMap.insert(I, std::make_pair(Slot, - LiveInterval(TargetRegisterInfo::index2StackSlot(Slot), 0.0F))); + I = S2IMap.emplace(std::piecewise_construct, std::forward_as_tuple(Slot), + std::forward_as_tuple( + TargetRegisterInfo::index2StackSlot(Slot), 0.0F)) + .first; S2RCMap.insert(std::make_pair(Slot, RC)); } else { // Use the largest common subclass register class. |