OLD | NEW |
---|---|
1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 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/bytecode-graph-builder.h" | 5 #include "src/compiler/bytecode-graph-builder.h" |
6 | 6 |
7 #include "src/compiler/linkage.h" | 7 #include "src/compiler/linkage.h" |
8 #include "src/compiler/operator-properties.h" | 8 #include "src/compiler/operator-properties.h" |
9 #include "src/interpreter/bytecode-array-iterator.h" | 9 #include "src/interpreter/bytecode-array-iterator.h" |
10 | 10 |
(...skipping 442 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
453 } | 453 } |
454 | 454 |
455 | 455 |
456 void BytecodeGraphBuilder::VisitLoadICStrict( | 456 void BytecodeGraphBuilder::VisitLoadICStrict( |
457 const interpreter::BytecodeArrayIterator& iterator) { | 457 const interpreter::BytecodeArrayIterator& iterator) { |
458 DCHECK(is_strict(language_mode())); | 458 DCHECK(is_strict(language_mode())); |
459 BuildNamedLoad(iterator); | 459 BuildNamedLoad(iterator); |
460 } | 460 } |
461 | 461 |
462 | 462 |
463 void BytecodeGraphBuilder::VisitKeyedLoadICSloppy( | |
464 const interpreter::BytecodeArrayIterator& iterator) { | |
465 UNIMPLEMENTED(); | |
466 } | |
467 | |
468 | |
469 void BytecodeGraphBuilder::VisitKeyedLoadICStrict( | |
470 const interpreter::BytecodeArrayIterator& iterator) { | |
471 UNIMPLEMENTED(); | |
472 } | |
473 | |
474 | |
475 void BytecodeGraphBuilder::VisitLoadICSloppyWide( | 463 void BytecodeGraphBuilder::VisitLoadICSloppyWide( |
476 const interpreter::BytecodeArrayIterator& iterator) { | 464 const interpreter::BytecodeArrayIterator& iterator) { |
477 DCHECK(is_sloppy(language_mode())); | 465 DCHECK(is_sloppy(language_mode())); |
478 BuildNamedLoad(iterator); | 466 BuildNamedLoad(iterator); |
479 } | 467 } |
480 | 468 |
481 | 469 |
482 void BytecodeGraphBuilder::VisitLoadICStrictWide( | 470 void BytecodeGraphBuilder::VisitLoadICStrictWide( |
483 const interpreter::BytecodeArrayIterator& iterator) { | 471 const interpreter::BytecodeArrayIterator& iterator) { |
484 DCHECK(is_strict(language_mode())); | 472 DCHECK(is_strict(language_mode())); |
485 BuildNamedLoad(iterator); | 473 BuildNamedLoad(iterator); |
486 } | 474 } |
487 | 475 |
488 | 476 |
477 void BytecodeGraphBuilder::BuildKeyedLoad( | |
478 const interpreter::BytecodeArrayIterator& iterator) { | |
479 Node* key = environment()->LookupAccumulator(); | |
480 Node* object = environment()->LookupRegister(iterator.GetRegisterOperand(0)); | |
481 VectorSlotPair feedback = CreateVectorSlotPair(iterator.GetIndexOperand(1)); | |
482 | |
483 const Operator* op = javascript()->LoadProperty(language_mode(), feedback); | |
484 Node* node = NewNode(op, object, key, BuildLoadFeedbackVector()); | |
485 AddEmptyFrameStateInputs(node); | |
486 environment()->BindAccumulator(node); | |
487 } | |
488 | |
489 | |
490 void BytecodeGraphBuilder::VisitKeyedLoadICSloppy( | |
491 const interpreter::BytecodeArrayIterator& iterator) { | |
492 DCHECK(is_sloppy(language_mode())); | |
493 BuildKeyedLoad(iterator); | |
494 } | |
495 | |
496 | |
497 void BytecodeGraphBuilder::VisitKeyedLoadICStrict( | |
498 const interpreter::BytecodeArrayIterator& iterator) { | |
499 DCHECK(is_strict(language_mode())); | |
500 BuildKeyedLoad(iterator); | |
501 } | |
502 | |
503 | |
489 void BytecodeGraphBuilder::VisitKeyedLoadICSloppyWide( | 504 void BytecodeGraphBuilder::VisitKeyedLoadICSloppyWide( |
490 const interpreter::BytecodeArrayIterator& iterator) { | 505 const interpreter::BytecodeArrayIterator& iterator) { |
491 UNIMPLEMENTED(); | 506 DCHECK(is_sloppy(language_mode())); |
507 BuildKeyedLoad(iterator); | |
492 } | 508 } |
493 | 509 |
494 | 510 |
495 void BytecodeGraphBuilder::VisitKeyedLoadICStrictWide( | 511 void BytecodeGraphBuilder::VisitKeyedLoadICStrictWide( |
496 const interpreter::BytecodeArrayIterator& iterator) { | 512 const interpreter::BytecodeArrayIterator& iterator) { |
497 UNIMPLEMENTED(); | 513 DCHECK(is_strict(language_mode())); |
514 BuildKeyedLoad(iterator); | |
515 } | |
516 | |
517 | |
518 void BytecodeGraphBuilder::BuildNamedStore( | |
519 const interpreter::BytecodeArrayIterator& iterator) { | |
520 Node* value = environment()->LookupAccumulator(); | |
521 Node* object = environment()->LookupRegister(iterator.GetRegisterOperand(0)); | |
522 Handle<Name> name = | |
523 Handle<Name>::cast(iterator.GetConstantForIndexOperand(1)); | |
524 VectorSlotPair feedback = CreateVectorSlotPair(iterator.GetIndexOperand(2)); | |
525 | |
526 const Operator* op = | |
527 javascript()->StoreNamed(language_mode(), name, feedback); | |
528 Node* node = NewNode(op, object, value, BuildLoadFeedbackVector()); | |
529 AddEmptyFrameStateInputs(node); | |
530 environment()->BindAccumulator(node); | |
Michael Starzinger
2015/11/19 11:59:38
The JSStoreNamed operator doesn't produce value ou
mythria
2015/11/19 12:41:24
Done.
mythria
2015/11/19 12:41:24
Thanks for pointing this. Stores, do not produce a
Michael Starzinger
2015/11/19 12:44:05
I would vote for being explicit about the accumula
mythria
2015/11/19 13:24:06
I Made it explicit.
Done.
| |
498 } | 531 } |
499 | 532 |
500 | 533 |
501 void BytecodeGraphBuilder::VisitStoreICSloppy( | 534 void BytecodeGraphBuilder::VisitStoreICSloppy( |
502 const interpreter::BytecodeArrayIterator& iterator) { | 535 const interpreter::BytecodeArrayIterator& iterator) { |
503 UNIMPLEMENTED(); | 536 DCHECK(is_sloppy(language_mode())); |
537 BuildNamedStore(iterator); | |
504 } | 538 } |
505 | 539 |
506 | 540 |
507 void BytecodeGraphBuilder::VisitStoreICStrict( | 541 void BytecodeGraphBuilder::VisitStoreICStrict( |
508 const interpreter::BytecodeArrayIterator& iterator) { | 542 const interpreter::BytecodeArrayIterator& iterator) { |
509 UNIMPLEMENTED(); | 543 DCHECK(is_strict(language_mode())); |
544 BuildNamedStore(iterator); | |
545 } | |
546 | |
547 | |
548 void BytecodeGraphBuilder::VisitStoreICSloppyWide( | |
549 const interpreter::BytecodeArrayIterator& iterator) { | |
550 DCHECK(is_sloppy(language_mode())); | |
551 BuildNamedStore(iterator); | |
552 } | |
553 | |
554 | |
555 void BytecodeGraphBuilder::VisitStoreICStrictWide( | |
556 const interpreter::BytecodeArrayIterator& iterator) { | |
557 DCHECK(is_strict(language_mode())); | |
558 BuildNamedStore(iterator); | |
559 } | |
560 | |
561 | |
562 void BytecodeGraphBuilder::BuildKeyedStore( | |
563 const interpreter::BytecodeArrayIterator& iterator) { | |
564 Node* value = environment()->LookupAccumulator(); | |
565 Node* object = environment()->LookupRegister(iterator.GetRegisterOperand(0)); | |
566 Node* key = environment()->LookupRegister(iterator.GetRegisterOperand(1)); | |
567 VectorSlotPair feedback = CreateVectorSlotPair(iterator.GetIndexOperand(2)); | |
568 | |
569 const Operator* op = javascript()->StoreProperty(language_mode(), feedback); | |
570 Node* node = NewNode(op, object, key, value, BuildLoadFeedbackVector()); | |
571 AddEmptyFrameStateInputs(node); | |
572 environment()->BindAccumulator(node); | |
Michael Starzinger
2015/11/19 11:59:38
Likewise for s/node/value/ here?
mythria
2015/11/19 12:41:24
Done.
| |
510 } | 573 } |
511 | 574 |
512 | 575 |
513 void BytecodeGraphBuilder::VisitKeyedStoreICSloppy( | 576 void BytecodeGraphBuilder::VisitKeyedStoreICSloppy( |
514 const interpreter::BytecodeArrayIterator& iterator) { | 577 const interpreter::BytecodeArrayIterator& iterator) { |
515 UNIMPLEMENTED(); | 578 DCHECK(is_sloppy(language_mode())); |
579 BuildKeyedStore(iterator); | |
516 } | 580 } |
517 | 581 |
518 | 582 |
519 void BytecodeGraphBuilder::VisitKeyedStoreICStrict( | 583 void BytecodeGraphBuilder::VisitKeyedStoreICStrict( |
520 const interpreter::BytecodeArrayIterator& iterator) { | 584 const interpreter::BytecodeArrayIterator& iterator) { |
521 UNIMPLEMENTED(); | 585 DCHECK(is_strict(language_mode())); |
522 } | 586 BuildKeyedStore(iterator); |
523 | |
524 | |
525 void BytecodeGraphBuilder::VisitStoreICSloppyWide( | |
526 const interpreter::BytecodeArrayIterator& iterator) { | |
527 UNIMPLEMENTED(); | |
528 } | |
529 | |
530 | |
531 void BytecodeGraphBuilder::VisitStoreICStrictWide( | |
532 const interpreter::BytecodeArrayIterator& iterator) { | |
533 UNIMPLEMENTED(); | |
534 } | 587 } |
535 | 588 |
536 | 589 |
537 void BytecodeGraphBuilder::VisitKeyedStoreICSloppyWide( | 590 void BytecodeGraphBuilder::VisitKeyedStoreICSloppyWide( |
538 const interpreter::BytecodeArrayIterator& iterator) { | 591 const interpreter::BytecodeArrayIterator& iterator) { |
539 UNIMPLEMENTED(); | 592 DCHECK(is_sloppy(language_mode())); |
593 BuildKeyedStore(iterator); | |
540 } | 594 } |
541 | 595 |
542 | 596 |
543 void BytecodeGraphBuilder::VisitKeyedStoreICStrictWide( | 597 void BytecodeGraphBuilder::VisitKeyedStoreICStrictWide( |
544 const interpreter::BytecodeArrayIterator& iterator) { | 598 const interpreter::BytecodeArrayIterator& iterator) { |
545 UNIMPLEMENTED(); | 599 DCHECK(is_strict(language_mode())); |
600 BuildKeyedStore(iterator); | |
546 } | 601 } |
547 | 602 |
548 | 603 |
549 void BytecodeGraphBuilder::VisitPushContext( | 604 void BytecodeGraphBuilder::VisitPushContext( |
550 const interpreter::BytecodeArrayIterator& iterator) { | 605 const interpreter::BytecodeArrayIterator& iterator) { |
551 UNIMPLEMENTED(); | 606 UNIMPLEMENTED(); |
552 } | 607 } |
553 | 608 |
554 | 609 |
555 void BytecodeGraphBuilder::VisitPopContext( | 610 void BytecodeGraphBuilder::VisitPopContext( |
(...skipping 531 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1087 | 1142 |
1088 void BytecodeGraphBuilder::UpdateControlDependencyToLeaveFunction(Node* exit) { | 1143 void BytecodeGraphBuilder::UpdateControlDependencyToLeaveFunction(Node* exit) { |
1089 if (environment()->IsMarkedAsUnreachable()) return; | 1144 if (environment()->IsMarkedAsUnreachable()) return; |
1090 environment()->MarkAsUnreachable(); | 1145 environment()->MarkAsUnreachable(); |
1091 exit_controls_.push_back(exit); | 1146 exit_controls_.push_back(exit); |
1092 } | 1147 } |
1093 | 1148 |
1094 } // namespace compiler | 1149 } // namespace compiler |
1095 } // namespace internal | 1150 } // namespace internal |
1096 } // namespace v8 | 1151 } // namespace v8 |
OLD | NEW |