OLD | NEW |
1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 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/compiler/node.h" | 5 #include "src/compiler/node.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 namespace v8 { | 9 namespace v8 { |
10 namespace internal { | 10 namespace internal { |
(...skipping 21 matching lines...) Expand all Loading... |
32 use->from = result; | 32 use->from = result; |
33 to->AppendUse(use); | 33 to->AppendUse(use); |
34 ++use; | 34 ++use; |
35 ++input; | 35 ++input; |
36 } | 36 } |
37 return result; | 37 return result; |
38 } | 38 } |
39 | 39 |
40 | 40 |
41 void Node::Kill() { | 41 void Node::Kill() { |
42 DCHECK_NOT_NULL(op()); | 42 DCHECK(op()); |
43 RemoveAllInputs(); | 43 RemoveAllInputs(); |
44 DCHECK(uses().empty()); | 44 DCHECK(uses().empty()); |
45 } | 45 } |
46 | 46 |
47 | 47 |
48 void Node::AppendInput(Zone* zone, Node* new_to) { | 48 void Node::AppendInput(Zone* zone, Node* new_to) { |
49 DCHECK_NOT_NULL(zone); | 49 DCHECK(zone); |
50 DCHECK_NOT_NULL(new_to); | 50 DCHECK(new_to); |
51 Use* new_use = new (zone) Use; | 51 Use* new_use = new (zone) Use; |
52 Input new_input; | 52 Input new_input; |
53 new_input.to = new_to; | 53 new_input.to = new_to; |
54 new_input.use = new_use; | 54 new_input.use = new_use; |
55 if (reserved_input_count() > 0) { | 55 if (reserved_input_count() > 0) { |
56 DCHECK(!has_appendable_inputs()); | 56 DCHECK(!has_appendable_inputs()); |
57 set_reserved_input_count(reserved_input_count() - 1); | 57 set_reserved_input_count(reserved_input_count() - 1); |
58 inputs_.static_[input_count()] = new_input; | 58 inputs_.static_[input_count()] = new_input; |
59 } else { | 59 } else { |
60 EnsureAppendableInputs(zone); | 60 EnsureAppendableInputs(zone); |
61 inputs_.appendable_->push_back(new_input); | 61 inputs_.appendable_->push_back(new_input); |
62 } | 62 } |
63 new_use->input_index = input_count(); | 63 new_use->input_index = input_count(); |
64 new_use->from = this; | 64 new_use->from = this; |
65 new_to->AppendUse(new_use); | 65 new_to->AppendUse(new_use); |
66 set_input_count(input_count() + 1); | 66 set_input_count(input_count() + 1); |
67 } | 67 } |
68 | 68 |
69 | 69 |
70 void Node::InsertInput(Zone* zone, int index, Node* new_to) { | 70 void Node::InsertInput(Zone* zone, int index, Node* new_to) { |
71 DCHECK_NOT_NULL(zone); | 71 DCHECK(zone); |
72 DCHECK_LE(0, index); | 72 DCHECK_LE(0, index); |
73 DCHECK_LT(index, InputCount()); | 73 DCHECK_LT(index, InputCount()); |
74 AppendInput(zone, InputAt(InputCount() - 1)); | 74 AppendInput(zone, InputAt(InputCount() - 1)); |
75 for (int i = InputCount() - 1; i > index; --i) { | 75 for (int i = InputCount() - 1; i > index; --i) { |
76 ReplaceInput(i, InputAt(i - 1)); | 76 ReplaceInput(i, InputAt(i - 1)); |
77 } | 77 } |
78 ReplaceInput(index, new_to); | 78 ReplaceInput(index, new_to); |
79 } | 79 } |
80 | 80 |
81 | 81 |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
127 } | 127 } |
128 return use->from; | 128 return use->from; |
129 } | 129 } |
130 | 130 |
131 | 131 |
132 void Node::ReplaceUses(Node* replace_to) { | 132 void Node::ReplaceUses(Node* replace_to) { |
133 for (Use* use = first_use_; use; use = use->next) { | 133 for (Use* use = first_use_; use; use = use->next) { |
134 use->from->GetInputRecordPtr(use->input_index)->to = replace_to; | 134 use->from->GetInputRecordPtr(use->input_index)->to = replace_to; |
135 } | 135 } |
136 if (!replace_to->last_use_) { | 136 if (!replace_to->last_use_) { |
137 DCHECK_EQ(nullptr, replace_to->first_use_); | 137 DCHECK(!replace_to->first_use_); |
138 replace_to->first_use_ = first_use_; | 138 replace_to->first_use_ = first_use_; |
139 replace_to->last_use_ = last_use_; | 139 replace_to->last_use_ = last_use_; |
140 } else if (first_use_) { | 140 } else if (first_use_) { |
141 DCHECK_NOT_NULL(replace_to->first_use_); | 141 DCHECK(replace_to->first_use_); |
142 replace_to->last_use_->next = first_use_; | 142 replace_to->last_use_->next = first_use_; |
143 first_use_->prev = replace_to->last_use_; | 143 first_use_->prev = replace_to->last_use_; |
144 replace_to->last_use_ = last_use_; | 144 replace_to->last_use_ = last_use_; |
145 } | 145 } |
146 first_use_ = nullptr; | 146 first_use_ = nullptr; |
147 last_use_ = nullptr; | 147 last_use_ = nullptr; |
148 } | 148 } |
149 | 149 |
150 | 150 |
151 void Node::Input::Update(Node* new_to) { | 151 void Node::Input::Update(Node* new_to) { |
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
267 ++(*this); | 267 ++(*this); |
268 return result; | 268 return result; |
269 } | 269 } |
270 | 270 |
271 | 271 |
272 bool Node::Uses::empty() const { return begin() == end(); } | 272 bool Node::Uses::empty() const { return begin() == end(); } |
273 | 273 |
274 } // namespace compiler | 274 } // namespace compiler |
275 } // namespace internal | 275 } // namespace internal |
276 } // namespace v8 | 276 } // namespace v8 |
OLD | NEW |