Index: src/compiler/live-range-separator.cc |
diff --git a/src/compiler/live-range-separator.cc b/src/compiler/live-range-separator.cc |
index e3cd0a3137deea497aefa22c14b883a99b4c830c..db655939062bb7510d3b44c081a1c3c89f02cff4 100644 |
--- a/src/compiler/live-range-separator.cc |
+++ b/src/compiler/live-range-separator.cc |
@@ -58,6 +58,15 @@ void CreateSplinter(TopLevelLiveRange *range, RegisterAllocationData *data, |
} |
} |
+void SetSlotUse(TopLevelLiveRange *range) { |
+ range->set_has_slot_use(false); |
+ for (const UsePosition *pos = range->first_pos(); |
+ !range->has_slot_use() && pos != nullptr; pos = pos->next()) { |
+ if (pos->type() == UsePositionType::kRequiresSlot) { |
+ range->set_has_slot_use(true); |
+ } |
+ } |
+} |
void SplinterLiveRange(TopLevelLiveRange *range, RegisterAllocationData *data) { |
const InstructionSequence *code = data->code(); |
@@ -99,7 +108,14 @@ void SplinterLiveRange(TopLevelLiveRange *range, RegisterAllocationData *data) { |
if (first_cut.IsValid()) { |
CreateSplinter(range, data, first_cut, last_cut); |
} |
+ |
+ // Redo has_slot_use |
+ if (range->has_slot_use() && range->splinter() != nullptr) { |
+ SetSlotUse(range); |
+ SetSlotUse(range->splinter()); |
+ } |
} |
+ |
} // namespace |