OLD | NEW |
1 // Copyright 2016 the V8 project authors. All rights reserved. | 1 // Copyright 2016 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-create-lowering.h" | 5 #include "src/compiler/js-create-lowering.h" |
6 | 6 |
7 #include "src/allocation-site-scopes.h" | 7 #include "src/allocation-site-scopes.h" |
8 #include "src/code-factory.h" | 8 #include "src/code-factory.h" |
9 #include "src/compilation-dependencies.h" | 9 #include "src/compilation-dependencies.h" |
10 #include "src/compiler/access-builder.h" | 10 #include "src/compiler/access-builder.h" |
(...skipping 493 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
504 : DONT_OVERRIDE; | 504 : DONT_OVERRIDE; |
505 | 505 |
506 if (arity == 0) { | 506 if (arity == 0) { |
507 ArrayNoArgumentConstructorStub stub(isolate(), elements_kind, | 507 ArrayNoArgumentConstructorStub stub(isolate(), elements_kind, |
508 override_mode); | 508 override_mode); |
509 CallDescriptor* desc = Linkage::GetStubCallDescriptor( | 509 CallDescriptor* desc = Linkage::GetStubCallDescriptor( |
510 isolate(), graph()->zone(), stub.GetCallInterfaceDescriptor(), 1, | 510 isolate(), graph()->zone(), stub.GetCallInterfaceDescriptor(), 1, |
511 CallDescriptor::kNeedsFrameState); | 511 CallDescriptor::kNeedsFrameState); |
512 node->ReplaceInput(0, jsgraph()->HeapConstant(stub.GetCode())); | 512 node->ReplaceInput(0, jsgraph()->HeapConstant(stub.GetCode())); |
513 node->InsertInput(graph()->zone(), 2, jsgraph()->HeapConstant(site)); | 513 node->InsertInput(graph()->zone(), 2, jsgraph()->HeapConstant(site)); |
514 node->InsertInput(graph()->zone(), 3, jsgraph()->Int32Constant(0)); | 514 node->InsertInput(graph()->zone(), 3, jsgraph()->Constant(0)); |
515 node->InsertInput(graph()->zone(), 4, jsgraph()->UndefinedConstant()); | 515 node->InsertInput(graph()->zone(), 4, jsgraph()->UndefinedConstant()); |
516 NodeProperties::ChangeOp(node, common()->Call(desc)); | 516 NodeProperties::ChangeOp(node, common()->Call(desc)); |
517 return Changed(node); | 517 return Changed(node); |
518 } else if (arity == 1) { | 518 } else if (arity == 1) { |
519 AllocationSiteOverrideMode override_mode = | 519 AllocationSiteOverrideMode override_mode = |
520 (AllocationSite::GetMode(elements_kind) == TRACK_ALLOCATION_SITE) | 520 (AllocationSite::GetMode(elements_kind) == TRACK_ALLOCATION_SITE) |
521 ? DISABLE_ALLOCATION_SITES | 521 ? DISABLE_ALLOCATION_SITES |
522 : DONT_OVERRIDE; | 522 : DONT_OVERRIDE; |
523 | 523 |
524 if (IsHoleyElementsKind(elements_kind)) { | 524 if (IsHoleyElementsKind(elements_kind)) { |
525 ArraySingleArgumentConstructorStub stub(isolate(), elements_kind, | 525 ArraySingleArgumentConstructorStub stub(isolate(), elements_kind, |
526 override_mode); | 526 override_mode); |
527 CallDescriptor* desc = Linkage::GetStubCallDescriptor( | 527 CallDescriptor* desc = Linkage::GetStubCallDescriptor( |
528 isolate(), graph()->zone(), stub.GetCallInterfaceDescriptor(), 2, | 528 isolate(), graph()->zone(), stub.GetCallInterfaceDescriptor(), 2, |
529 CallDescriptor::kNeedsFrameState); | 529 CallDescriptor::kNeedsFrameState); |
530 node->ReplaceInput(0, jsgraph()->HeapConstant(stub.GetCode())); | 530 node->ReplaceInput(0, jsgraph()->HeapConstant(stub.GetCode())); |
531 node->InsertInput(graph()->zone(), 2, jsgraph()->HeapConstant(site)); | 531 node->InsertInput(graph()->zone(), 2, jsgraph()->HeapConstant(site)); |
532 node->InsertInput(graph()->zone(), 3, jsgraph()->Int32Constant(1)); | 532 node->InsertInput(graph()->zone(), 3, jsgraph()->Constant(1)); |
533 node->InsertInput(graph()->zone(), 4, jsgraph()->UndefinedConstant()); | 533 node->InsertInput(graph()->zone(), 4, jsgraph()->UndefinedConstant()); |
534 NodeProperties::ChangeOp(node, common()->Call(desc)); | 534 NodeProperties::ChangeOp(node, common()->Call(desc)); |
535 return Changed(node); | 535 return Changed(node); |
536 } | 536 } |
537 | 537 |
538 Node* effect = NodeProperties::GetEffectInput(node); | 538 Node* effect = NodeProperties::GetEffectInput(node); |
539 Node* control = NodeProperties::GetControlInput(node); | 539 Node* control = NodeProperties::GetControlInput(node); |
540 Node* length = NodeProperties::GetValueInput(node, 2); | 540 Node* length = NodeProperties::GetValueInput(node, 2); |
541 Node* equal = graph()->NewNode(simplified()->ReferenceEqual(), length, | 541 Node* equal = graph()->NewNode(simplified()->ReferenceEqual(), length, |
542 jsgraph()->ZeroConstant()); | 542 jsgraph()->ZeroConstant()); |
(...skipping 10 matching lines...) Expand all Loading... |
553 { | 553 { |
554 ArraySingleArgumentConstructorStub stub(isolate(), elements_kind, | 554 ArraySingleArgumentConstructorStub stub(isolate(), elements_kind, |
555 override_mode); | 555 override_mode); |
556 CallDescriptor* desc = Linkage::GetStubCallDescriptor( | 556 CallDescriptor* desc = Linkage::GetStubCallDescriptor( |
557 isolate(), graph()->zone(), stub.GetCallInterfaceDescriptor(), 2, | 557 isolate(), graph()->zone(), stub.GetCallInterfaceDescriptor(), 2, |
558 CallDescriptor::kNeedsFrameState); | 558 CallDescriptor::kNeedsFrameState); |
559 | 559 |
560 Node* inputs[] = {jsgraph()->HeapConstant(stub.GetCode()), | 560 Node* inputs[] = {jsgraph()->HeapConstant(stub.GetCode()), |
561 node->InputAt(1), | 561 node->InputAt(1), |
562 jsgraph()->HeapConstant(site), | 562 jsgraph()->HeapConstant(site), |
563 jsgraph()->Int32Constant(1), | 563 jsgraph()->Constant(1), |
564 jsgraph()->UndefinedConstant(), | 564 jsgraph()->UndefinedConstant(), |
565 length, | 565 length, |
566 context, | 566 context, |
567 frame_state, | 567 frame_state, |
568 effect, | 568 effect, |
569 if_equal}; | 569 if_equal}; |
570 | 570 |
571 call_holey = | 571 call_holey = |
572 graph()->NewNode(common()->Call(desc), arraysize(inputs), inputs); | 572 graph()->NewNode(common()->Call(desc), arraysize(inputs), inputs); |
573 if_success_holey = graph()->NewNode(common()->IfSuccess(), call_holey); | 573 if_success_holey = graph()->NewNode(common()->IfSuccess(), call_holey); |
574 } | 574 } |
575 Node* if_not_equal = graph()->NewNode(common()->IfFalse(), branch); | 575 Node* if_not_equal = graph()->NewNode(common()->IfFalse(), branch); |
576 { | 576 { |
577 // Require elements kind to "go holey." | 577 // Require elements kind to "go holey." |
578 ArraySingleArgumentConstructorStub stub( | 578 ArraySingleArgumentConstructorStub stub( |
579 isolate(), GetHoleyElementsKind(elements_kind), override_mode); | 579 isolate(), GetHoleyElementsKind(elements_kind), override_mode); |
580 CallDescriptor* desc = Linkage::GetStubCallDescriptor( | 580 CallDescriptor* desc = Linkage::GetStubCallDescriptor( |
581 isolate(), graph()->zone(), stub.GetCallInterfaceDescriptor(), 2, | 581 isolate(), graph()->zone(), stub.GetCallInterfaceDescriptor(), 2, |
582 CallDescriptor::kNeedsFrameState); | 582 CallDescriptor::kNeedsFrameState); |
583 | 583 |
584 Node* inputs[] = {jsgraph()->HeapConstant(stub.GetCode()), | 584 Node* inputs[] = {jsgraph()->HeapConstant(stub.GetCode()), |
585 node->InputAt(1), | 585 node->InputAt(1), |
586 jsgraph()->HeapConstant(site), | 586 jsgraph()->HeapConstant(site), |
587 jsgraph()->Int32Constant(1), | 587 jsgraph()->Constant(1), |
588 jsgraph()->UndefinedConstant(), | 588 jsgraph()->UndefinedConstant(), |
589 length, | 589 length, |
590 context, | 590 context, |
591 frame_state, | 591 frame_state, |
592 effect, | 592 effect, |
593 if_not_equal}; | 593 if_not_equal}; |
594 | 594 |
595 call_packed = | 595 call_packed = |
596 graph()->NewNode(common()->Call(desc), arraysize(inputs), inputs); | 596 graph()->NewNode(common()->Call(desc), arraysize(inputs), inputs); |
597 if_success_packed = graph()->NewNode(common()->IfSuccess(), call_packed); | 597 if_success_packed = graph()->NewNode(common()->IfSuccess(), call_packed); |
(...skipping 10 matching lines...) Expand all Loading... |
608 return Changed(node); | 608 return Changed(node); |
609 } | 609 } |
610 | 610 |
611 DCHECK(arity > 1); | 611 DCHECK(arity > 1); |
612 ArrayNArgumentsConstructorStub stub(isolate()); | 612 ArrayNArgumentsConstructorStub stub(isolate()); |
613 CallDescriptor* desc = Linkage::GetStubCallDescriptor( | 613 CallDescriptor* desc = Linkage::GetStubCallDescriptor( |
614 isolate(), graph()->zone(), stub.GetCallInterfaceDescriptor(), arity + 1, | 614 isolate(), graph()->zone(), stub.GetCallInterfaceDescriptor(), arity + 1, |
615 CallDescriptor::kNeedsFrameState); | 615 CallDescriptor::kNeedsFrameState); |
616 node->ReplaceInput(0, jsgraph()->HeapConstant(stub.GetCode())); | 616 node->ReplaceInput(0, jsgraph()->HeapConstant(stub.GetCode())); |
617 node->InsertInput(graph()->zone(), 2, jsgraph()->HeapConstant(site)); | 617 node->InsertInput(graph()->zone(), 2, jsgraph()->HeapConstant(site)); |
618 node->InsertInput(graph()->zone(), 3, jsgraph()->Int32Constant(arity)); | 618 node->InsertInput(graph()->zone(), 3, jsgraph()->Constant(arity)); |
619 node->InsertInput(graph()->zone(), 4, jsgraph()->UndefinedConstant()); | 619 node->InsertInput(graph()->zone(), 4, jsgraph()->UndefinedConstant()); |
620 NodeProperties::ChangeOp(node, common()->Call(desc)); | 620 NodeProperties::ChangeOp(node, common()->Call(desc)); |
621 return Changed(node); | 621 return Changed(node); |
622 } | 622 } |
623 | 623 |
624 Reduction JSCreateLowering::ReduceJSCreateArray(Node* node) { | 624 Reduction JSCreateLowering::ReduceJSCreateArray(Node* node) { |
625 DCHECK_EQ(IrOpcode::kJSCreateArray, node->opcode()); | 625 DCHECK_EQ(IrOpcode::kJSCreateArray, node->opcode()); |
626 CreateArrayParameters const& p = CreateArrayParametersOf(node->op()); | 626 CreateArrayParameters const& p = CreateArrayParametersOf(node->op()); |
627 Node* target = NodeProperties::GetValueInput(node, 0); | 627 Node* target = NodeProperties::GetValueInput(node, 0); |
628 Node* new_target = NodeProperties::GetValueInput(node, 1); | 628 Node* new_target = NodeProperties::GetValueInput(node, 1); |
(...skipping 623 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1252 return jsgraph()->simplified(); | 1252 return jsgraph()->simplified(); |
1253 } | 1253 } |
1254 | 1254 |
1255 MachineOperatorBuilder* JSCreateLowering::machine() const { | 1255 MachineOperatorBuilder* JSCreateLowering::machine() const { |
1256 return jsgraph()->machine(); | 1256 return jsgraph()->machine(); |
1257 } | 1257 } |
1258 | 1258 |
1259 } // namespace compiler | 1259 } // namespace compiler |
1260 } // namespace internal | 1260 } // namespace internal |
1261 } // namespace v8 | 1261 } // namespace v8 |
OLD | NEW |