Commit d940690b authored by mtrofin's avatar mtrofin Committed by Commit bot

[turbofan] Live Range unit tests.

Unit tests for split/splinter/merge.

BUG=

Review URL: https://codereview.chromium.org/1315113003

Cr-Commit-Position: refs/heads/master@{#30475}
parent 30ae0417
......@@ -437,6 +437,7 @@ LiveRange* LiveRange::SplitAt(LifetimePosition position, Zone* zone) {
void LiveRange::DetachAt(LifetimePosition position, LiveRange* result,
Zone* zone) {
DCHECK(Start() < position);
DCHECK(End() > position);
DCHECK(result->IsEmpty());
// Find the last interval that ends before the position. If the
// position is contained in one of the intervals in the chain, we
......@@ -878,7 +879,7 @@ void TopLevelLiveRange::SetSplinteredFrom(TopLevelLiveRange* splinter_parent) {
DCHECK(splinter_parent->Start() < Start());
splintered_from_ = splinter_parent;
if (!HasSpillOperand()) {
if (!HasSpillOperand() && splinter_parent->spill_range_ != nullptr) {
SetSpillRange(splinter_parent->spill_range_);
}
}
......
......@@ -17,7 +17,8 @@ namespace compiler {
// support for C++ features such as instantiation lists, on OS X and Android.
class TestRangeBuilder {
public:
explicit TestRangeBuilder(Zone* zone) : id_(-1), pairs_(), zone_(zone) {}
explicit TestRangeBuilder(Zone* zone)
: id_(-1), pairs_(), uses_(), zone_(zone) {}
TestRangeBuilder& Id(int id) {
id_ = id;
......@@ -28,9 +29,16 @@ class TestRangeBuilder {
return *this;
}
LiveRange* Build(int start, int end) { return Add(start, end).Build(); }
TestRangeBuilder& AddUse(int pos) {
uses_.insert(pos);
return *this;
}
LiveRange* Build() {
TopLevelLiveRange* Build(int start, int end) {
return Add(start, end).Build();
}
TopLevelLiveRange* Build() {
TopLevelLiveRange* range =
new (zone_) TopLevelLiveRange(id_, MachineType::kRepTagged);
// Traverse the provided interval specifications backwards, because that is
......@@ -42,6 +50,12 @@ class TestRangeBuilder {
CHECK(start < end);
range->AddUseInterval(start, end, zone_);
}
for (int pos : uses_) {
UsePosition* use_position =
new (zone_) UsePosition(LifetimePosition::FromInt(pos), nullptr,
nullptr, UsePositionHintType::kNone);
range->AddUsePosition(use_position);
}
pairs_.clear();
return range;
......@@ -52,6 +66,7 @@ class TestRangeBuilder {
typedef std::vector<Interval> IntervalList;
int id_;
IntervalList pairs_;
std::set<int> uses_;
Zone* zone_;
};
......
This diff is collapsed.
......@@ -70,6 +70,7 @@
'compiler/js-type-feedback-unittest.cc',
'compiler/linkage-tail-call-unittest.cc',
'compiler/liveness-analyzer-unittest.cc',
'compiler/live-range-unittest.cc',
'compiler/load-elimination-unittest.cc',
'compiler/loop-peeling-unittest.cc',
'compiler/machine-operator-reducer-unittest.cc',
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment