| 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/change-lowering.h" | 5 #include "src/compiler/change-lowering.h" |
| 6 | 6 |
| 7 #include "src/address-map.h" | 7 #include "src/address-map.h" |
| 8 #include "src/code-factory.h" | 8 #include "src/code-factory.h" |
| 9 #include "src/compiler/js-graph.h" | 9 #include "src/compiler/js-graph.h" |
| 10 #include "src/compiler/linkage.h" | 10 #include "src/compiler/linkage.h" |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 80 Node* context = jsgraph()->NoContextConstant(); | 80 Node* context = jsgraph()->NoContextConstant(); |
| 81 Node* effect = graph()->NewNode(common()->BeginRegion(), graph()->start()); | 81 Node* effect = graph()->NewNode(common()->BeginRegion(), graph()->start()); |
| 82 if (!allocate_heap_number_operator_.is_set()) { | 82 if (!allocate_heap_number_operator_.is_set()) { |
| 83 CallDescriptor* descriptor = Linkage::GetStubCallDescriptor( | 83 CallDescriptor* descriptor = Linkage::GetStubCallDescriptor( |
| 84 isolate(), jsgraph()->zone(), callable.descriptor(), 0, | 84 isolate(), jsgraph()->zone(), callable.descriptor(), 0, |
| 85 CallDescriptor::kNoFlags, Operator::kNoThrow); | 85 CallDescriptor::kNoFlags, Operator::kNoThrow); |
| 86 allocate_heap_number_operator_.set(common()->Call(descriptor)); | 86 allocate_heap_number_operator_.set(common()->Call(descriptor)); |
| 87 } | 87 } |
| 88 Node* heap_number = graph()->NewNode(allocate_heap_number_operator_.get(), | 88 Node* heap_number = graph()->NewNode(allocate_heap_number_operator_.get(), |
| 89 target, context, effect, control); | 89 target, context, effect, control); |
| 90 Node* store = graph()->NewNode(machine()->Store(StoreRepresentation( | 90 Node* store = graph()->NewNode( |
| 91 MachineType::Float64(), kNoWriteBarrier)), | 91 machine()->Store(StoreRepresentation(MachineRepresentation::kFloat64, |
| 92 heap_number, HeapNumberValueIndexConstant(), | 92 kNoWriteBarrier)), |
| 93 value, heap_number, control); | 93 heap_number, HeapNumberValueIndexConstant(), value, heap_number, control); |
| 94 return graph()->NewNode(common()->FinishRegion(), heap_number, store); | 94 return graph()->NewNode(common()->FinishRegion(), heap_number, store); |
| 95 } | 95 } |
| 96 | 96 |
| 97 | 97 |
| 98 Node* ChangeLowering::ChangeInt32ToFloat64(Node* value) { | 98 Node* ChangeLowering::ChangeInt32ToFloat64(Node* value) { |
| 99 return graph()->NewNode(machine()->ChangeInt32ToFloat64(), value); | 99 return graph()->NewNode(machine()->ChangeInt32ToFloat64(), value); |
| 100 } | 100 } |
| 101 | 101 |
| 102 | 102 |
| 103 Node* ChangeLowering::ChangeInt32ToSmi(Node* value) { | 103 Node* ChangeLowering::ChangeInt32ToSmi(Node* value) { |
| (...skipping 374 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 478 | 478 |
| 479 | 479 |
| 480 Reduction ChangeLowering::StoreField(Node* node) { | 480 Reduction ChangeLowering::StoreField(Node* node) { |
| 481 const FieldAccess& access = FieldAccessOf(node->op()); | 481 const FieldAccess& access = FieldAccessOf(node->op()); |
| 482 Type* type = NodeProperties::GetType(node->InputAt(1)); | 482 Type* type = NodeProperties::GetType(node->InputAt(1)); |
| 483 WriteBarrierKind kind = ComputeWriteBarrierKind( | 483 WriteBarrierKind kind = ComputeWriteBarrierKind( |
| 484 access.base_is_tagged, access.machine_type.representation(), access.type, | 484 access.base_is_tagged, access.machine_type.representation(), access.type, |
| 485 type); | 485 type); |
| 486 Node* offset = jsgraph()->IntPtrConstant(access.offset - access.tag()); | 486 Node* offset = jsgraph()->IntPtrConstant(access.offset - access.tag()); |
| 487 node->InsertInput(graph()->zone(), 1, offset); | 487 node->InsertInput(graph()->zone(), 1, offset); |
| 488 NodeProperties::ChangeOp( | 488 NodeProperties::ChangeOp(node, |
| 489 node, machine()->Store(StoreRepresentation(access.machine_type, kind))); | 489 machine()->Store(StoreRepresentation( |
| 490 access.machine_type.representation(), kind))); |
| 490 return Changed(node); | 491 return Changed(node); |
| 491 } | 492 } |
| 492 | 493 |
| 493 | 494 |
| 494 Node* ChangeLowering::ComputeIndex(const ElementAccess& access, | 495 Node* ChangeLowering::ComputeIndex(const ElementAccess& access, |
| 495 Node* const key) { | 496 Node* const key) { |
| 496 Node* index = key; | 497 Node* index = key; |
| 497 const int element_size_shift = | 498 const int element_size_shift = |
| 498 ElementSizeLog2Of(access.machine_type.representation()); | 499 ElementSizeLog2Of(access.machine_type.representation()); |
| 499 if (element_size_shift) { | 500 if (element_size_shift) { |
| (...skipping 22 matching lines...) Expand all Loading... |
| 522 return Changed(node); | 523 return Changed(node); |
| 523 } | 524 } |
| 524 | 525 |
| 525 | 526 |
| 526 Reduction ChangeLowering::StoreElement(Node* node) { | 527 Reduction ChangeLowering::StoreElement(Node* node) { |
| 527 const ElementAccess& access = ElementAccessOf(node->op()); | 528 const ElementAccess& access = ElementAccessOf(node->op()); |
| 528 Type* type = NodeProperties::GetType(node->InputAt(2)); | 529 Type* type = NodeProperties::GetType(node->InputAt(2)); |
| 529 node->ReplaceInput(1, ComputeIndex(access, node->InputAt(1))); | 530 node->ReplaceInput(1, ComputeIndex(access, node->InputAt(1))); |
| 530 NodeProperties::ChangeOp( | 531 NodeProperties::ChangeOp( |
| 531 node, machine()->Store(StoreRepresentation( | 532 node, machine()->Store(StoreRepresentation( |
| 532 access.machine_type, | 533 access.machine_type.representation(), |
| 533 ComputeWriteBarrierKind(access.base_is_tagged, | 534 ComputeWriteBarrierKind(access.base_is_tagged, |
| 534 access.machine_type.representation(), | 535 access.machine_type.representation(), |
| 535 access.type, type)))); | 536 access.type, type)))); |
| 536 return Changed(node); | 537 return Changed(node); |
| 537 } | 538 } |
| 538 | 539 |
| 539 | 540 |
| 540 Reduction ChangeLowering::Allocate(Node* node) { | 541 Reduction ChangeLowering::Allocate(Node* node) { |
| 541 PretenureFlag pretenure = OpParameter<PretenureFlag>(node->op()); | 542 PretenureFlag pretenure = OpParameter<PretenureFlag>(node->op()); |
| 542 if (pretenure == NOT_TENURED) { | 543 if (pretenure == NOT_TENURED) { |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 580 } | 581 } |
| 581 | 582 |
| 582 | 583 |
| 583 MachineOperatorBuilder* ChangeLowering::machine() const { | 584 MachineOperatorBuilder* ChangeLowering::machine() const { |
| 584 return jsgraph()->machine(); | 585 return jsgraph()->machine(); |
| 585 } | 586 } |
| 586 | 587 |
| 587 } // namespace compiler | 588 } // namespace compiler |
| 588 } // namespace internal | 589 } // namespace internal |
| 589 } // namespace v8 | 590 } // namespace v8 |
| OLD | NEW |