Index: test/unittests/compiler/live-range-builder.h |
diff --git a/test/unittests/compiler/live-range-builder.h b/test/unittests/compiler/live-range-builder.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..988716d8eb3c966cde2f34d9d31fe0a46926cd63 |
--- /dev/null |
+++ b/test/unittests/compiler/live-range-builder.h |
@@ -0,0 +1,63 @@ |
+// Copyright 2015 the V8 project authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef V8_LIVE_RANGE_BUILDER_H_ |
+#define V8_LIVE_RANGE_BUILDER_H_ |
+ |
+#include "src/compiler/register-allocator.h" |
+ |
+namespace v8 { |
+namespace internal { |
+namespace compiler { |
+ |
+ |
+// Utility offering shorthand syntax for building up a range by providing its ID |
+// and pairs (start, end) specifying intervals. Circumvents current incomplete |
+// 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) {} |
+ |
+ TestRangeBuilder& Id(int id) { |
+ id_ = id; |
+ return *this; |
+ } |
+ TestRangeBuilder& Add(int start, int end) { |
+ pairs_.push_back({start, end}); |
+ return *this; |
+ } |
+ |
+ LiveRange* Build(int start, int end) { return Add(start, end).Build(); } |
+ |
+ LiveRange* Build() { |
+ TopLevelLiveRange* range = |
+ new (zone_) TopLevelLiveRange(id_, MachineType::kRepTagged); |
+ // Traverse the provided interval specifications backwards, because that is |
+ // what LiveRange expects. |
+ for (int i = static_cast<int>(pairs_.size()) - 1; i >= 0; --i) { |
+ Interval pair = pairs_[i]; |
+ LifetimePosition start = LifetimePosition::FromInt(pair.first); |
+ LifetimePosition end = LifetimePosition::FromInt(pair.second); |
+ CHECK(start < end); |
+ range->AddUseInterval(start, end, zone_); |
+ } |
+ |
+ pairs_.clear(); |
+ return range; |
+ } |
+ |
+ private: |
+ typedef std::pair<int, int> Interval; |
+ typedef std::vector<Interval> IntervalList; |
+ int id_; |
+ IntervalList pairs_; |
+ Zone* zone_; |
+}; |
+ |
+ |
+} // namespace compiler |
+} // namespace internal |
+} // namespace v8 |
+ |
+#endif // V8_LIVE_RANGE_BUILDER_H_ |