summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen/LiveStackAnalysis.cpp
diff options
context:
space:
mode:
authorDavid Blaikie <dblaikie@gmail.com>2015-03-04 01:20:33 +0000
committerDavid Blaikie <dblaikie@gmail.com>2015-03-04 01:20:33 +0000
commited40025f374446ee4862070b154200ca7cd7f813 (patch)
treeb20964ce9fc838bd58ad4a4794bef387c04380f4 /llvm/lib/CodeGen/LiveStackAnalysis.cpp
parentafc703da525ddd229450f2f0651c84349abb2ea4 (diff)
downloadbcm5719-llvm-ed40025f374446ee4862070b154200ca7cd7f813.tar.gz
bcm5719-llvm-ed40025f374446ee4862070b154200ca7cd7f813.zip
Recommit r231168: unique_ptrify LiveRange::segmentSet
GCC 4.7's libstdc++ doesn't have std::map::emplace, but it does have std::unordered_map::emplace, and the use case here doesn't appear to need ordering. The container has been changed in a separate/precursor patch, and now this patch should hopefully build cleanly even with GCC 4.7. & then I realized the order of the container did matter, so extra handling of ordering was added in r231189. Original commit message: 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: 231192
Diffstat (limited to 'llvm/lib/CodeGen/LiveStackAnalysis.cpp')
-rw-r--r--llvm/lib/CodeGen/LiveStackAnalysis.cpp6
1 files changed, 4 insertions, 2 deletions
diff --git a/llvm/lib/CodeGen/LiveStackAnalysis.cpp b/llvm/lib/CodeGen/LiveStackAnalysis.cpp
index 8a6ac251ab2..5c9c679e97b 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.
OpenPOWER on IntegriCloud