| 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
|
|
|
|
|
|
|