OLD | NEW |
1 // Copyright 2016 the V8 project authors. All rights reserved. | 1 // Copyright 2016 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/interpreter/bytecode-register-optimizer.h" | 5 #include "src/interpreter/bytecode-register-optimizer.h" |
6 | 6 |
7 namespace v8 { | 7 namespace v8 { |
8 namespace internal { | 8 namespace internal { |
9 namespace interpreter { | 9 namespace interpreter { |
10 | 10 |
| 11 const uint32_t BytecodeRegisterOptimizer::kInvalidEquivalenceId; |
| 12 |
11 // A class for tracking the state of a register. This class tracks | 13 // A class for tracking the state of a register. This class tracks |
12 // which equivalence set a register is a member of and also whether a | 14 // which equivalence set a register is a member of and also whether a |
13 // register is materialized in the bytecode stream. | 15 // register is materialized in the bytecode stream. |
14 class BytecodeRegisterOptimizer::RegisterInfo final : public ZoneObject { | 16 class BytecodeRegisterOptimizer::RegisterInfo final : public ZoneObject { |
15 public: | 17 public: |
16 RegisterInfo(Register reg, uint32_t equivalence_id, bool materialized) | 18 RegisterInfo(Register reg, uint32_t equivalence_id, bool materialized) |
17 : register_(reg), | 19 : register_(reg), |
18 equivalence_id_(equivalence_id), | 20 equivalence_id_(equivalence_id), |
19 materialized_(materialized), | 21 materialized_(materialized), |
20 next_(this), | 22 next_(this), |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
61 | 63 |
62 // Equivalence set pointers. | 64 // Equivalence set pointers. |
63 RegisterInfo* next_; | 65 RegisterInfo* next_; |
64 RegisterInfo* prev_; | 66 RegisterInfo* prev_; |
65 | 67 |
66 DISALLOW_COPY_AND_ASSIGN(RegisterInfo); | 68 DISALLOW_COPY_AND_ASSIGN(RegisterInfo); |
67 }; | 69 }; |
68 | 70 |
69 void BytecodeRegisterOptimizer::RegisterInfo::AddToEquivalenceSetOf( | 71 void BytecodeRegisterOptimizer::RegisterInfo::AddToEquivalenceSetOf( |
70 RegisterInfo* info) { | 72 RegisterInfo* info) { |
| 73 DCHECK_NE(kInvalidEquivalenceId, info->equivalence_id()); |
71 // Fix old list | 74 // Fix old list |
72 next_->prev_ = prev_; | 75 next_->prev_ = prev_; |
73 prev_->next_ = next_; | 76 prev_->next_ = next_; |
74 // Add to new list. | 77 // Add to new list. |
75 next_ = info->next_; | 78 next_ = info->next_; |
76 prev_ = info; | 79 prev_ = info; |
77 prev_->next_ = this; | 80 prev_->next_ = this; |
78 next_->prev_ = this; | 81 next_->prev_ = this; |
79 set_equivalence_id(info->equivalence_id()); | 82 set_equivalence_id(info->equivalence_id()); |
80 set_materialized(false); | 83 set_materialized(false); |
(...skipping 513 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
594 if (info->materialized()) { | 597 if (info->materialized()) { |
595 CreateMaterializedEquivalent(info); | 598 CreateMaterializedEquivalent(info); |
596 } | 599 } |
597 info->MoveToNewEquivalenceSet(kInvalidEquivalenceId, false); | 600 info->MoveToNewEquivalenceSet(kInvalidEquivalenceId, false); |
598 } | 601 } |
599 } | 602 } |
600 | 603 |
601 } // namespace interpreter | 604 } // namespace interpreter |
602 } // namespace internal | 605 } // namespace internal |
603 } // namespace v8 | 606 } // namespace v8 |
OLD | NEW |