diff options
author | David Blaikie <dblaikie@gmail.com> | 2015-03-04 00:15:02 +0000 |
---|---|---|
committer | David Blaikie <dblaikie@gmail.com> | 2015-03-04 00:15:02 +0000 |
commit | 90c59ccae65e811e666743d5be162f7325f5b0e3 (patch) | |
tree | 897f932ef5a576fbffd6fe60c603eb4597be65cf | |
parent | 6da37857d1bc110365732322b6cc92c892c3b968 (diff) | |
download | bcm5719-llvm-90c59ccae65e811e666743d5be162f7325f5b0e3.tar.gz bcm5719-llvm-90c59ccae65e811e666743d5be162f7325f5b0e3.zip |
Revert "unique_ptrify LiveRange::segmentSet"
Apparently something does care about ordering of LiveIntervals... so
revert all that stuff (r231175, r231176, r231177) & take some time to
re-evaluate.
llvm-svn: 231184
-rw-r--r-- | llvm/include/llvm/CodeGen/LiveInterval.h | 16 | ||||
-rw-r--r-- | llvm/include/llvm/CodeGen/LiveStackAnalysis.h | 3 | ||||
-rw-r--r-- | llvm/lib/CodeGen/LiveInterval.cpp | 1 | ||||
-rw-r--r-- | llvm/lib/CodeGen/LiveStackAnalysis.cpp | 6 |
4 files changed, 15 insertions, 11 deletions
diff --git a/llvm/include/llvm/CodeGen/LiveInterval.h b/llvm/include/llvm/CodeGen/LiveInterval.h index 9b8b91c9b80..21634cbd155 100644 --- a/llvm/include/llvm/CodeGen/LiveInterval.h +++ b/llvm/include/llvm/CodeGen/LiveInterval.h @@ -199,7 +199,7 @@ namespace llvm { // of live ranges of physical registers in computeRegUnitRange. // After that the set is flushed to the segment vector and deleted. typedef std::set<Segment> SegmentSet; - std::unique_ptr<SegmentSet> segmentSet; + SegmentSet *segmentSet; typedef Segments::iterator iterator; iterator begin() { return segments.begin(); } @@ -218,13 +218,15 @@ namespace llvm { const_vni_iterator vni_end() const { return valnos.end(); } /// Constructs a new LiveRange object. - LiveRange(bool UseSegmentSet = false) - : segmentSet(UseSegmentSet ? llvm::make_unique<SegmentSet>() - : nullptr) {} + LiveRange(bool UseSegmentSet = false) : segmentSet(nullptr) { + if (UseSegmentSet) + segmentSet = new SegmentSet(); + } /// Constructs a new LiveRange object by copying segments and valnos from /// another LiveRange. - LiveRange(const LiveRange &Other, BumpPtrAllocator &Allocator) { + LiveRange(const LiveRange &Other, BumpPtrAllocator &Allocator) + : segmentSet(nullptr) { assert(Other.segmentSet == nullptr && "Copying of LiveRanges with active SegmentSets is not supported"); @@ -238,6 +240,8 @@ namespace llvm { } } + ~LiveRange() { delete segmentSet; } + /// advanceTo - Advance the specified iterator to point to the Segment /// containing the specified position, or end() if the position is past the /// end of the range. If no Segment contains this position, but the @@ -741,6 +745,8 @@ namespace llvm { #endif private: + LiveInterval& operator=(const LiveInterval& rhs) = delete; + /// Appends @p Range to SubRanges list. void appendSubRange(SubRange *Range) { Range->Next = SubRanges; diff --git a/llvm/include/llvm/CodeGen/LiveStackAnalysis.h b/llvm/include/llvm/CodeGen/LiveStackAnalysis.h index f495507c66e..df683983fa5 100644 --- a/llvm/include/llvm/CodeGen/LiveStackAnalysis.h +++ b/llvm/include/llvm/CodeGen/LiveStackAnalysis.h @@ -21,7 +21,6 @@ #include "llvm/Support/Allocator.h" #include "llvm/Target/TargetRegisterInfo.h" #include <map> -#include <unordered_map> namespace llvm { @@ -34,7 +33,7 @@ namespace llvm { /// S2IMap - Stack slot indices to live interval mapping. /// - typedef std::unordered_map<int, LiveInterval> SS2IntervalMap; + typedef std::map<int, LiveInterval> SS2IntervalMap; SS2IntervalMap S2IMap; /// S2RCMap - Stack slot indices to register class mapping. diff --git a/llvm/lib/CodeGen/LiveInterval.cpp b/llvm/lib/CodeGen/LiveInterval.cpp index e1aee4d898a..d60b0b1a504 100644 --- a/llvm/lib/CodeGen/LiveInterval.cpp +++ b/llvm/lib/CodeGen/LiveInterval.cpp @@ -743,6 +743,7 @@ void LiveRange::flushSegmentSet() { segments.empty() && "segment set can be used only initially before switching to the array"); segments.append(segmentSet->begin(), segmentSet->end()); + delete segmentSet; segmentSet = nullptr; verify(); } diff --git a/llvm/lib/CodeGen/LiveStackAnalysis.cpp b/llvm/lib/CodeGen/LiveStackAnalysis.cpp index 5c9c679e97b..8a6ac251ab2 100644 --- a/llvm/lib/CodeGen/LiveStackAnalysis.cpp +++ b/llvm/lib/CodeGen/LiveStackAnalysis.cpp @@ -61,10 +61,8 @@ 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.emplace(std::piecewise_construct, std::forward_as_tuple(Slot), - std::forward_as_tuple( - TargetRegisterInfo::index2StackSlot(Slot), 0.0F)) - .first; + I = S2IMap.insert(I, std::make_pair(Slot, + LiveInterval(TargetRegisterInfo::index2StackSlot(Slot), 0.0F))); S2RCMap.insert(std::make_pair(Slot, RC)); } else { // Use the largest common subclass register class. |