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/compiler/js-typed-lowering.h" | 5 #include "src/compiler/js-typed-lowering.h" |
6 | 6 |
| 7 #include "src/ast/modules.h" |
7 #include "src/builtins/builtins-utils.h" | 8 #include "src/builtins/builtins-utils.h" |
8 #include "src/code-factory.h" | 9 #include "src/code-factory.h" |
9 #include "src/compilation-dependencies.h" | 10 #include "src/compilation-dependencies.h" |
10 #include "src/compiler/access-builder.h" | 11 #include "src/compiler/access-builder.h" |
11 #include "src/compiler/js-graph.h" | 12 #include "src/compiler/js-graph.h" |
12 #include "src/compiler/linkage.h" | 13 #include "src/compiler/linkage.h" |
13 #include "src/compiler/node-matchers.h" | 14 #include "src/compiler/node-matchers.h" |
14 #include "src/compiler/node-properties.h" | 15 #include "src/compiler/node-properties.h" |
15 #include "src/compiler/operator-properties.h" | 16 #include "src/compiler/operator-properties.h" |
16 #include "src/compiler/type-cache.h" | 17 #include "src/compiler/type-cache.h" |
(...skipping 1465 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1482 node->ReplaceInput(0, previous); | 1483 node->ReplaceInput(0, previous); |
1483 } | 1484 } |
1484 node->RemoveInput(2); | 1485 node->RemoveInput(2); |
1485 node->ReplaceInput(2, effect); | 1486 node->ReplaceInput(2, effect); |
1486 NodeProperties::ChangeOp( | 1487 NodeProperties::ChangeOp( |
1487 node, | 1488 node, |
1488 simplified()->StoreField(AccessBuilder::ForContextSlot(access.index()))); | 1489 simplified()->StoreField(AccessBuilder::ForContextSlot(access.index()))); |
1489 return Changed(node); | 1490 return Changed(node); |
1490 } | 1491 } |
1491 | 1492 |
| 1493 Reduction JSTypedLowering::ReduceJSLoadModule(Node* node) { |
| 1494 DCHECK_EQ(IrOpcode::kJSLoadModule, node->opcode()); |
| 1495 Node* effect = NodeProperties::GetEffectInput(node); |
| 1496 Node* control = NodeProperties::GetControlInput(node); |
| 1497 |
| 1498 int32_t cell_index = OpParameter<int32_t>(node); |
| 1499 Node* module = NodeProperties::GetValueInput(node, 0); |
| 1500 |
| 1501 Node* array; |
| 1502 int index; |
| 1503 if (ModuleDescriptor::GetCellIndexKind(cell_index) == |
| 1504 ModuleDescriptor::kExport) { |
| 1505 array = effect = graph()->NewNode( |
| 1506 simplified()->LoadField(AccessBuilder::ForModuleRegularExports()), |
| 1507 module, effect, control); |
| 1508 index = cell_index - 1; |
| 1509 } else { |
| 1510 DCHECK_EQ(ModuleDescriptor::GetCellIndexKind(cell_index), |
| 1511 ModuleDescriptor::kImport); |
| 1512 array = effect = graph()->NewNode( |
| 1513 simplified()->LoadField(AccessBuilder::ForModuleRegularImports()), |
| 1514 module, effect, control); |
| 1515 index = -cell_index - 1; |
| 1516 } |
| 1517 |
| 1518 Node* cell = effect = graph()->NewNode( |
| 1519 simplified()->LoadField(AccessBuilder::ForFixedArraySlot(index)), array, |
| 1520 effect, control); |
| 1521 |
| 1522 Node* value = effect = |
| 1523 graph()->NewNode(simplified()->LoadField(AccessBuilder::ForCellValue()), |
| 1524 cell, effect, control); |
| 1525 |
| 1526 ReplaceWithValue(node, value, effect, control); |
| 1527 return Changed(value); |
| 1528 } |
| 1529 |
| 1530 Reduction JSTypedLowering::ReduceJSStoreModule(Node* node) { |
| 1531 DCHECK_EQ(IrOpcode::kJSStoreModule, node->opcode()); |
| 1532 Node* effect = NodeProperties::GetEffectInput(node); |
| 1533 Node* control = NodeProperties::GetControlInput(node); |
| 1534 |
| 1535 int32_t cell_index = OpParameter<int32_t>(node); |
| 1536 Node* module = NodeProperties::GetValueInput(node, 0); |
| 1537 Node* value = NodeProperties::GetValueInput(node, 1); |
| 1538 |
| 1539 Node* array; |
| 1540 int index; |
| 1541 if (ModuleDescriptor::GetCellIndexKind(cell_index) == |
| 1542 ModuleDescriptor::kExport) { |
| 1543 array = effect = graph()->NewNode( |
| 1544 simplified()->LoadField(AccessBuilder::ForModuleRegularExports()), |
| 1545 module, effect, control); |
| 1546 index = cell_index - 1; |
| 1547 } else { |
| 1548 DCHECK_EQ(ModuleDescriptor::GetCellIndexKind(cell_index), |
| 1549 ModuleDescriptor::kImport); |
| 1550 array = effect = graph()->NewNode( |
| 1551 simplified()->LoadField(AccessBuilder::ForModuleRegularImports()), |
| 1552 module, effect, control); |
| 1553 index = -cell_index - 1; |
| 1554 } |
| 1555 |
| 1556 Node* cell = effect = graph()->NewNode( |
| 1557 simplified()->LoadField(AccessBuilder::ForFixedArraySlot(index)), array, |
| 1558 effect, control); |
| 1559 |
| 1560 effect = |
| 1561 graph()->NewNode(simplified()->StoreField(AccessBuilder::ForCellValue()), |
| 1562 cell, value, effect, control); |
| 1563 |
| 1564 ReplaceWithValue(node, effect, effect, control); |
| 1565 return Changed(value); |
| 1566 } |
| 1567 |
1492 Reduction JSTypedLowering::ReduceJSConvertReceiver(Node* node) { | 1568 Reduction JSTypedLowering::ReduceJSConvertReceiver(Node* node) { |
1493 DCHECK_EQ(IrOpcode::kJSConvertReceiver, node->opcode()); | 1569 DCHECK_EQ(IrOpcode::kJSConvertReceiver, node->opcode()); |
1494 ConvertReceiverMode mode = ConvertReceiverModeOf(node->op()); | 1570 ConvertReceiverMode mode = ConvertReceiverModeOf(node->op()); |
1495 Node* receiver = NodeProperties::GetValueInput(node, 0); | 1571 Node* receiver = NodeProperties::GetValueInput(node, 0); |
1496 Type* receiver_type = NodeProperties::GetType(receiver); | 1572 Type* receiver_type = NodeProperties::GetType(receiver); |
1497 Node* context = NodeProperties::GetContextInput(node); | 1573 Node* context = NodeProperties::GetContextInput(node); |
1498 Type* context_type = NodeProperties::GetType(context); | 1574 Type* context_type = NodeProperties::GetType(context); |
1499 Node* frame_state = NodeProperties::GetFrameStateInput(node); | 1575 Node* frame_state = NodeProperties::GetFrameStateInput(node); |
1500 Node* effect = NodeProperties::GetEffectInput(node); | 1576 Node* effect = NodeProperties::GetEffectInput(node); |
1501 Node* control = NodeProperties::GetControlInput(node); | 1577 Node* control = NodeProperties::GetControlInput(node); |
(...skipping 617 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2119 case IrOpcode::kJSLoadProperty: | 2195 case IrOpcode::kJSLoadProperty: |
2120 return ReduceJSLoadProperty(node); | 2196 return ReduceJSLoadProperty(node); |
2121 case IrOpcode::kJSStoreProperty: | 2197 case IrOpcode::kJSStoreProperty: |
2122 return ReduceJSStoreProperty(node); | 2198 return ReduceJSStoreProperty(node); |
2123 case IrOpcode::kJSInstanceOf: | 2199 case IrOpcode::kJSInstanceOf: |
2124 return ReduceJSInstanceOf(node); | 2200 return ReduceJSInstanceOf(node); |
2125 case IrOpcode::kJSLoadContext: | 2201 case IrOpcode::kJSLoadContext: |
2126 return ReduceJSLoadContext(node); | 2202 return ReduceJSLoadContext(node); |
2127 case IrOpcode::kJSStoreContext: | 2203 case IrOpcode::kJSStoreContext: |
2128 return ReduceJSStoreContext(node); | 2204 return ReduceJSStoreContext(node); |
| 2205 case IrOpcode::kJSLoadModule: |
| 2206 return ReduceJSLoadModule(node); |
| 2207 case IrOpcode::kJSStoreModule: |
| 2208 return ReduceJSStoreModule(node); |
2129 case IrOpcode::kJSConvertReceiver: | 2209 case IrOpcode::kJSConvertReceiver: |
2130 return ReduceJSConvertReceiver(node); | 2210 return ReduceJSConvertReceiver(node); |
2131 case IrOpcode::kJSCallConstruct: | 2211 case IrOpcode::kJSCallConstruct: |
2132 return ReduceJSCallConstruct(node); | 2212 return ReduceJSCallConstruct(node); |
2133 case IrOpcode::kJSCallFunction: | 2213 case IrOpcode::kJSCallFunction: |
2134 return ReduceJSCallFunction(node); | 2214 return ReduceJSCallFunction(node); |
2135 case IrOpcode::kJSForInNext: | 2215 case IrOpcode::kJSForInNext: |
2136 return ReduceJSForInNext(node); | 2216 return ReduceJSForInNext(node); |
2137 case IrOpcode::kJSGeneratorStore: | 2217 case IrOpcode::kJSGeneratorStore: |
2138 return ReduceJSGeneratorStore(node); | 2218 return ReduceJSGeneratorStore(node); |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2170 } | 2250 } |
2171 | 2251 |
2172 | 2252 |
2173 CompilationDependencies* JSTypedLowering::dependencies() const { | 2253 CompilationDependencies* JSTypedLowering::dependencies() const { |
2174 return dependencies_; | 2254 return dependencies_; |
2175 } | 2255 } |
2176 | 2256 |
2177 } // namespace compiler | 2257 } // namespace compiler |
2178 } // namespace internal | 2258 } // namespace internal |
2179 } // namespace v8 | 2259 } // namespace v8 |
OLD | NEW |