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/compiler/access-builder.h" | 6 #include "src/compiler/access-builder.h" |
7 #include "src/compiler/js-graph.h" | 7 #include "src/compiler/js-graph.h" |
8 #include "src/compiler/js-typed-lowering.h" | 8 #include "src/compiler/js-typed-lowering.h" |
9 #include "src/compiler/linkage.h" | 9 #include "src/compiler/linkage.h" |
10 #include "src/compiler/node-matchers.h" | 10 #include "src/compiler/node-matchers.h" |
(...skipping 1330 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1341 cache_type = graph()->NewNode(common()->Phi(kMachAnyTagged, 2), | 1341 cache_type = graph()->NewNode(common()->Phi(kMachAnyTagged, 2), |
1342 cache_type_true0, cache_type_false0, control); | 1342 cache_type_true0, cache_type_false0, control); |
1343 | 1343 |
1344 for (auto edge : node->use_edges()) { | 1344 for (auto edge : node->use_edges()) { |
1345 Node* const use = edge.from(); | 1345 Node* const use = edge.from(); |
1346 if (NodeProperties::IsEffectEdge(edge)) { | 1346 if (NodeProperties::IsEffectEdge(edge)) { |
1347 edge.UpdateTo(effect); | 1347 edge.UpdateTo(effect); |
1348 Revisit(use); | 1348 Revisit(use); |
1349 } else { | 1349 } else { |
1350 if (NodeProperties::IsControlEdge(edge)) { | 1350 if (NodeProperties::IsControlEdge(edge)) { |
1351 DCHECK_EQ(IrOpcode::kIfSuccess, use->opcode()); | 1351 if (use->opcode() == IrOpcode::kIfSuccess) { |
1352 Replace(use, control); | 1352 Replace(use, control); |
| 1353 } else if (use->opcode() == IrOpcode::kIfException) { |
| 1354 edge.UpdateTo(cache_type_true0); |
| 1355 continue; |
| 1356 } else { |
| 1357 UNREACHABLE(); |
| 1358 } |
1353 } else { | 1359 } else { |
1354 DCHECK(NodeProperties::IsValueEdge(edge)); | 1360 DCHECK(NodeProperties::IsValueEdge(edge)); |
1355 DCHECK_EQ(IrOpcode::kProjection, use->opcode()); | 1361 DCHECK_EQ(IrOpcode::kProjection, use->opcode()); |
1356 switch (ProjectionIndexOf(use->op())) { | 1362 switch (ProjectionIndexOf(use->op())) { |
1357 case 0: | 1363 case 0: |
1358 Replace(use, cache_type); | 1364 Replace(use, cache_type); |
1359 break; | 1365 break; |
1360 case 1: | 1366 case 1: |
1361 Replace(use, cache_array); | 1367 Replace(use, cache_array); |
1362 break; | 1368 break; |
(...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1612 } | 1618 } |
1613 | 1619 |
1614 | 1620 |
1615 MachineOperatorBuilder* JSTypedLowering::machine() const { | 1621 MachineOperatorBuilder* JSTypedLowering::machine() const { |
1616 return jsgraph()->machine(); | 1622 return jsgraph()->machine(); |
1617 } | 1623 } |
1618 | 1624 |
1619 } // namespace compiler | 1625 } // namespace compiler |
1620 } // namespace internal | 1626 } // namespace internal |
1621 } // namespace v8 | 1627 } // namespace v8 |
OLD | NEW |