| 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 #ifndef V8_COMPILER_GENERIC_NODE_INL_H_ | 5 #ifndef V8_COMPILER_GENERIC_NODE_INL_H_ |
| 6 #define V8_COMPILER_GENERIC_NODE_INL_H_ | 6 #define V8_COMPILER_GENERIC_NODE_INL_H_ |
| 7 | 7 |
| 8 #include "src/v8.h" | 8 #include "src/v8.h" |
| 9 | 9 |
| 10 #include "src/compiler/generic-graph.h" | 10 #include "src/compiler/generic-graph.h" |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 42 } | 42 } |
| 43 | 43 |
| 44 template <class B, class S> | 44 template <class B, class S> |
| 45 inline typename GenericNode<B, S>::Inputs::iterator | 45 inline typename GenericNode<B, S>::Inputs::iterator |
| 46 GenericNode<B, S>::Inputs::end() { | 46 GenericNode<B, S>::Inputs::end() { |
| 47 return typename GenericNode<B, S>::Inputs::iterator( | 47 return typename GenericNode<B, S>::Inputs::iterator( |
| 48 this->node_, this->node_->InputCount()); | 48 this->node_, this->node_->InputCount()); |
| 49 } | 49 } |
| 50 | 50 |
| 51 template <class B, class S> | 51 template <class B, class S> |
| 52 inline typename GenericNode<B, S>::InputEdges::iterator |
| 53 GenericNode<B, S>::InputEdges::begin() { |
| 54 return typename GenericNode<B, S>::InputEdges::iterator(this->node_, 0); |
| 55 } |
| 56 |
| 57 template <class B, class S> |
| 58 inline typename GenericNode<B, S>::InputEdges::iterator |
| 59 GenericNode<B, S>::InputEdges::end() { |
| 60 return typename GenericNode<B, S>::InputEdges::iterator( |
| 61 this->node_, this->node_->InputCount()); |
| 62 } |
| 63 |
| 64 template <class B, class S> |
| 52 inline typename GenericNode<B, S>::Uses::iterator | 65 inline typename GenericNode<B, S>::Uses::iterator |
| 53 GenericNode<B, S>::Uses::begin() { | 66 GenericNode<B, S>::Uses::begin() { |
| 54 return typename GenericNode<B, S>::Uses::iterator(this->node_); | 67 return typename GenericNode<B, S>::Uses::iterator(this->node_); |
| 55 } | 68 } |
| 56 | 69 |
| 57 template <class B, class S> | 70 template <class B, class S> |
| 58 inline typename GenericNode<B, S>::Uses::iterator | 71 inline typename GenericNode<B, S>::Uses::iterator |
| 59 GenericNode<B, S>::Uses::end() { | 72 GenericNode<B, S>::Uses::end() { |
| 60 return typename GenericNode<B, S>::Uses::iterator(); | 73 return typename GenericNode<B, S>::Uses::iterator(); |
| 61 } | 74 } |
| 62 | 75 |
| 63 template <class B, class S> | 76 template <class B, class S> |
| 77 inline typename GenericNode<B, S>::UseEdges::iterator |
| 78 GenericNode<B, S>::UseEdges::begin() { |
| 79 return typename GenericNode<B, S>::UseEdges::iterator(this->node_); |
| 80 } |
| 81 |
| 82 template <class B, class S> |
| 83 inline typename GenericNode<B, S>::UseEdges::iterator |
| 84 GenericNode<B, S>::UseEdges::end() { |
| 85 return typename GenericNode<B, S>::UseEdges::iterator(); |
| 86 } |
| 87 |
| 88 template <class B, class S> |
| 64 void GenericNode<B, S>::ReplaceUses(GenericNode* replace_to) { | 89 void GenericNode<B, S>::ReplaceUses(GenericNode* replace_to) { |
| 65 for (Use* use = first_use_; use != NULL; use = use->next) { | 90 for (Use* use = first_use_; use != NULL; use = use->next) { |
| 66 use->from->GetInputRecordPtr(use->input_index)->to = replace_to; | 91 use->from->GetInputRecordPtr(use->input_index)->to = replace_to; |
| 67 } | 92 } |
| 68 if (replace_to->last_use_ == NULL) { | 93 if (replace_to->last_use_ == NULL) { |
| 69 DCHECK_EQ(NULL, replace_to->first_use_); | 94 DCHECK_EQ(NULL, replace_to->first_use_); |
| 70 replace_to->first_use_ = first_use_; | 95 replace_to->first_use_ = first_use_; |
| 71 replace_to->last_use_ = last_use_; | 96 replace_to->last_use_ = last_use_; |
| 72 } else if (first_use_ != NULL) { | 97 } else if (first_use_ != NULL) { |
| 73 DCHECK_NE(NULL, replace_to->first_use_); | 98 DCHECK_NE(NULL, replace_to->first_use_); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 91 RemoveUse(use); | 116 RemoveUse(use); |
| 92 replace_to->AppendUse(use); | 117 replace_to->AppendUse(use); |
| 93 use->from->GetInputRecordPtr(use->input_index)->to = replace_to; | 118 use->from->GetInputRecordPtr(use->input_index)->to = replace_to; |
| 94 } | 119 } |
| 95 use = next; | 120 use = next; |
| 96 } | 121 } |
| 97 } | 122 } |
| 98 | 123 |
| 99 template <class B, class S> | 124 template <class B, class S> |
| 100 void GenericNode<B, S>::RemoveAllInputs() { | 125 void GenericNode<B, S>::RemoveAllInputs() { |
| 101 for (typename Inputs::iterator iter(inputs().begin()); iter != inputs().end(); | 126 for (auto edge : input_edges()) { |
| 102 ++iter) { | 127 edge.UpdateTo(NULL); |
| 103 iter.GetInput()->Update(NULL); | |
| 104 } | 128 } |
| 105 } | 129 } |
| 106 | 130 |
| 107 template <class B, class S> | 131 template <class B, class S> |
| 108 void GenericNode<B, S>::TrimInputCount(int new_input_count) { | 132 void GenericNode<B, S>::TrimInputCount(int new_input_count) { |
| 109 if (new_input_count == input_count_) return; // Nothing to do. | 133 if (new_input_count == input_count_) return; // Nothing to do. |
| 110 | 134 |
| 111 DCHECK(new_input_count < input_count_); | 135 DCHECK(new_input_count < input_count_); |
| 112 | 136 |
| 113 // Update inline inputs. | 137 // Update inline inputs. |
| (...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 258 ++use; | 282 ++use; |
| 259 ++input; | 283 ++input; |
| 260 } | 284 } |
| 261 return result; | 285 return result; |
| 262 } | 286 } |
| 263 } | 287 } |
| 264 } | 288 } |
| 265 } // namespace v8::internal::compiler | 289 } // namespace v8::internal::compiler |
| 266 | 290 |
| 267 #endif // V8_COMPILER_GENERIC_NODE_INL_H_ | 291 #endif // V8_COMPILER_GENERIC_NODE_INL_H_ |
| OLD | NEW |