| OLD | NEW |
| 1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 283 | 283 |
| 284 void HLoadKeyedGeneric::InternalSetOperandAt(int index, HValue* value) { | 284 void HLoadKeyedGeneric::InternalSetOperandAt(int index, HValue* value) { |
| 285 if (index < 2) { | 285 if (index < 2) { |
| 286 operands_[index] = value; | 286 operands_[index] = value; |
| 287 } else { | 287 } else { |
| 288 context_ = value; | 288 context_ = value; |
| 289 } | 289 } |
| 290 } | 290 } |
| 291 | 291 |
| 292 | 292 |
| 293 void HCallKeyed::InternalSetOperandAt(int index, HValue* value) { | |
| 294 // The key and all the arguments are stored in the base class's arguments_ | |
| 295 // vector. The context is in the object itself. Ugly. | |
| 296 if (index <= argument_count()) { | |
| 297 arguments_[index] = value; | |
| 298 } else { | |
| 299 context_ = value; | |
| 300 } | |
| 301 } | |
| 302 | |
| 303 | |
| 304 void HCallNamed::InternalSetOperandAt(int index, HValue* value) { | |
| 305 // The arguments are in the base class's arguments_ vector. The context | |
| 306 // is in the object itself. | |
| 307 if (index < argument_count()) { | |
| 308 arguments_[index] = value; | |
| 309 } else { | |
| 310 context_ = value; | |
| 311 } | |
| 312 } | |
| 313 | |
| 314 | |
| 315 void HCallFunction::InternalSetOperandAt(int index, HValue* value) { | |
| 316 // The arguments are in the base class's arguments_ vector. The context | |
| 317 // is in the object itself. | |
| 318 if (index < argument_count()) { | |
| 319 arguments_[index] = value; | |
| 320 } else { | |
| 321 context_ = value; | |
| 322 } | |
| 323 } | |
| 324 | |
| 325 | |
| 326 void HCallGlobal::InternalSetOperandAt(int index, HValue* value) { | |
| 327 // The arguments are in the base class's arguments_ vector. The context | |
| 328 // is in the object itself. | |
| 329 if (index < argument_count()) { | |
| 330 arguments_[index] = value; | |
| 331 } else { | |
| 332 context_ = value; | |
| 333 } | |
| 334 } | |
| 335 | |
| 336 | |
| 337 void HCallNew::InternalSetOperandAt(int index, HValue* value) { | |
| 338 // The arguments are in the base class's arguments_ vector. The context | |
| 339 // is in the object itself. | |
| 340 if (index < argument_count()) { | |
| 341 arguments_[index] = value; | |
| 342 } else { | |
| 343 context_ = value; | |
| 344 } | |
| 345 } | |
| 346 | |
| 347 | |
| 348 void HStoreKeyedGeneric::InternalSetOperandAt(int index, HValue* value) { | 293 void HStoreKeyedGeneric::InternalSetOperandAt(int index, HValue* value) { |
| 349 if (index < 3) { | 294 if (index < 3) { |
| 350 operands_[index] = value; | 295 operands_[index] = value; |
| 351 } else { | 296 } else { |
| 352 context_ = value; | 297 context_ = value; |
| 353 } | 298 } |
| 354 } | 299 } |
| 355 | 300 |
| 356 | 301 |
| 357 void HStoreNamedGeneric::InternalSetOperandAt(int index, HValue* value) { | 302 void HStoreNamedGeneric::InternalSetOperandAt(int index, HValue* value) { |
| (...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 602 } | 547 } |
| 603 | 548 |
| 604 // Verify that instructions that can be eliminated by GVN have overridden | 549 // Verify that instructions that can be eliminated by GVN have overridden |
| 605 // HValue::DataEquals. The default implementation is UNREACHABLE. We | 550 // HValue::DataEquals. The default implementation is UNREACHABLE. We |
| 606 // don't actually care whether DataEquals returns true or false here. | 551 // don't actually care whether DataEquals returns true or false here. |
| 607 if (CheckFlag(kUseGVN)) DataEquals(this); | 552 if (CheckFlag(kUseGVN)) DataEquals(this); |
| 608 } | 553 } |
| 609 #endif | 554 #endif |
| 610 | 555 |
| 611 | 556 |
| 612 HCall::HCall(int count) : arguments_(Zone::NewArray<HValue*>(count), count) { | 557 void HCall::PrintDataTo(StringStream* stream) const { |
| 613 for (int i = 0; i < count; ++i) arguments_[i] = NULL; | 558 stream->Add("#%d", argument_count()); |
| 614 set_representation(Representation::Tagged()); | |
| 615 SetAllSideEffects(); | |
| 616 } | 559 } |
| 617 | 560 |
| 618 | 561 |
| 619 void HCall::PrintDataTo(StringStream* stream) const { | 562 void HUnaryCall::PrintDataTo(StringStream* stream) const { |
| 620 stream->Add("("); | 563 value()->PrintNameTo(stream); |
| 621 for (int i = 0; i < arguments_.length(); ++i) { | 564 stream->Add(" "); |
| 622 if (i != 0) stream->Add(", "); | 565 HCall::PrintDataTo(stream); |
| 623 arguments_.at(i)->PrintNameTo(stream); | 566 } |
| 567 |
| 568 |
| 569 void HBinaryCall::PrintDataTo(StringStream* stream) const { |
| 570 first()->PrintNameTo(stream); |
| 571 stream->Add(" "); |
| 572 second()->PrintNameTo(stream); |
| 573 stream->Add(" "); |
| 574 HCall::PrintDataTo(stream); |
| 575 } |
| 576 |
| 577 |
| 578 void HCallConstantFunction::PrintDataTo(StringStream* stream) const { |
| 579 if (IsApplyFunction()) { |
| 580 stream->Add("optimized apply "); |
| 581 } else { |
| 582 stream->Add("%o ", function()->shared()->DebugName()); |
| 624 } | 583 } |
| 625 stream->Add(")"); | 584 HCall::PrintDataTo(stream); |
| 585 } |
| 586 |
| 587 |
| 588 void HCallNamed::PrintDataTo(StringStream* stream) const { |
| 589 stream->Add("%o ", *name()); |
| 590 HUnaryCall::PrintDataTo(stream); |
| 591 } |
| 592 |
| 593 |
| 594 void HCallGlobal::PrintDataTo(StringStream* stream) const { |
| 595 stream->Add("%o ", *name()); |
| 596 HUnaryCall::PrintDataTo(stream); |
| 597 } |
| 598 |
| 599 |
| 600 void HCallKnownGlobal::PrintDataTo(StringStream* stream) const { |
| 601 stream->Add("o ", target()->shared()->DebugName()); |
| 602 HCall::PrintDataTo(stream); |
| 603 } |
| 604 |
| 605 |
| 606 void HCallRuntime::PrintDataTo(StringStream* stream) const { |
| 607 stream->Add("%o ", *name()); |
| 608 HCall::PrintDataTo(stream); |
| 626 } | 609 } |
| 627 | 610 |
| 628 | 611 |
| 629 void HClassOfTest::PrintDataTo(StringStream* stream) const { | 612 void HClassOfTest::PrintDataTo(StringStream* stream) const { |
| 630 stream->Add("class_of_test("); | 613 stream->Add("class_of_test("); |
| 631 value()->PrintTo(stream); | 614 value()->PrintNameTo(stream); |
| 632 stream->Add(", \"%o\")", *class_name()); | 615 stream->Add(", \"%o\")", *class_name()); |
| 633 } | 616 } |
| 634 | 617 |
| 635 | 618 |
| 636 void HAccessArgumentsAt::PrintDataTo(StringStream* stream) const { | 619 void HAccessArgumentsAt::PrintDataTo(StringStream* stream) const { |
| 637 arguments()->PrintNameTo(stream); | 620 arguments()->PrintNameTo(stream); |
| 638 stream->Add("["); | 621 stream->Add("["); |
| 639 index()->PrintNameTo(stream); | 622 index()->PrintNameTo(stream); |
| 640 stream->Add("], length "); | 623 stream->Add("], length "); |
| 641 length()->PrintNameTo(stream); | 624 length()->PrintNameTo(stream); |
| 642 } | 625 } |
| 643 | 626 |
| 644 | 627 |
| 645 void HCall::SetArgumentAt(int index, HPushArgument* push_argument) { | |
| 646 push_argument->set_argument_index(index); | |
| 647 SetOperandAt(index, push_argument); | |
| 648 } | |
| 649 | |
| 650 | |
| 651 void HCallConstantFunction::PrintDataTo(StringStream* stream) const { | |
| 652 if (IsApplyFunction()) { | |
| 653 stream->Add("SPECIAL function: apply"); | |
| 654 } else { | |
| 655 stream->Add("%s", *(function()->shared()->DebugName()->ToCString())); | |
| 656 } | |
| 657 HCall::PrintDataTo(stream); | |
| 658 } | |
| 659 | |
| 660 | |
| 661 void HControlInstruction::PrintDataTo(StringStream* stream) const { | 628 void HControlInstruction::PrintDataTo(StringStream* stream) const { |
| 662 if (FirstSuccessor() != NULL) { | 629 if (FirstSuccessor() != NULL) { |
| 663 int first_id = FirstSuccessor()->block_id(); | 630 int first_id = FirstSuccessor()->block_id(); |
| 664 if (SecondSuccessor() == NULL) { | 631 if (SecondSuccessor() == NULL) { |
| 665 stream->Add(" B%d", first_id); | 632 stream->Add(" B%d", first_id); |
| 666 } else { | 633 } else { |
| 667 int second_id = SecondSuccessor()->block_id(); | 634 int second_id = SecondSuccessor()->block_id(); |
| 668 stream->Add(" goto (B%d, B%d)", first_id, second_id); | 635 stream->Add(" goto (B%d, B%d)", first_id, second_id); |
| 669 } | 636 } |
| 670 } | 637 } |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 738 } | 705 } |
| 739 | 706 |
| 740 | 707 |
| 741 void HTypeofIs::PrintDataTo(StringStream* stream) const { | 708 void HTypeofIs::PrintDataTo(StringStream* stream) const { |
| 742 value()->PrintNameTo(stream); | 709 value()->PrintNameTo(stream); |
| 743 stream->Add(" == "); | 710 stream->Add(" == "); |
| 744 stream->Add(type_literal_->ToAsciiVector()); | 711 stream->Add(type_literal_->ToAsciiVector()); |
| 745 } | 712 } |
| 746 | 713 |
| 747 | 714 |
| 748 void HPushArgument::PrintDataTo(StringStream* stream) const { | |
| 749 HUnaryOperation::PrintDataTo(stream); | |
| 750 if (argument_index() != -1) { | |
| 751 stream->Add(" [%d]", argument_index_); | |
| 752 } | |
| 753 } | |
| 754 | |
| 755 | |
| 756 void HChange::PrintDataTo(StringStream* stream) const { | 715 void HChange::PrintDataTo(StringStream* stream) const { |
| 757 HUnaryOperation::PrintDataTo(stream); | 716 HUnaryOperation::PrintDataTo(stream); |
| 758 stream->Add(" %s to %s", from_.Mnemonic(), to_.Mnemonic()); | 717 stream->Add(" %s to %s", from_.Mnemonic(), to_.Mnemonic()); |
| 759 | 718 |
| 760 if (CanTruncateToInt32()) stream->Add(" truncating-int32"); | 719 if (CanTruncateToInt32()) stream->Add(" truncating-int32"); |
| 761 if (CheckFlag(kBailoutOnMinusZero)) stream->Add(" -0?"); | 720 if (CheckFlag(kBailoutOnMinusZero)) stream->Add(" -0?"); |
| 762 } | 721 } |
| 763 | 722 |
| 764 | 723 |
| 765 HCheckInstanceType* HCheckInstanceType::NewIsJSObjectOrJSFunction( | 724 HCheckInstanceType* HCheckInstanceType::NewIsJSObjectOrJSFunction( |
| 766 HValue* value) { | 725 HValue* value) { |
| 767 STATIC_ASSERT((LAST_JS_OBJECT_TYPE + 1) == JS_FUNCTION_TYPE); | 726 STATIC_ASSERT((LAST_JS_OBJECT_TYPE + 1) == JS_FUNCTION_TYPE); |
| 768 return new HCheckInstanceType(value, FIRST_JS_OBJECT_TYPE, JS_FUNCTION_TYPE); | 727 return new HCheckInstanceType(value, FIRST_JS_OBJECT_TYPE, JS_FUNCTION_TYPE); |
| 769 } | 728 } |
| 770 | 729 |
| 771 | 730 |
| 772 void HCheckMap::PrintDataTo(StringStream* stream) const { | 731 void HCheckMap::PrintDataTo(StringStream* stream) const { |
| 773 value()->PrintNameTo(stream); | 732 value()->PrintNameTo(stream); |
| 774 stream->Add(" %p", *map()); | 733 stream->Add(" %p", *map()); |
| 775 } | 734 } |
| 776 | 735 |
| 777 | 736 |
| 778 void HCheckFunction::PrintDataTo(StringStream* stream) const { | 737 void HCheckFunction::PrintDataTo(StringStream* stream) const { |
| 779 value()->PrintNameTo(stream); | 738 value()->PrintNameTo(stream); |
| 780 stream->Add(" %p", *target()); | 739 stream->Add(" %p", *target()); |
| 781 } | 740 } |
| 782 | 741 |
| 783 | 742 |
| 784 void HCallKeyed::PrintDataTo(StringStream* stream) const { | |
| 785 stream->Add("["); | |
| 786 key()->PrintNameTo(stream); | |
| 787 stream->Add("]("); | |
| 788 for (int i = 1; i < arguments_.length(); ++i) { | |
| 789 if (i != 1) stream->Add(", "); | |
| 790 arguments_.at(i)->PrintNameTo(stream); | |
| 791 } | |
| 792 stream->Add(")"); | |
| 793 } | |
| 794 | |
| 795 | |
| 796 void HCallNamed::PrintDataTo(StringStream* stream) const { | |
| 797 SmartPointer<char> name_string = name()->ToCString(); | |
| 798 stream->Add("%s ", *name_string); | |
| 799 HCall::PrintDataTo(stream); | |
| 800 } | |
| 801 | |
| 802 | |
| 803 void HCallGlobal::PrintDataTo(StringStream* stream) const { | |
| 804 SmartPointer<char> name_string = name()->ToCString(); | |
| 805 stream->Add("%s ", *name_string); | |
| 806 HCall::PrintDataTo(stream); | |
| 807 } | |
| 808 | |
| 809 | |
| 810 void HCallRuntime::PrintDataTo(StringStream* stream) const { | |
| 811 SmartPointer<char> name_string = name()->ToCString(); | |
| 812 stream->Add("%s ", *name_string); | |
| 813 HCall::PrintDataTo(stream); | |
| 814 } | |
| 815 | |
| 816 | |
| 817 void HCallStub::PrintDataTo(StringStream* stream) const { | 743 void HCallStub::PrintDataTo(StringStream* stream) const { |
| 818 HUnaryOperation::PrintDataTo(stream); | 744 stream->Add("%s ", |
| 819 stream->Add(" %s(%d)", | 745 CodeStub::MajorName(major_key_, false)); |
| 820 CodeStub::MajorName(major_key_, false), | 746 HUnaryCall::PrintDataTo(stream); |
| 821 argument_count_); | |
| 822 } | 747 } |
| 823 | 748 |
| 824 | 749 |
| 825 void HInstanceOf::PrintDataTo(StringStream* stream) const { | 750 void HInstanceOf::PrintDataTo(StringStream* stream) const { |
| 826 left()->PrintNameTo(stream); | 751 left()->PrintNameTo(stream); |
| 827 stream->Add(" "); | 752 stream->Add(" "); |
| 828 right()->PrintNameTo(stream); | 753 right()->PrintNameTo(stream); |
| 829 stream->Add(" "); | 754 stream->Add(" "); |
| 830 context()->PrintNameTo(stream); | 755 context()->PrintNameTo(stream); |
| 831 } | 756 } |
| (...skipping 715 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1547 | 1472 |
| 1548 | 1473 |
| 1549 void HCheckPrototypeMaps::Verify() { | 1474 void HCheckPrototypeMaps::Verify() { |
| 1550 HInstruction::Verify(); | 1475 HInstruction::Verify(); |
| 1551 ASSERT(HasNoUses()); | 1476 ASSERT(HasNoUses()); |
| 1552 } | 1477 } |
| 1553 | 1478 |
| 1554 #endif | 1479 #endif |
| 1555 | 1480 |
| 1556 } } // namespace v8::internal | 1481 } } // namespace v8::internal |
| OLD | NEW |