OLD | NEW |
1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "src/base/adapters.h" | 5 #include "src/base/adapters.h" |
6 #include "src/compiler/linkage.h" | 6 #include "src/compiler/linkage.h" |
7 #include "src/compiler/register-allocator.h" | 7 #include "src/compiler/register-allocator.h" |
8 #include "src/string-stream.h" | 8 #include "src/string-stream.h" |
9 | 9 |
10 namespace v8 { | 10 namespace v8 { |
(...skipping 3070 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3081 // spill range. | 3081 // spill range. |
3082 LifetimePosition next_pos = range->Start(); | 3082 LifetimePosition next_pos = range->Start(); |
3083 if (next_pos.IsGapPosition()) next_pos = next_pos.NextStart(); | 3083 if (next_pos.IsGapPosition()) next_pos = next_pos.NextStart(); |
3084 UsePosition* pos = range->NextUsePositionRegisterIsBeneficial(next_pos); | 3084 UsePosition* pos = range->NextUsePositionRegisterIsBeneficial(next_pos); |
3085 if (pos == nullptr) { | 3085 if (pos == nullptr) { |
3086 SpillRange* spill_range = | 3086 SpillRange* spill_range = |
3087 range->TopLevel()->HasSpillRange() | 3087 range->TopLevel()->HasSpillRange() |
3088 ? range->TopLevel()->GetSpillRange() | 3088 ? range->TopLevel()->GetSpillRange() |
3089 : data()->AssignSpillRangeToLiveRange(range->TopLevel()); | 3089 : data()->AssignSpillRangeToLiveRange(range->TopLevel()); |
3090 bool merged = first_op_spill->TryMerge(spill_range); | 3090 bool merged = first_op_spill->TryMerge(spill_range); |
3091 CHECK(merged); | 3091 if (!merged) return false; |
3092 Spill(range); | 3092 Spill(range); |
3093 return true; | 3093 return true; |
3094 } else if (pos->pos() > range->Start().NextStart()) { | 3094 } else if (pos->pos() > range->Start().NextStart()) { |
3095 SpillRange* spill_range = | 3095 SpillRange* spill_range = |
3096 range->TopLevel()->HasSpillRange() | 3096 range->TopLevel()->HasSpillRange() |
3097 ? range->TopLevel()->GetSpillRange() | 3097 ? range->TopLevel()->GetSpillRange() |
3098 : data()->AssignSpillRangeToLiveRange(range->TopLevel()); | 3098 : data()->AssignSpillRangeToLiveRange(range->TopLevel()); |
3099 bool merged = first_op_spill->TryMerge(spill_range); | 3099 bool merged = first_op_spill->TryMerge(spill_range); |
3100 CHECK(merged); | 3100 if (!merged) return false; |
3101 SpillBetween(range, range->Start(), pos->pos()); | 3101 SpillBetween(range, range->Start(), pos->pos()); |
3102 DCHECK(UnhandledIsSorted()); | 3102 DCHECK(UnhandledIsSorted()); |
3103 return true; | 3103 return true; |
3104 } | 3104 } |
3105 return false; | 3105 return false; |
3106 } | 3106 } |
3107 | 3107 |
3108 | 3108 |
3109 void LinearScanAllocator::SpillAfter(LiveRange* range, LifetimePosition pos) { | 3109 void LinearScanAllocator::SpillAfter(LiveRange* range, LifetimePosition pos) { |
3110 LiveRange* second_part = SplitRangeAt(range, pos); | 3110 LiveRange* second_part = SplitRangeAt(range, pos); |
(...skipping 546 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3657 } | 3657 } |
3658 } | 3658 } |
3659 } | 3659 } |
3660 } | 3660 } |
3661 } | 3661 } |
3662 | 3662 |
3663 | 3663 |
3664 } // namespace compiler | 3664 } // namespace compiler |
3665 } // namespace internal | 3665 } // namespace internal |
3666 } // namespace v8 | 3666 } // namespace v8 |
OLD | NEW |