| 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/v8.h" | 5 #include "src/v8.h" |
| 6 #include "test/cctest/cctest.h" | 6 #include "test/cctest/cctest.h" |
| 7 | 7 |
| 8 #include "src/base/bits.h" | 8 #include "src/base/bits.h" |
| 9 #include "src/compiler/common-operator.h" | 9 #include "src/compiler/common-operator.h" |
| 10 #include "src/compiler/control-reducer.h" | 10 #include "src/compiler/control-reducer.h" |
| (...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 123 | 123 |
| 124 Node* EffectPhi(Node* a, Node* b, Node* c) { | 124 Node* EffectPhi(Node* a, Node* b, Node* c) { |
| 125 return SetSelfReferences(graph.NewNode(op(3, true), a, b, c, start)); | 125 return SetSelfReferences(graph.NewNode(op(3, true), a, b, c, start)); |
| 126 } | 126 } |
| 127 | 127 |
| 128 Node* EffectPhi(Node* a, Node* b, Node* c, Node* d) { | 128 Node* EffectPhi(Node* a, Node* b, Node* c, Node* d) { |
| 129 return SetSelfReferences(graph.NewNode(op(4, true), a, b, c, d, start)); | 129 return SetSelfReferences(graph.NewNode(op(4, true), a, b, c, d, start)); |
| 130 } | 130 } |
| 131 | 131 |
| 132 Node* SetSelfReferences(Node* node) { | 132 Node* SetSelfReferences(Node* node) { |
| 133 Node::Inputs inputs = node->inputs(); | 133 for (Edge edge : node->input_edges()) { |
| 134 for (Node::Inputs::iterator iter(inputs.begin()); iter != inputs.end(); | 134 if (edge.to() == self) node->ReplaceInput(edge.index(), node); |
| 135 ++iter) { | |
| 136 Node* input = *iter; | |
| 137 if (input == self) node->ReplaceInput(iter.index(), node); | |
| 138 } | 135 } |
| 139 return node; | 136 return node; |
| 140 } | 137 } |
| 141 | 138 |
| 142 const Operator* op(int count, bool effect) { | 139 const Operator* op(int count, bool effect) { |
| 143 return effect ? common.EffectPhi(count) : common.Phi(kMachAnyTagged, count); | 140 return effect ? common.EffectPhi(count) : common.Phi(kMachAnyTagged, count); |
| 144 } | 141 } |
| 145 | 142 |
| 146 void Trim() { ControlReducer::TrimGraph(main_zone(), &jsgraph); } | 143 void Trim() { ControlReducer::TrimGraph(main_zone(), &jsgraph); } |
| 147 | 144 |
| (...skipping 1524 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1672 | 1669 |
| 1673 Node* ret = R.Return(d1.phi, R.start, d1.merge); | 1670 Node* ret = R.Return(d1.phi, R.start, d1.merge); |
| 1674 | 1671 |
| 1675 R.ReduceGraph(); // d1 gets folded true. | 1672 R.ReduceGraph(); // d1 gets folded true. |
| 1676 | 1673 |
| 1677 CheckInputs(ret, y2, R.start, R.start); | 1674 CheckInputs(ret, y2, R.start, R.start); |
| 1678 CheckDeadDiamond(d1); | 1675 CheckDeadDiamond(d1); |
| 1679 CheckDeadDiamond(d2); | 1676 CheckDeadDiamond(d2); |
| 1680 CheckDeadDiamond(d3); | 1677 CheckDeadDiamond(d3); |
| 1681 } | 1678 } |
| OLD | NEW |