[turbofan] Break dependency on RegisterAllocationData from Merge.
authormtrofin <mtrofin@chromium.org>
Mon, 31 Aug 2015 10:45:13 +0000 (03:45 -0700)
committerCommit bot <commit-bot@chromium.org>
Mon, 31 Aug 2015 10:45:22 +0000 (10:45 +0000)
Found this while working on the unit tests for split/splinter/merge. The
dependency is unnecessary and hinders testability.

BUG=

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

Cr-Commit-Position: refs/heads/master@{#30465}

src/compiler/live-range-separator.cc
src/compiler/register-allocator.cc
src/compiler/register-allocator.h

index a80259535a955a2c1cc0323cb84a8ae26808dca1..f34b0d41ce5a3e69a3b66b9e283d7405df936022 100644 (file)
@@ -153,7 +153,9 @@ void LiveRangeMerger::Merge() {
     }
     TopLevelLiveRange *splinter_parent = range->splintered_from();
 
-    splinter_parent->Merge(range, data());
+    int to_remove = range->vreg();
+    splinter_parent->Merge(range, data()->allocation_zone());
+    data()->live_ranges()[to_remove] = nullptr;
   }
 }
 
index 563c9a276d8d0da93cf1b7b0791f86566e22029b..eea59004307aa9405a2d2637d681a1a188f085f8 100644 (file)
@@ -897,13 +897,10 @@ void TopLevelLiveRange::UpdateSpillRangePostMerge(TopLevelLiveRange* merged) {
 }
 
 
-void TopLevelLiveRange::Merge(TopLevelLiveRange* other,
-                              RegisterAllocationData* data) {
+void TopLevelLiveRange::Merge(TopLevelLiveRange* other, Zone* zone) {
   DCHECK(Start() < other->Start());
   DCHECK(other->splintered_from() == this);
 
-  data->live_ranges()[other->vreg()] = nullptr;
-
   LiveRange* last_other = other->last_child();
   LiveRange* last_me = last_child();
 
@@ -929,8 +926,7 @@ void TopLevelLiveRange::Merge(TopLevelLiveRange* other,
   // register allocation splitting.
   LiveRange* after = last_insertion_point_->next();
   if (last_insertion_point_->End() > other->Start()) {
-    LiveRange* new_after =
-        last_insertion_point_->SplitAt(other->Start(), data->allocation_zone());
+    LiveRange* new_after = last_insertion_point_->SplitAt(other->Start(), zone);
     new_after->set_spilled(last_insertion_point_->spilled());
     if (!new_after->spilled())
       new_after->set_assigned_register(
index cffe54778ac33ae2e337edf58bc1e135bdc3093d..9346fa65adeb89aa780b983baf2635114990f223 100644 (file)
@@ -471,7 +471,7 @@ class TopLevelLiveRange final : public LiveRange {
 
   // Assuming other was splintered from this range, embeds other and its
   // children as part of the children sequence of this range.
-  void Merge(TopLevelLiveRange* other, RegisterAllocationData* data);
+  void Merge(TopLevelLiveRange* other, Zone* zone);
 
   // Spill range management.
   void SetSpillRange(SpillRange* spill_range);