| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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 3613 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3624 | 3624 |
| 3625 | 3625 |
| 3626 // Implementation of type inference and type conversions. Calculates | 3626 // Implementation of type inference and type conversions. Calculates |
| 3627 // the inferred type of this instruction based on the input operands. | 3627 // the inferred type of this instruction based on the input operands. |
| 3628 | 3628 |
| 3629 HType HValue::CalculateInferredType() { | 3629 HType HValue::CalculateInferredType() { |
| 3630 return type_; | 3630 return type_; |
| 3631 } | 3631 } |
| 3632 | 3632 |
| 3633 | 3633 |
| 3634 HType HCheckMaps::CalculateInferredType() { | |
| 3635 return value()->type(); | |
| 3636 } | |
| 3637 | |
| 3638 | |
| 3639 HType HCheckFunction::CalculateInferredType() { | |
| 3640 return value()->type(); | |
| 3641 } | |
| 3642 | |
| 3643 | |
| 3644 HType HCheckHeapObject::CalculateInferredType() { | |
| 3645 return HType::NonPrimitive(); | |
| 3646 } | |
| 3647 | |
| 3648 | |
| 3649 HType HCheckSmi::CalculateInferredType() { | |
| 3650 return HType::Smi(); | |
| 3651 } | |
| 3652 | |
| 3653 | |
| 3654 HType HPhi::CalculateInferredType() { | 3634 HType HPhi::CalculateInferredType() { |
| 3655 if (OperandCount() == 0) return HType::Tagged(); | 3635 if (OperandCount() == 0) return HType::Tagged(); |
| 3656 HType result = OperandAt(0)->type(); | 3636 HType result = OperandAt(0)->type(); |
| 3657 for (int i = 1; i < OperandCount(); ++i) { | 3637 for (int i = 1; i < OperandCount(); ++i) { |
| 3658 HType current = OperandAt(i)->type(); | 3638 HType current = OperandAt(i)->type(); |
| 3659 result = result.Combine(current); | 3639 result = result.Combine(current); |
| 3660 } | 3640 } |
| 3661 return result; | 3641 return result; |
| 3662 } | 3642 } |
| 3663 | 3643 |
| 3664 | 3644 |
| 3665 HType HCompareGeneric::CalculateInferredType() { | |
| 3666 return HType::Boolean(); | |
| 3667 } | |
| 3668 | |
| 3669 | |
| 3670 HType HInstanceOf::CalculateInferredType() { | |
| 3671 return HType::Boolean(); | |
| 3672 } | |
| 3673 | |
| 3674 | |
| 3675 HType HInstanceOfKnownGlobal::CalculateInferredType() { | |
| 3676 return HType::Boolean(); | |
| 3677 } | |
| 3678 | |
| 3679 | |
| 3680 HType HChange::CalculateInferredType() { | 3645 HType HChange::CalculateInferredType() { |
| 3681 if (from().IsDouble() && to().IsTagged()) return HType::HeapNumber(); | 3646 if (from().IsDouble() && to().IsTagged()) return HType::HeapNumber(); |
| 3682 return type(); | 3647 return type(); |
| 3683 } | 3648 } |
| 3684 | 3649 |
| 3685 | 3650 |
| 3686 HType HBitwiseBinaryOperation::CalculateInferredType() { | |
| 3687 return HType::TaggedNumber(); | |
| 3688 } | |
| 3689 | |
| 3690 | |
| 3691 HType HArithmeticBinaryOperation::CalculateInferredType() { | |
| 3692 return HType::TaggedNumber(); | |
| 3693 } | |
| 3694 | |
| 3695 | |
| 3696 HType HAdd::CalculateInferredType() { | |
| 3697 return HType::Tagged(); | |
| 3698 } | |
| 3699 | |
| 3700 | |
| 3701 HType HBitNot::CalculateInferredType() { | |
| 3702 return HType::TaggedNumber(); | |
| 3703 } | |
| 3704 | |
| 3705 | |
| 3706 HType HUnaryMathOperation::CalculateInferredType() { | |
| 3707 return HType::TaggedNumber(); | |
| 3708 } | |
| 3709 | |
| 3710 | |
| 3711 Representation HUnaryMathOperation::RepresentationFromInputs() { | 3651 Representation HUnaryMathOperation::RepresentationFromInputs() { |
| 3712 Representation rep = representation(); | 3652 Representation rep = representation(); |
| 3713 // If any of the actual input representation is more general than what we | 3653 // If any of the actual input representation is more general than what we |
| 3714 // have so far but not Tagged, use that representation instead. | 3654 // have so far but not Tagged, use that representation instead. |
| 3715 Representation input_rep = value()->representation(); | 3655 Representation input_rep = value()->representation(); |
| 3716 if (!input_rep.IsTagged()) rep = rep.generalize(input_rep); | 3656 if (!input_rep.IsTagged()) rep = rep.generalize(input_rep); |
| 3717 return rep; | 3657 return rep; |
| 3718 } | 3658 } |
| 3719 | 3659 |
| 3720 | 3660 |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3798 } | 3738 } |
| 3799 } | 3739 } |
| 3800 | 3740 |
| 3801 | 3741 |
| 3802 void HAllocate::PrintDataTo(StringStream* stream) { | 3742 void HAllocate::PrintDataTo(StringStream* stream) { |
| 3803 size()->PrintNameTo(stream); | 3743 size()->PrintNameTo(stream); |
| 3804 if (!GuaranteedInNewSpace()) stream->Add(" (pretenure)"); | 3744 if (!GuaranteedInNewSpace()) stream->Add(" (pretenure)"); |
| 3805 } | 3745 } |
| 3806 | 3746 |
| 3807 | 3747 |
| 3808 HType HRegExpLiteral::CalculateInferredType() { | |
| 3809 return HType::JSObject(); | |
| 3810 } | |
| 3811 | |
| 3812 | |
| 3813 HType HFunctionLiteral::CalculateInferredType() { | |
| 3814 return HType::JSObject(); | |
| 3815 } | |
| 3816 | |
| 3817 | |
| 3818 HValue* HUnaryMathOperation::EnsureAndPropagateNotMinusZero( | 3748 HValue* HUnaryMathOperation::EnsureAndPropagateNotMinusZero( |
| 3819 BitVector* visited) { | 3749 BitVector* visited) { |
| 3820 visited->Add(id()); | 3750 visited->Add(id()); |
| 3821 if (representation().IsSmiOrInteger32() && | 3751 if (representation().IsSmiOrInteger32() && |
| 3822 !value()->representation().Equals(representation())) { | 3752 !value()->representation().Equals(representation())) { |
| 3823 if (value()->range() == NULL || value()->range()->CanBeMinusZero()) { | 3753 if (value()->range() == NULL || value()->range()->CanBeMinusZero()) { |
| 3824 SetFlag(kBailoutOnMinusZero); | 3754 SetFlag(kBailoutOnMinusZero); |
| 3825 } | 3755 } |
| 3826 } | 3756 } |
| 3827 if (RequiredInputRepresentation(0).IsSmiOrInteger32() && | 3757 if (RequiredInputRepresentation(0).IsSmiOrInteger32() && |
| (...skipping 702 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4530 case kBackingStore: | 4460 case kBackingStore: |
| 4531 if (!name_.is_null()) stream->Add(*String::cast(*name_)->ToCString()); | 4461 if (!name_.is_null()) stream->Add(*String::cast(*name_)->ToCString()); |
| 4532 stream->Add("[backing-store]"); | 4462 stream->Add("[backing-store]"); |
| 4533 break; | 4463 break; |
| 4534 } | 4464 } |
| 4535 | 4465 |
| 4536 stream->Add("@%d", offset()); | 4466 stream->Add("@%d", offset()); |
| 4537 } | 4467 } |
| 4538 | 4468 |
| 4539 } } // namespace v8::internal | 4469 } } // namespace v8::internal |
| OLD | NEW |