| 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/code-factory.h" | 5 #include "src/code-factory.h" |
| 6 #include "src/compilation-dependencies.h" | 6 #include "src/compilation-dependencies.h" |
| 7 #include "src/compiler/access-builder.h" | 7 #include "src/compiler/access-builder.h" |
| 8 #include "src/compiler/js-graph.h" | 8 #include "src/compiler/js-graph.h" |
| 9 #include "src/compiler/js-typed-lowering.h" | 9 #include "src/compiler/js-typed-lowering.h" |
| 10 #include "src/compiler/linkage.h" | 10 #include "src/compiler/linkage.h" |
| (...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 140 return lowering_->Replace(value); | 140 return lowering_->Replace(value); |
| 141 } | 141 } |
| 142 return lowering_->Changed(node_); | 142 return lowering_->Changed(node_); |
| 143 } | 143 } |
| 144 | 144 |
| 145 Reduction ChangeToSpeculativeOperator(const Operator* op, Type* upper_bound) { | 145 Reduction ChangeToSpeculativeOperator(const Operator* op, Type* upper_bound) { |
| 146 DCHECK_EQ(1, op->EffectInputCount()); | 146 DCHECK_EQ(1, op->EffectInputCount()); |
| 147 DCHECK_EQ(1, op->EffectOutputCount()); | 147 DCHECK_EQ(1, op->EffectOutputCount()); |
| 148 DCHECK_EQ(false, OperatorProperties::HasContextInput(op)); | 148 DCHECK_EQ(false, OperatorProperties::HasContextInput(op)); |
| 149 DCHECK_EQ(1, op->ControlInputCount()); | 149 DCHECK_EQ(1, op->ControlInputCount()); |
| 150 DCHECK_EQ(1, op->ControlOutputCount()); | 150 DCHECK_EQ(0, op->ControlOutputCount()); |
| 151 DCHECK_EQ(0, OperatorProperties::GetFrameStateInputCount(op)); | 151 DCHECK_EQ(0, OperatorProperties::GetFrameStateInputCount(op)); |
| 152 DCHECK_EQ(2, op->ValueInputCount()); | 152 DCHECK_EQ(2, op->ValueInputCount()); |
| 153 | 153 |
| 154 DCHECK_EQ(1, node_->op()->EffectInputCount()); | 154 DCHECK_EQ(1, node_->op()->EffectInputCount()); |
| 155 DCHECK_EQ(1, node_->op()->EffectOutputCount()); | 155 DCHECK_EQ(1, node_->op()->EffectOutputCount()); |
| 156 DCHECK_EQ(1, node_->op()->ControlInputCount()); | 156 DCHECK_EQ(1, node_->op()->ControlInputCount()); |
| 157 DCHECK_LT(1, node_->op()->ControlOutputCount()); | 157 DCHECK_LT(1, node_->op()->ControlOutputCount()); |
| 158 DCHECK_EQ(2, OperatorProperties::GetFrameStateInputCount(node_->op())); | 158 DCHECK_EQ(2, OperatorProperties::GetFrameStateInputCount(node_->op())); |
| 159 DCHECK_EQ(2, node_->op()->ValueInputCount()); | 159 DCHECK_EQ(2, node_->op()->ValueInputCount()); |
| 160 | 160 |
| 161 // Reconnect the control output to bypass the IfSuccess node and | 161 // Reconnect the control output to bypass the IfSuccess node and |
| 162 // possibly disconnect from the IfException node. | 162 // possibly disconnect from the IfException node. |
| 163 for (Edge edge : node_->use_edges()) { | 163 for (Edge edge : node_->use_edges()) { |
| 164 Node* const user = edge.from(); | 164 Node* const user = edge.from(); |
| 165 DCHECK(!user->IsDead()); | 165 DCHECK(!user->IsDead()); |
| 166 if (NodeProperties::IsControlEdge(edge)) { | 166 if (NodeProperties::IsControlEdge(edge)) { |
| 167 if (user->opcode() == IrOpcode::kIfSuccess) { | 167 if (user->opcode() == IrOpcode::kIfSuccess) { |
| 168 user->ReplaceUses(node_); | 168 user->ReplaceUses(NodeProperties::GetControlInput(node_)); |
| 169 user->Kill(); | 169 user->Kill(); |
| 170 } else { | 170 } else { |
| 171 DCHECK_EQ(user->opcode(), IrOpcode::kIfException); | 171 DCHECK_EQ(user->opcode(), IrOpcode::kIfException); |
| 172 edge.UpdateTo(jsgraph()->Dead()); | 172 edge.UpdateTo(jsgraph()->Dead()); |
| 173 } | 173 } |
| 174 } | 174 } |
| 175 } | 175 } |
| 176 | 176 |
| 177 // Remove both bailout frame states and the context. | 177 // Remove both bailout frame states and the context. |
| 178 node_->RemoveInput(NodeProperties::FirstFrameStateIndex(node_) + 1); | 178 node_->RemoveInput(NodeProperties::FirstFrameStateIndex(node_) + 1); |
| (...skipping 1831 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2010 } | 2010 } |
| 2011 | 2011 |
| 2012 | 2012 |
| 2013 CompilationDependencies* JSTypedLowering::dependencies() const { | 2013 CompilationDependencies* JSTypedLowering::dependencies() const { |
| 2014 return dependencies_; | 2014 return dependencies_; |
| 2015 } | 2015 } |
| 2016 | 2016 |
| 2017 } // namespace compiler | 2017 } // namespace compiler |
| 2018 } // namespace internal | 2018 } // namespace internal |
| 2019 } // namespace v8 | 2019 } // namespace v8 |
| OLD | NEW |