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 1476 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1487 HReturn(HValue* context, HValue* value, HValue* parameter_count = 0) { | 1487 HReturn(HValue* context, HValue* value, HValue* parameter_count = 0) { |
1488 SetOperandAt(0, value); | 1488 SetOperandAt(0, value); |
1489 SetOperandAt(1, context); | 1489 SetOperandAt(1, context); |
1490 SetOperandAt(2, parameter_count); | 1490 SetOperandAt(2, parameter_count); |
1491 } | 1491 } |
1492 }; | 1492 }; |
1493 | 1493 |
1494 | 1494 |
1495 class HAbnormalExit V8_FINAL : public HTemplateControlInstruction<0, 0> { | 1495 class HAbnormalExit V8_FINAL : public HTemplateControlInstruction<0, 0> { |
1496 public: | 1496 public: |
| 1497 DECLARE_INSTRUCTION_FACTORY_P0(HAbnormalExit); |
| 1498 |
1497 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { | 1499 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { |
1498 return Representation::None(); | 1500 return Representation::None(); |
1499 } | 1501 } |
1500 | 1502 |
1501 DECLARE_CONCRETE_INSTRUCTION(AbnormalExit) | 1503 DECLARE_CONCRETE_INSTRUCTION(AbnormalExit) |
| 1504 private: |
| 1505 HAbnormalExit() {} |
1502 }; | 1506 }; |
1503 | 1507 |
1504 | 1508 |
1505 class HUnaryOperation : public HTemplateInstruction<1> { | 1509 class HUnaryOperation : public HTemplateInstruction<1> { |
1506 public: | 1510 public: |
1507 HUnaryOperation(HValue* value, HType type = HType::Tagged()) | 1511 HUnaryOperation(HValue* value, HType type = HType::Tagged()) |
1508 : HTemplateInstruction<1>(type) { | 1512 : HTemplateInstruction<1>(type) { |
1509 SetOperandAt(0, value); | 1513 SetOperandAt(0, value); |
1510 } | 1514 } |
1511 | 1515 |
(...skipping 462 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1974 | 1978 |
1975 private: | 1979 private: |
1976 explicit HPushArgument(HValue* value) : HUnaryOperation(value) { | 1980 explicit HPushArgument(HValue* value) : HUnaryOperation(value) { |
1977 set_representation(Representation::Tagged()); | 1981 set_representation(Representation::Tagged()); |
1978 } | 1982 } |
1979 }; | 1983 }; |
1980 | 1984 |
1981 | 1985 |
1982 class HThisFunction V8_FINAL : public HTemplateInstruction<0> { | 1986 class HThisFunction V8_FINAL : public HTemplateInstruction<0> { |
1983 public: | 1987 public: |
1984 HThisFunction() { | 1988 DECLARE_INSTRUCTION_FACTORY_P0(HThisFunction); |
1985 set_representation(Representation::Tagged()); | |
1986 SetFlag(kUseGVN); | |
1987 } | |
1988 | 1989 |
1989 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { | 1990 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { |
1990 return Representation::None(); | 1991 return Representation::None(); |
1991 } | 1992 } |
1992 | 1993 |
1993 DECLARE_CONCRETE_INSTRUCTION(ThisFunction) | 1994 DECLARE_CONCRETE_INSTRUCTION(ThisFunction) |
1994 | 1995 |
1995 protected: | 1996 protected: |
1996 virtual bool DataEquals(HValue* other) V8_OVERRIDE { return true; } | 1997 virtual bool DataEquals(HValue* other) V8_OVERRIDE { return true; } |
1997 | 1998 |
1998 private: | 1999 private: |
| 2000 HThisFunction() { |
| 2001 set_representation(Representation::Tagged()); |
| 2002 SetFlag(kUseGVN); |
| 2003 } |
| 2004 |
1999 virtual bool IsDeletable() const V8_OVERRIDE { return true; } | 2005 virtual bool IsDeletable() const V8_OVERRIDE { return true; } |
2000 }; | 2006 }; |
2001 | 2007 |
2002 | 2008 |
2003 class HOuterContext V8_FINAL : public HUnaryOperation { | 2009 class HOuterContext V8_FINAL : public HUnaryOperation { |
2004 public: | 2010 public: |
2005 DECLARE_INSTRUCTION_FACTORY_P1(HOuterContext, HValue*); | 2011 DECLARE_INSTRUCTION_FACTORY_P1(HOuterContext, HValue*); |
2006 | 2012 |
2007 DECLARE_CONCRETE_INSTRUCTION(OuterContext); | 2013 DECLARE_CONCRETE_INSTRUCTION(OuterContext); |
2008 | 2014 |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2050 SetAllSideEffects(); | 2056 SetAllSideEffects(); |
2051 } | 2057 } |
2052 | 2058 |
2053 Handle<FixedArray> pairs_; | 2059 Handle<FixedArray> pairs_; |
2054 int flags_; | 2060 int flags_; |
2055 }; | 2061 }; |
2056 | 2062 |
2057 | 2063 |
2058 class HGlobalObject V8_FINAL : public HUnaryOperation { | 2064 class HGlobalObject V8_FINAL : public HUnaryOperation { |
2059 public: | 2065 public: |
2060 explicit HGlobalObject(HValue* context) : HUnaryOperation(context) { | 2066 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P0(HGlobalObject); |
2061 set_representation(Representation::Tagged()); | |
2062 SetFlag(kUseGVN); | |
2063 } | |
2064 | |
2065 static HGlobalObject* New(Zone* zone, HValue* context) { | |
2066 return new(zone) HGlobalObject(context); | |
2067 } | |
2068 | 2067 |
2069 DECLARE_CONCRETE_INSTRUCTION(GlobalObject) | 2068 DECLARE_CONCRETE_INSTRUCTION(GlobalObject) |
2070 | 2069 |
2071 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { | 2070 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { |
2072 return Representation::Tagged(); | 2071 return Representation::Tagged(); |
2073 } | 2072 } |
2074 | 2073 |
2075 protected: | 2074 protected: |
2076 virtual bool DataEquals(HValue* other) V8_OVERRIDE { return true; } | 2075 virtual bool DataEquals(HValue* other) V8_OVERRIDE { return true; } |
2077 | 2076 |
2078 private: | 2077 private: |
| 2078 explicit HGlobalObject(HValue* context) : HUnaryOperation(context) { |
| 2079 set_representation(Representation::Tagged()); |
| 2080 SetFlag(kUseGVN); |
| 2081 } |
| 2082 |
2079 virtual bool IsDeletable() const V8_OVERRIDE { return true; } | 2083 virtual bool IsDeletable() const V8_OVERRIDE { return true; } |
2080 }; | 2084 }; |
2081 | 2085 |
2082 | 2086 |
2083 class HGlobalReceiver V8_FINAL : public HUnaryOperation { | 2087 class HGlobalReceiver V8_FINAL : public HUnaryOperation { |
2084 public: | 2088 public: |
2085 DECLARE_INSTRUCTION_FACTORY_P1(HGlobalReceiver, HValue*); | 2089 DECLARE_INSTRUCTION_FACTORY_P1(HGlobalReceiver, HValue*); |
2086 | 2090 |
2087 DECLARE_CONCRETE_INSTRUCTION(GlobalReceiver) | 2091 DECLARE_CONCRETE_INSTRUCTION(GlobalReceiver) |
2088 | 2092 |
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2310 HCallGlobal(HValue* context, Handle<String> name, int argument_count) | 2314 HCallGlobal(HValue* context, Handle<String> name, int argument_count) |
2311 : HUnaryCall(context, argument_count), name_(name) { | 2315 : HUnaryCall(context, argument_count), name_(name) { |
2312 } | 2316 } |
2313 | 2317 |
2314 Handle<String> name_; | 2318 Handle<String> name_; |
2315 }; | 2319 }; |
2316 | 2320 |
2317 | 2321 |
2318 class HCallKnownGlobal V8_FINAL : public HCall<0> { | 2322 class HCallKnownGlobal V8_FINAL : public HCall<0> { |
2319 public: | 2323 public: |
2320 HCallKnownGlobal(Handle<JSFunction> target, int argument_count) | 2324 DECLARE_INSTRUCTION_FACTORY_P2(HCallKnownGlobal, Handle<JSFunction>, int); |
2321 : HCall<0>(argument_count), | |
2322 target_(target), | |
2323 formal_parameter_count_(target->shared()->formal_parameter_count()) { } | |
2324 | 2325 |
2325 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; | 2326 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; |
2326 | 2327 |
2327 Handle<JSFunction> target() const { return target_; } | 2328 Handle<JSFunction> target() const { return target_; } |
2328 int formal_parameter_count() const { return formal_parameter_count_; } | 2329 int formal_parameter_count() const { return formal_parameter_count_; } |
2329 | 2330 |
2330 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { | 2331 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { |
2331 return Representation::None(); | 2332 return Representation::None(); |
2332 } | 2333 } |
2333 | 2334 |
2334 DECLARE_CONCRETE_INSTRUCTION(CallKnownGlobal) | 2335 DECLARE_CONCRETE_INSTRUCTION(CallKnownGlobal) |
2335 | 2336 |
2336 private: | 2337 private: |
| 2338 HCallKnownGlobal(Handle<JSFunction> target, int argument_count) |
| 2339 : HCall<0>(argument_count), |
| 2340 target_(target), |
| 2341 formal_parameter_count_(target->shared()->formal_parameter_count()) { } |
| 2342 |
2337 Handle<JSFunction> target_; | 2343 Handle<JSFunction> target_; |
2338 int formal_parameter_count_; | 2344 int formal_parameter_count_; |
2339 }; | 2345 }; |
2340 | 2346 |
2341 | 2347 |
2342 class HCallNew V8_FINAL : public HBinaryCall { | 2348 class HCallNew V8_FINAL : public HBinaryCall { |
2343 public: | 2349 public: |
2344 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P2(HCallNew, HValue*, int); | 2350 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P2(HCallNew, HValue*, int); |
2345 | 2351 |
2346 HValue* context() { return first(); } | 2352 HValue* context() { return first(); } |
(...skipping 1368 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3715 HWrapReceiver(HValue* receiver, HValue* function) { | 3721 HWrapReceiver(HValue* receiver, HValue* function) { |
3716 set_representation(Representation::Tagged()); | 3722 set_representation(Representation::Tagged()); |
3717 SetOperandAt(0, receiver); | 3723 SetOperandAt(0, receiver); |
3718 SetOperandAt(1, function); | 3724 SetOperandAt(1, function); |
3719 } | 3725 } |
3720 }; | 3726 }; |
3721 | 3727 |
3722 | 3728 |
3723 class HApplyArguments V8_FINAL : public HTemplateInstruction<4> { | 3729 class HApplyArguments V8_FINAL : public HTemplateInstruction<4> { |
3724 public: | 3730 public: |
3725 HApplyArguments(HValue* function, | 3731 DECLARE_INSTRUCTION_FACTORY_P4(HApplyArguments, HValue*, HValue*, HValue*, |
3726 HValue* receiver, | 3732 HValue*); |
3727 HValue* length, | |
3728 HValue* elements) { | |
3729 set_representation(Representation::Tagged()); | |
3730 SetOperandAt(0, function); | |
3731 SetOperandAt(1, receiver); | |
3732 SetOperandAt(2, length); | |
3733 SetOperandAt(3, elements); | |
3734 SetAllSideEffects(); | |
3735 } | |
3736 | 3733 |
3737 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { | 3734 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { |
3738 // The length is untagged, all other inputs are tagged. | 3735 // The length is untagged, all other inputs are tagged. |
3739 return (index == 2) | 3736 return (index == 2) |
3740 ? Representation::Integer32() | 3737 ? Representation::Integer32() |
3741 : Representation::Tagged(); | 3738 : Representation::Tagged(); |
3742 } | 3739 } |
3743 | 3740 |
3744 HValue* function() { return OperandAt(0); } | 3741 HValue* function() { return OperandAt(0); } |
3745 HValue* receiver() { return OperandAt(1); } | 3742 HValue* receiver() { return OperandAt(1); } |
3746 HValue* length() { return OperandAt(2); } | 3743 HValue* length() { return OperandAt(2); } |
3747 HValue* elements() { return OperandAt(3); } | 3744 HValue* elements() { return OperandAt(3); } |
3748 | 3745 |
3749 DECLARE_CONCRETE_INSTRUCTION(ApplyArguments) | 3746 DECLARE_CONCRETE_INSTRUCTION(ApplyArguments) |
| 3747 |
| 3748 private: |
| 3749 HApplyArguments(HValue* function, |
| 3750 HValue* receiver, |
| 3751 HValue* length, |
| 3752 HValue* elements) { |
| 3753 set_representation(Representation::Tagged()); |
| 3754 SetOperandAt(0, function); |
| 3755 SetOperandAt(1, receiver); |
| 3756 SetOperandAt(2, length); |
| 3757 SetOperandAt(3, elements); |
| 3758 SetAllSideEffects(); |
| 3759 } |
3750 }; | 3760 }; |
3751 | 3761 |
3752 | 3762 |
3753 class HArgumentsElements V8_FINAL : public HTemplateInstruction<0> { | 3763 class HArgumentsElements V8_FINAL : public HTemplateInstruction<0> { |
3754 public: | 3764 public: |
3755 DECLARE_INSTRUCTION_FACTORY_P1(HArgumentsElements, bool); | 3765 DECLARE_INSTRUCTION_FACTORY_P1(HArgumentsElements, bool); |
3756 | 3766 |
3757 DECLARE_CONCRETE_INSTRUCTION(ArgumentsElements) | 3767 DECLARE_CONCRETE_INSTRUCTION(ArgumentsElements) |
3758 | 3768 |
3759 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { | 3769 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3797 set_representation(Representation::Integer32()); | 3807 set_representation(Representation::Integer32()); |
3798 SetFlag(kUseGVN); | 3808 SetFlag(kUseGVN); |
3799 } | 3809 } |
3800 | 3810 |
3801 virtual bool IsDeletable() const V8_OVERRIDE { return true; } | 3811 virtual bool IsDeletable() const V8_OVERRIDE { return true; } |
3802 }; | 3812 }; |
3803 | 3813 |
3804 | 3814 |
3805 class HAccessArgumentsAt V8_FINAL : public HTemplateInstruction<3> { | 3815 class HAccessArgumentsAt V8_FINAL : public HTemplateInstruction<3> { |
3806 public: | 3816 public: |
3807 HAccessArgumentsAt(HValue* arguments, HValue* length, HValue* index) { | 3817 DECLARE_INSTRUCTION_FACTORY_P3(HAccessArgumentsAt, HValue*, HValue*, HValue*); |
3808 set_representation(Representation::Tagged()); | |
3809 SetFlag(kUseGVN); | |
3810 SetOperandAt(0, arguments); | |
3811 SetOperandAt(1, length); | |
3812 SetOperandAt(2, index); | |
3813 } | |
3814 | 3818 |
3815 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; | 3819 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; |
3816 | 3820 |
3817 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { | 3821 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { |
3818 // The arguments elements is considered tagged. | 3822 // The arguments elements is considered tagged. |
3819 return index == 0 | 3823 return index == 0 |
3820 ? Representation::Tagged() | 3824 ? Representation::Tagged() |
3821 : Representation::Integer32(); | 3825 : Representation::Integer32(); |
3822 } | 3826 } |
3823 | 3827 |
3824 HValue* arguments() { return OperandAt(0); } | 3828 HValue* arguments() { return OperandAt(0); } |
3825 HValue* length() { return OperandAt(1); } | 3829 HValue* length() { return OperandAt(1); } |
3826 HValue* index() { return OperandAt(2); } | 3830 HValue* index() { return OperandAt(2); } |
3827 | 3831 |
3828 DECLARE_CONCRETE_INSTRUCTION(AccessArgumentsAt) | 3832 DECLARE_CONCRETE_INSTRUCTION(AccessArgumentsAt) |
3829 | 3833 |
| 3834 private: |
| 3835 HAccessArgumentsAt(HValue* arguments, HValue* length, HValue* index) { |
| 3836 set_representation(Representation::Tagged()); |
| 3837 SetFlag(kUseGVN); |
| 3838 SetOperandAt(0, arguments); |
| 3839 SetOperandAt(1, length); |
| 3840 SetOperandAt(2, index); |
| 3841 } |
| 3842 |
3830 virtual bool DataEquals(HValue* other) V8_OVERRIDE { return true; } | 3843 virtual bool DataEquals(HValue* other) V8_OVERRIDE { return true; } |
3831 }; | 3844 }; |
3832 | 3845 |
3833 | 3846 |
3834 class HBoundsCheckBaseIndexInformation; | 3847 class HBoundsCheckBaseIndexInformation; |
3835 | 3848 |
3836 | 3849 |
3837 class HBoundsCheck V8_FINAL : public HTemplateInstruction<2> { | 3850 class HBoundsCheck V8_FINAL : public HTemplateInstruction<2> { |
3838 public: | 3851 public: |
3839 DECLARE_INSTRUCTION_FACTORY_P2(HBoundsCheck, HValue*, HValue*); | 3852 DECLARE_INSTRUCTION_FACTORY_P2(HBoundsCheck, HValue*, HValue*); |
(...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4044 } | 4057 } |
4045 | 4058 |
4046 DECLARE_ABSTRACT_INSTRUCTION(ArithmeticBinaryOperation) | 4059 DECLARE_ABSTRACT_INSTRUCTION(ArithmeticBinaryOperation) |
4047 private: | 4060 private: |
4048 virtual bool IsDeletable() const V8_OVERRIDE { return true; } | 4061 virtual bool IsDeletable() const V8_OVERRIDE { return true; } |
4049 }; | 4062 }; |
4050 | 4063 |
4051 | 4064 |
4052 class HCompareGeneric V8_FINAL : public HBinaryOperation { | 4065 class HCompareGeneric V8_FINAL : public HBinaryOperation { |
4053 public: | 4066 public: |
4054 HCompareGeneric(HValue* context, | 4067 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P3(HCompareGeneric, HValue*, |
4055 HValue* left, | 4068 HValue*, Token::Value); |
4056 HValue* right, | |
4057 Token::Value token) | |
4058 : HBinaryOperation(context, left, right, HType::Boolean()), | |
4059 token_(token) { | |
4060 ASSERT(Token::IsCompareOp(token)); | |
4061 set_representation(Representation::Tagged()); | |
4062 SetAllSideEffects(); | |
4063 } | |
4064 | 4069 |
4065 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { | 4070 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { |
4066 return index == 0 | 4071 return index == 0 |
4067 ? Representation::Tagged() | 4072 ? Representation::Tagged() |
4068 : representation(); | 4073 : representation(); |
4069 } | 4074 } |
4070 | 4075 |
4071 Token::Value token() const { return token_; } | 4076 Token::Value token() const { return token_; } |
4072 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; | 4077 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; |
4073 | 4078 |
4074 DECLARE_CONCRETE_INSTRUCTION(CompareGeneric) | 4079 DECLARE_CONCRETE_INSTRUCTION(CompareGeneric) |
4075 | 4080 |
4076 private: | 4081 private: |
| 4082 HCompareGeneric(HValue* context, |
| 4083 HValue* left, |
| 4084 HValue* right, |
| 4085 Token::Value token) |
| 4086 : HBinaryOperation(context, left, right, HType::Boolean()), |
| 4087 token_(token) { |
| 4088 ASSERT(Token::IsCompareOp(token)); |
| 4089 set_representation(Representation::Tagged()); |
| 4090 SetAllSideEffects(); |
| 4091 } |
| 4092 |
4077 Token::Value token_; | 4093 Token::Value token_; |
4078 }; | 4094 }; |
4079 | 4095 |
4080 | 4096 |
4081 class HCompareNumericAndBranch : public HTemplateControlInstruction<2, 2> { | 4097 class HCompareNumericAndBranch : public HTemplateControlInstruction<2, 2> { |
4082 public: | 4098 public: |
4083 DECLARE_INSTRUCTION_FACTORY_P3(HCompareNumericAndBranch, | 4099 DECLARE_INSTRUCTION_FACTORY_P3(HCompareNumericAndBranch, |
4084 HValue*, HValue*, Token::Value); | 4100 HValue*, HValue*, Token::Value); |
4085 DECLARE_INSTRUCTION_FACTORY_P5(HCompareNumericAndBranch, | 4101 DECLARE_INSTRUCTION_FACTORY_P5(HCompareNumericAndBranch, |
4086 HValue*, HValue*, Token::Value, | 4102 HValue*, HValue*, Token::Value, |
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4318 set_representation(Representation::Tagged()); | 4334 set_representation(Representation::Tagged()); |
4319 SetGVNFlag(kChangesNewSpacePromotion); | 4335 SetGVNFlag(kChangesNewSpacePromotion); |
4320 } | 4336 } |
4321 | 4337 |
4322 Token::Value token_; | 4338 Token::Value token_; |
4323 }; | 4339 }; |
4324 | 4340 |
4325 | 4341 |
4326 class HIsConstructCallAndBranch : public HTemplateControlInstruction<2, 0> { | 4342 class HIsConstructCallAndBranch : public HTemplateControlInstruction<2, 0> { |
4327 public: | 4343 public: |
| 4344 DECLARE_INSTRUCTION_FACTORY_P0(HIsConstructCallAndBranch); |
| 4345 |
4328 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { | 4346 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { |
4329 return Representation::None(); | 4347 return Representation::None(); |
4330 } | 4348 } |
4331 | 4349 |
4332 DECLARE_CONCRETE_INSTRUCTION(IsConstructCallAndBranch) | 4350 DECLARE_CONCRETE_INSTRUCTION(IsConstructCallAndBranch) |
| 4351 private: |
| 4352 HIsConstructCallAndBranch() {} |
4333 }; | 4353 }; |
4334 | 4354 |
4335 | 4355 |
4336 class HHasInstanceTypeAndBranch V8_FINAL : public HUnaryControlInstruction { | 4356 class HHasInstanceTypeAndBranch V8_FINAL : public HUnaryControlInstruction { |
4337 public: | 4357 public: |
4338 DECLARE_INSTRUCTION_FACTORY_P2( | 4358 DECLARE_INSTRUCTION_FACTORY_P2( |
4339 HHasInstanceTypeAndBranch, HValue*, InstanceType); | 4359 HHasInstanceTypeAndBranch, HValue*, InstanceType); |
4340 DECLARE_INSTRUCTION_FACTORY_P3( | 4360 DECLARE_INSTRUCTION_FACTORY_P3( |
4341 HHasInstanceTypeAndBranch, HValue*, InstanceType, InstanceType); | 4361 HHasInstanceTypeAndBranch, HValue*, InstanceType, InstanceType); |
4342 | 4362 |
(...skipping 16 matching lines...) Expand all Loading... |
4359 ASSERT(to == LAST_TYPE); // Others not implemented yet in backend. | 4379 ASSERT(to == LAST_TYPE); // Others not implemented yet in backend. |
4360 } | 4380 } |
4361 | 4381 |
4362 InstanceType from_; | 4382 InstanceType from_; |
4363 InstanceType to_; // Inclusive range, not all combinations work. | 4383 InstanceType to_; // Inclusive range, not all combinations work. |
4364 }; | 4384 }; |
4365 | 4385 |
4366 | 4386 |
4367 class HHasCachedArrayIndexAndBranch V8_FINAL : public HUnaryControlInstruction { | 4387 class HHasCachedArrayIndexAndBranch V8_FINAL : public HUnaryControlInstruction { |
4368 public: | 4388 public: |
4369 explicit HHasCachedArrayIndexAndBranch(HValue* value) | 4389 DECLARE_INSTRUCTION_FACTORY_P1(HHasCachedArrayIndexAndBranch, HValue*); |
4370 : HUnaryControlInstruction(value, NULL, NULL) { } | |
4371 | 4390 |
4372 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { | 4391 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { |
4373 return Representation::Tagged(); | 4392 return Representation::Tagged(); |
4374 } | 4393 } |
4375 | 4394 |
4376 DECLARE_CONCRETE_INSTRUCTION(HasCachedArrayIndexAndBranch) | 4395 DECLARE_CONCRETE_INSTRUCTION(HasCachedArrayIndexAndBranch) |
| 4396 private: |
| 4397 explicit HHasCachedArrayIndexAndBranch(HValue* value) |
| 4398 : HUnaryControlInstruction(value, NULL, NULL) { } |
4377 }; | 4399 }; |
4378 | 4400 |
4379 | 4401 |
4380 class HGetCachedArrayIndex V8_FINAL : public HUnaryOperation { | 4402 class HGetCachedArrayIndex V8_FINAL : public HUnaryOperation { |
4381 public: | 4403 public: |
4382 explicit HGetCachedArrayIndex(HValue* value) : HUnaryOperation(value) { | 4404 DECLARE_INSTRUCTION_FACTORY_P1(HGetCachedArrayIndex, HValue*); |
4383 set_representation(Representation::Tagged()); | |
4384 SetFlag(kUseGVN); | |
4385 } | |
4386 | 4405 |
4387 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { | 4406 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { |
4388 return Representation::Tagged(); | 4407 return Representation::Tagged(); |
4389 } | 4408 } |
4390 | 4409 |
4391 DECLARE_CONCRETE_INSTRUCTION(GetCachedArrayIndex) | 4410 DECLARE_CONCRETE_INSTRUCTION(GetCachedArrayIndex) |
4392 | 4411 |
4393 protected: | 4412 protected: |
4394 virtual bool DataEquals(HValue* other) V8_OVERRIDE { return true; } | 4413 virtual bool DataEquals(HValue* other) V8_OVERRIDE { return true; } |
4395 | 4414 |
4396 private: | 4415 private: |
| 4416 explicit HGetCachedArrayIndex(HValue* value) : HUnaryOperation(value) { |
| 4417 set_representation(Representation::Tagged()); |
| 4418 SetFlag(kUseGVN); |
| 4419 } |
| 4420 |
4397 virtual bool IsDeletable() const V8_OVERRIDE { return true; } | 4421 virtual bool IsDeletable() const V8_OVERRIDE { return true; } |
4398 }; | 4422 }; |
4399 | 4423 |
4400 | 4424 |
4401 class HClassOfTestAndBranch V8_FINAL : public HUnaryControlInstruction { | 4425 class HClassOfTestAndBranch V8_FINAL : public HUnaryControlInstruction { |
4402 public: | 4426 public: |
4403 HClassOfTestAndBranch(HValue* value, Handle<String> class_name) | 4427 DECLARE_INSTRUCTION_FACTORY_P2(HClassOfTestAndBranch, HValue*, |
4404 : HUnaryControlInstruction(value, NULL, NULL), | 4428 Handle<String>); |
4405 class_name_(class_name) { } | |
4406 | 4429 |
4407 DECLARE_CONCRETE_INSTRUCTION(ClassOfTestAndBranch) | 4430 DECLARE_CONCRETE_INSTRUCTION(ClassOfTestAndBranch) |
4408 | 4431 |
4409 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { | 4432 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { |
4410 return Representation::Tagged(); | 4433 return Representation::Tagged(); |
4411 } | 4434 } |
4412 | 4435 |
4413 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; | 4436 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; |
4414 | 4437 |
4415 Handle<String> class_name() const { return class_name_; } | 4438 Handle<String> class_name() const { return class_name_; } |
4416 | 4439 |
4417 private: | 4440 private: |
| 4441 HClassOfTestAndBranch(HValue* value, Handle<String> class_name) |
| 4442 : HUnaryControlInstruction(value, NULL, NULL), |
| 4443 class_name_(class_name) { } |
| 4444 |
4418 Handle<String> class_name_; | 4445 Handle<String> class_name_; |
4419 }; | 4446 }; |
4420 | 4447 |
4421 | 4448 |
4422 class HTypeofIsAndBranch V8_FINAL : public HUnaryControlInstruction { | 4449 class HTypeofIsAndBranch V8_FINAL : public HUnaryControlInstruction { |
4423 public: | 4450 public: |
4424 HTypeofIsAndBranch(HValue* value, Handle<String> type_literal) | 4451 DECLARE_INSTRUCTION_FACTORY_P2(HTypeofIsAndBranch, HValue*, Handle<String>); |
4425 : HUnaryControlInstruction(value, NULL, NULL), | |
4426 type_literal_(type_literal) { } | |
4427 | 4452 |
4428 Handle<String> type_literal() { return type_literal_; } | 4453 Handle<String> type_literal() { return type_literal_; } |
4429 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; | 4454 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; |
4430 | 4455 |
4431 DECLARE_CONCRETE_INSTRUCTION(TypeofIsAndBranch) | 4456 DECLARE_CONCRETE_INSTRUCTION(TypeofIsAndBranch) |
4432 | 4457 |
4433 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { | 4458 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { |
4434 return Representation::Tagged(); | 4459 return Representation::Tagged(); |
4435 } | 4460 } |
4436 | 4461 |
4437 private: | 4462 private: |
| 4463 HTypeofIsAndBranch(HValue* value, Handle<String> type_literal) |
| 4464 : HUnaryControlInstruction(value, NULL, NULL), |
| 4465 type_literal_(type_literal) { } |
| 4466 |
4438 Handle<String> type_literal_; | 4467 Handle<String> type_literal_; |
4439 }; | 4468 }; |
4440 | 4469 |
4441 | 4470 |
4442 class HInstanceOf V8_FINAL : public HBinaryOperation { | 4471 class HInstanceOf V8_FINAL : public HBinaryOperation { |
4443 public: | 4472 public: |
4444 HInstanceOf(HValue* context, HValue* left, HValue* right) | 4473 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P2(HInstanceOf, HValue*, HValue*); |
4445 : HBinaryOperation(context, left, right, HType::Boolean()) { | |
4446 set_representation(Representation::Tagged()); | |
4447 SetAllSideEffects(); | |
4448 } | |
4449 | 4474 |
4450 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { | 4475 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { |
4451 return Representation::Tagged(); | 4476 return Representation::Tagged(); |
4452 } | 4477 } |
4453 | 4478 |
4454 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; | 4479 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; |
4455 | 4480 |
4456 DECLARE_CONCRETE_INSTRUCTION(InstanceOf) | 4481 DECLARE_CONCRETE_INSTRUCTION(InstanceOf) |
| 4482 |
| 4483 private: |
| 4484 HInstanceOf(HValue* context, HValue* left, HValue* right) |
| 4485 : HBinaryOperation(context, left, right, HType::Boolean()) { |
| 4486 set_representation(Representation::Tagged()); |
| 4487 SetAllSideEffects(); |
| 4488 } |
4457 }; | 4489 }; |
4458 | 4490 |
4459 | 4491 |
4460 class HInstanceOfKnownGlobal V8_FINAL : public HTemplateInstruction<2> { | 4492 class HInstanceOfKnownGlobal V8_FINAL : public HTemplateInstruction<2> { |
4461 public: | 4493 public: |
4462 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P2(HInstanceOfKnownGlobal, | 4494 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P2(HInstanceOfKnownGlobal, |
4463 HValue*, | 4495 HValue*, |
4464 Handle<JSFunction>); | 4496 Handle<JSFunction>); |
4465 | 4497 |
4466 HValue* context() { return OperandAt(0); } | 4498 HValue* context() { return OperandAt(0); } |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4522 } | 4554 } |
4523 | 4555 |
4524 virtual bool IsDeletable() const V8_OVERRIDE { | 4556 virtual bool IsDeletable() const V8_OVERRIDE { |
4525 return !right()->representation().IsTagged(); | 4557 return !right()->representation().IsTagged(); |
4526 } | 4558 } |
4527 }; | 4559 }; |
4528 | 4560 |
4529 | 4561 |
4530 class HRandom V8_FINAL : public HTemplateInstruction<1> { | 4562 class HRandom V8_FINAL : public HTemplateInstruction<1> { |
4531 public: | 4563 public: |
4532 explicit HRandom(HValue* global_object) { | 4564 DECLARE_INSTRUCTION_FACTORY_P1(HRandom, HValue*); |
4533 SetOperandAt(0, global_object); | |
4534 set_representation(Representation::Double()); | |
4535 } | |
4536 | 4565 |
4537 HValue* global_object() { return OperandAt(0); } | 4566 HValue* global_object() { return OperandAt(0); } |
4538 | 4567 |
4539 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { | 4568 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { |
4540 return Representation::Tagged(); | 4569 return Representation::Tagged(); |
4541 } | 4570 } |
4542 | 4571 |
4543 DECLARE_CONCRETE_INSTRUCTION(Random) | 4572 DECLARE_CONCRETE_INSTRUCTION(Random) |
4544 | 4573 |
4545 private: | 4574 private: |
| 4575 explicit HRandom(HValue* global_object) { |
| 4576 SetOperandAt(0, global_object); |
| 4577 set_representation(Representation::Double()); |
| 4578 } |
| 4579 |
4546 virtual bool IsDeletable() const V8_OVERRIDE { return true; } | 4580 virtual bool IsDeletable() const V8_OVERRIDE { return true; } |
4547 }; | 4581 }; |
4548 | 4582 |
4549 | 4583 |
4550 class HAdd V8_FINAL : public HArithmeticBinaryOperation { | 4584 class HAdd V8_FINAL : public HArithmeticBinaryOperation { |
4551 public: | 4585 public: |
4552 static HInstruction* New(Zone* zone, | 4586 static HInstruction* New(Zone* zone, |
4553 HValue* context, | 4587 HValue* context, |
4554 HValue* left, | 4588 HValue* left, |
4555 HValue* right); | 4589 HValue* right); |
(...skipping 616 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5172 } | 5206 } |
5173 | 5207 |
5174 HEnvironment* environment_; | 5208 HEnvironment* environment_; |
5175 int index_; | 5209 int index_; |
5176 HPhi* incoming_value_; | 5210 HPhi* incoming_value_; |
5177 }; | 5211 }; |
5178 | 5212 |
5179 | 5213 |
5180 class HLoadGlobalCell V8_FINAL : public HTemplateInstruction<0> { | 5214 class HLoadGlobalCell V8_FINAL : public HTemplateInstruction<0> { |
5181 public: | 5215 public: |
5182 HLoadGlobalCell(Handle<Cell> cell, PropertyDetails details) | 5216 DECLARE_INSTRUCTION_FACTORY_P2(HLoadGlobalCell, Handle<Cell>, |
5183 : cell_(Unique<Cell>::CreateUninitialized(cell)), details_(details) { | 5217 PropertyDetails); |
5184 set_representation(Representation::Tagged()); | |
5185 SetFlag(kUseGVN); | |
5186 SetGVNFlag(kDependsOnGlobalVars); | |
5187 } | |
5188 | 5218 |
5189 Unique<Cell> cell() const { return cell_; } | 5219 Unique<Cell> cell() const { return cell_; } |
5190 bool RequiresHoleCheck() const; | 5220 bool RequiresHoleCheck() const; |
5191 | 5221 |
5192 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; | 5222 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; |
5193 | 5223 |
5194 virtual intptr_t Hashcode() V8_OVERRIDE { | 5224 virtual intptr_t Hashcode() V8_OVERRIDE { |
5195 return cell_.Hashcode(); | 5225 return cell_.Hashcode(); |
5196 } | 5226 } |
5197 | 5227 |
5198 virtual void FinalizeUniqueness() V8_OVERRIDE { | 5228 virtual void FinalizeUniqueness() V8_OVERRIDE { |
5199 cell_ = Unique<Cell>(cell_.handle()); | 5229 cell_ = Unique<Cell>(cell_.handle()); |
5200 } | 5230 } |
5201 | 5231 |
5202 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { | 5232 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { |
5203 return Representation::None(); | 5233 return Representation::None(); |
5204 } | 5234 } |
5205 | 5235 |
5206 DECLARE_CONCRETE_INSTRUCTION(LoadGlobalCell) | 5236 DECLARE_CONCRETE_INSTRUCTION(LoadGlobalCell) |
5207 | 5237 |
5208 protected: | 5238 protected: |
5209 virtual bool DataEquals(HValue* other) V8_OVERRIDE { | 5239 virtual bool DataEquals(HValue* other) V8_OVERRIDE { |
5210 return cell_ == HLoadGlobalCell::cast(other)->cell_; | 5240 return cell_ == HLoadGlobalCell::cast(other)->cell_; |
5211 } | 5241 } |
5212 | 5242 |
5213 private: | 5243 private: |
| 5244 HLoadGlobalCell(Handle<Cell> cell, PropertyDetails details) |
| 5245 : cell_(Unique<Cell>::CreateUninitialized(cell)), details_(details) { |
| 5246 set_representation(Representation::Tagged()); |
| 5247 SetFlag(kUseGVN); |
| 5248 SetGVNFlag(kDependsOnGlobalVars); |
| 5249 } |
| 5250 |
5214 virtual bool IsDeletable() const V8_OVERRIDE { return !RequiresHoleCheck(); } | 5251 virtual bool IsDeletable() const V8_OVERRIDE { return !RequiresHoleCheck(); } |
5215 | 5252 |
5216 Unique<Cell> cell_; | 5253 Unique<Cell> cell_; |
5217 PropertyDetails details_; | 5254 PropertyDetails details_; |
5218 }; | 5255 }; |
5219 | 5256 |
5220 | 5257 |
5221 class HLoadGlobalGeneric V8_FINAL : public HTemplateInstruction<2> { | 5258 class HLoadGlobalGeneric V8_FINAL : public HTemplateInstruction<2> { |
5222 public: | 5259 public: |
5223 HLoadGlobalGeneric(HValue* context, | 5260 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P3(HLoadGlobalGeneric, HValue*, |
5224 HValue* global_object, | 5261 Handle<Object>, bool); |
5225 Handle<Object> name, | |
5226 bool for_typeof) | |
5227 : name_(name), | |
5228 for_typeof_(for_typeof) { | |
5229 SetOperandAt(0, context); | |
5230 SetOperandAt(1, global_object); | |
5231 set_representation(Representation::Tagged()); | |
5232 SetAllSideEffects(); | |
5233 } | |
5234 | 5262 |
5235 HValue* context() { return OperandAt(0); } | 5263 HValue* context() { return OperandAt(0); } |
5236 HValue* global_object() { return OperandAt(1); } | 5264 HValue* global_object() { return OperandAt(1); } |
5237 Handle<Object> name() const { return name_; } | 5265 Handle<Object> name() const { return name_; } |
5238 bool for_typeof() const { return for_typeof_; } | 5266 bool for_typeof() const { return for_typeof_; } |
5239 | 5267 |
5240 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; | 5268 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; |
5241 | 5269 |
5242 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { | 5270 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { |
5243 return Representation::Tagged(); | 5271 return Representation::Tagged(); |
5244 } | 5272 } |
5245 | 5273 |
5246 DECLARE_CONCRETE_INSTRUCTION(LoadGlobalGeneric) | 5274 DECLARE_CONCRETE_INSTRUCTION(LoadGlobalGeneric) |
5247 | 5275 |
5248 private: | 5276 private: |
| 5277 HLoadGlobalGeneric(HValue* context, |
| 5278 HValue* global_object, |
| 5279 Handle<Object> name, |
| 5280 bool for_typeof) |
| 5281 : name_(name), |
| 5282 for_typeof_(for_typeof) { |
| 5283 SetOperandAt(0, context); |
| 5284 SetOperandAt(1, global_object); |
| 5285 set_representation(Representation::Tagged()); |
| 5286 SetAllSideEffects(); |
| 5287 } |
| 5288 |
5249 Handle<Object> name_; | 5289 Handle<Object> name_; |
5250 bool for_typeof_; | 5290 bool for_typeof_; |
5251 }; | 5291 }; |
5252 | 5292 |
5253 | 5293 |
5254 class HAllocate V8_FINAL : public HTemplateInstruction<2> { | 5294 class HAllocate V8_FINAL : public HTemplateInstruction<2> { |
5255 public: | 5295 public: |
5256 static HAllocate* New(Zone* zone, | 5296 static HAllocate* New(Zone* zone, |
5257 HValue* context, | 5297 HValue* context, |
5258 HValue* size, | 5298 HValue* size, |
(...skipping 730 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5989 } | 6029 } |
5990 | 6030 |
5991 virtual bool IsDeletable() const V8_OVERRIDE { return true; } | 6031 virtual bool IsDeletable() const V8_OVERRIDE { return true; } |
5992 | 6032 |
5993 HObjectAccess access_; | 6033 HObjectAccess access_; |
5994 }; | 6034 }; |
5995 | 6035 |
5996 | 6036 |
5997 class HLoadNamedGeneric V8_FINAL : public HTemplateInstruction<2> { | 6037 class HLoadNamedGeneric V8_FINAL : public HTemplateInstruction<2> { |
5998 public: | 6038 public: |
5999 HLoadNamedGeneric(HValue* context, HValue* object, Handle<Object> name) | 6039 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P2(HLoadNamedGeneric, HValue*, |
6000 : name_(name) { | 6040 Handle<Object>); |
6001 SetOperandAt(0, context); | |
6002 SetOperandAt(1, object); | |
6003 set_representation(Representation::Tagged()); | |
6004 SetAllSideEffects(); | |
6005 } | |
6006 | 6041 |
6007 HValue* context() { return OperandAt(0); } | 6042 HValue* context() { return OperandAt(0); } |
6008 HValue* object() { return OperandAt(1); } | 6043 HValue* object() { return OperandAt(1); } |
6009 Handle<Object> name() const { return name_; } | 6044 Handle<Object> name() const { return name_; } |
6010 | 6045 |
6011 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { | 6046 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { |
6012 return Representation::Tagged(); | 6047 return Representation::Tagged(); |
6013 } | 6048 } |
6014 | 6049 |
6015 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; | 6050 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; |
6016 | 6051 |
6017 DECLARE_CONCRETE_INSTRUCTION(LoadNamedGeneric) | 6052 DECLARE_CONCRETE_INSTRUCTION(LoadNamedGeneric) |
6018 | 6053 |
6019 private: | 6054 private: |
| 6055 HLoadNamedGeneric(HValue* context, HValue* object, Handle<Object> name) |
| 6056 : name_(name) { |
| 6057 SetOperandAt(0, context); |
| 6058 SetOperandAt(1, object); |
| 6059 set_representation(Representation::Tagged()); |
| 6060 SetAllSideEffects(); |
| 6061 } |
| 6062 |
6020 Handle<Object> name_; | 6063 Handle<Object> name_; |
6021 }; | 6064 }; |
6022 | 6065 |
6023 | 6066 |
6024 class HLoadFunctionPrototype V8_FINAL : public HUnaryOperation { | 6067 class HLoadFunctionPrototype V8_FINAL : public HUnaryOperation { |
6025 public: | 6068 public: |
6026 explicit HLoadFunctionPrototype(HValue* function) | 6069 DECLARE_INSTRUCTION_FACTORY_P1(HLoadFunctionPrototype, HValue*); |
6027 : HUnaryOperation(function) { | |
6028 set_representation(Representation::Tagged()); | |
6029 SetFlag(kUseGVN); | |
6030 SetGVNFlag(kDependsOnCalls); | |
6031 } | |
6032 | 6070 |
6033 HValue* function() { return OperandAt(0); } | 6071 HValue* function() { return OperandAt(0); } |
6034 | 6072 |
6035 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { | 6073 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { |
6036 return Representation::Tagged(); | 6074 return Representation::Tagged(); |
6037 } | 6075 } |
6038 | 6076 |
6039 DECLARE_CONCRETE_INSTRUCTION(LoadFunctionPrototype) | 6077 DECLARE_CONCRETE_INSTRUCTION(LoadFunctionPrototype) |
6040 | 6078 |
6041 protected: | 6079 protected: |
6042 virtual bool DataEquals(HValue* other) V8_OVERRIDE { return true; } | 6080 virtual bool DataEquals(HValue* other) V8_OVERRIDE { return true; } |
| 6081 |
| 6082 private: |
| 6083 explicit HLoadFunctionPrototype(HValue* function) |
| 6084 : HUnaryOperation(function) { |
| 6085 set_representation(Representation::Tagged()); |
| 6086 SetFlag(kUseGVN); |
| 6087 SetGVNFlag(kDependsOnCalls); |
| 6088 } |
6043 }; | 6089 }; |
6044 | 6090 |
6045 class ArrayInstructionInterface { | 6091 class ArrayInstructionInterface { |
6046 public: | 6092 public: |
6047 virtual HValue* GetKey() = 0; | 6093 virtual HValue* GetKey() = 0; |
6048 virtual void SetKey(HValue* key) = 0; | 6094 virtual void SetKey(HValue* key) = 0; |
6049 virtual void SetIndexOffset(uint32_t index_offset) = 0; | 6095 virtual void SetIndexOffset(uint32_t index_offset) = 0; |
6050 virtual bool IsDehoisted() = 0; | 6096 virtual bool IsDehoisted() = 0; |
6051 virtual void SetDehoisted(bool is_dehoisted) = 0; | 6097 virtual void SetDehoisted(bool is_dehoisted) = 0; |
6052 virtual ~ArrayInstructionInterface() { }; | 6098 virtual ~ArrayInstructionInterface() { }; |
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6220 {}; // NOLINT | 6266 {}; // NOLINT |
6221 class IsDehoistedField: | 6267 class IsDehoistedField: |
6222 public BitField<bool, kStartIsDehoisted, kBitsForIsDehoisted> | 6268 public BitField<bool, kStartIsDehoisted, kBitsForIsDehoisted> |
6223 {}; // NOLINT | 6269 {}; // NOLINT |
6224 uint32_t bit_field_; | 6270 uint32_t bit_field_; |
6225 }; | 6271 }; |
6226 | 6272 |
6227 | 6273 |
6228 class HLoadKeyedGeneric V8_FINAL : public HTemplateInstruction<3> { | 6274 class HLoadKeyedGeneric V8_FINAL : public HTemplateInstruction<3> { |
6229 public: | 6275 public: |
6230 HLoadKeyedGeneric(HValue* context, HValue* obj, HValue* key) { | 6276 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P2(HLoadKeyedGeneric, HValue*, |
6231 set_representation(Representation::Tagged()); | 6277 HValue*); |
6232 SetOperandAt(0, obj); | |
6233 SetOperandAt(1, key); | |
6234 SetOperandAt(2, context); | |
6235 SetAllSideEffects(); | |
6236 } | |
6237 | |
6238 HValue* object() { return OperandAt(0); } | 6278 HValue* object() { return OperandAt(0); } |
6239 HValue* key() { return OperandAt(1); } | 6279 HValue* key() { return OperandAt(1); } |
6240 HValue* context() { return OperandAt(2); } | 6280 HValue* context() { return OperandAt(2); } |
6241 | 6281 |
6242 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; | 6282 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; |
6243 | 6283 |
6244 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { | 6284 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { |
6245 // tagged[tagged] | 6285 // tagged[tagged] |
6246 return Representation::Tagged(); | 6286 return Representation::Tagged(); |
6247 } | 6287 } |
6248 | 6288 |
6249 virtual HValue* Canonicalize() V8_OVERRIDE; | 6289 virtual HValue* Canonicalize() V8_OVERRIDE; |
6250 | 6290 |
6251 DECLARE_CONCRETE_INSTRUCTION(LoadKeyedGeneric) | 6291 DECLARE_CONCRETE_INSTRUCTION(LoadKeyedGeneric) |
| 6292 |
| 6293 private: |
| 6294 HLoadKeyedGeneric(HValue* context, HValue* obj, HValue* key) { |
| 6295 set_representation(Representation::Tagged()); |
| 6296 SetOperandAt(0, obj); |
| 6297 SetOperandAt(1, key); |
| 6298 SetOperandAt(2, context); |
| 6299 SetAllSideEffects(); |
| 6300 } |
6252 }; | 6301 }; |
6253 | 6302 |
6254 | 6303 |
6255 class HStoreNamedField V8_FINAL : public HTemplateInstruction<3> { | 6304 class HStoreNamedField V8_FINAL : public HTemplateInstruction<3> { |
6256 public: | 6305 public: |
6257 DECLARE_INSTRUCTION_FACTORY_P3(HStoreNamedField, HValue*, | 6306 DECLARE_INSTRUCTION_FACTORY_P3(HStoreNamedField, HValue*, |
6258 HObjectAccess, HValue*); | 6307 HObjectAccess, HValue*); |
6259 | 6308 |
6260 DECLARE_CONCRETE_INSTRUCTION(StoreNamedField) | 6309 DECLARE_CONCRETE_INSTRUCTION(StoreNamedField) |
6261 | 6310 |
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6360 | 6409 |
6361 HObjectAccess access_; | 6410 HObjectAccess access_; |
6362 HValue* new_space_dominator_; | 6411 HValue* new_space_dominator_; |
6363 WriteBarrierMode write_barrier_mode_ : 1; | 6412 WriteBarrierMode write_barrier_mode_ : 1; |
6364 bool has_transition_ : 1; | 6413 bool has_transition_ : 1; |
6365 }; | 6414 }; |
6366 | 6415 |
6367 | 6416 |
6368 class HStoreNamedGeneric V8_FINAL : public HTemplateInstruction<3> { | 6417 class HStoreNamedGeneric V8_FINAL : public HTemplateInstruction<3> { |
6369 public: | 6418 public: |
6370 HStoreNamedGeneric(HValue* context, | 6419 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P4(HStoreNamedGeneric, HValue*, |
6371 HValue* object, | 6420 Handle<String>, HValue*, |
6372 Handle<String> name, | 6421 StrictModeFlag); |
6373 HValue* value, | |
6374 StrictModeFlag strict_mode_flag) | |
6375 : name_(name), | |
6376 strict_mode_flag_(strict_mode_flag) { | |
6377 SetOperandAt(0, object); | |
6378 SetOperandAt(1, value); | |
6379 SetOperandAt(2, context); | |
6380 SetAllSideEffects(); | |
6381 } | |
6382 | |
6383 HValue* object() { return OperandAt(0); } | 6422 HValue* object() { return OperandAt(0); } |
6384 HValue* value() { return OperandAt(1); } | 6423 HValue* value() { return OperandAt(1); } |
6385 HValue* context() { return OperandAt(2); } | 6424 HValue* context() { return OperandAt(2); } |
6386 Handle<String> name() { return name_; } | 6425 Handle<String> name() { return name_; } |
6387 StrictModeFlag strict_mode_flag() { return strict_mode_flag_; } | 6426 StrictModeFlag strict_mode_flag() { return strict_mode_flag_; } |
6388 | 6427 |
6389 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; | 6428 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; |
6390 | 6429 |
6391 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { | 6430 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { |
6392 return Representation::Tagged(); | 6431 return Representation::Tagged(); |
6393 } | 6432 } |
6394 | 6433 |
6395 DECLARE_CONCRETE_INSTRUCTION(StoreNamedGeneric) | 6434 DECLARE_CONCRETE_INSTRUCTION(StoreNamedGeneric) |
6396 | 6435 |
6397 private: | 6436 private: |
| 6437 HStoreNamedGeneric(HValue* context, |
| 6438 HValue* object, |
| 6439 Handle<String> name, |
| 6440 HValue* value, |
| 6441 StrictModeFlag strict_mode_flag) |
| 6442 : name_(name), |
| 6443 strict_mode_flag_(strict_mode_flag) { |
| 6444 SetOperandAt(0, object); |
| 6445 SetOperandAt(1, value); |
| 6446 SetOperandAt(2, context); |
| 6447 SetAllSideEffects(); |
| 6448 } |
| 6449 |
6398 Handle<String> name_; | 6450 Handle<String> name_; |
6399 StrictModeFlag strict_mode_flag_; | 6451 StrictModeFlag strict_mode_flag_; |
6400 }; | 6452 }; |
6401 | 6453 |
6402 | 6454 |
6403 class HStoreKeyed V8_FINAL | 6455 class HStoreKeyed V8_FINAL |
6404 : public HTemplateInstruction<3>, public ArrayInstructionInterface { | 6456 : public HTemplateInstruction<3>, public ArrayInstructionInterface { |
6405 public: | 6457 public: |
6406 DECLARE_INSTRUCTION_FACTORY_P4(HStoreKeyed, HValue*, HValue*, HValue*, | 6458 DECLARE_INSTRUCTION_FACTORY_P4(HStoreKeyed, HValue*, HValue*, HValue*, |
6407 ElementsKind); | 6459 ElementsKind); |
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6536 ElementsKind elements_kind_; | 6588 ElementsKind elements_kind_; |
6537 uint32_t index_offset_; | 6589 uint32_t index_offset_; |
6538 bool is_dehoisted_ : 1; | 6590 bool is_dehoisted_ : 1; |
6539 bool is_uninitialized_ : 1; | 6591 bool is_uninitialized_ : 1; |
6540 HValue* new_space_dominator_; | 6592 HValue* new_space_dominator_; |
6541 }; | 6593 }; |
6542 | 6594 |
6543 | 6595 |
6544 class HStoreKeyedGeneric V8_FINAL : public HTemplateInstruction<4> { | 6596 class HStoreKeyedGeneric V8_FINAL : public HTemplateInstruction<4> { |
6545 public: | 6597 public: |
6546 HStoreKeyedGeneric(HValue* context, | 6598 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P4(HStoreKeyedGeneric, HValue*, |
6547 HValue* object, | 6599 HValue*, HValue*, StrictModeFlag); |
6548 HValue* key, | |
6549 HValue* value, | |
6550 StrictModeFlag strict_mode_flag) | |
6551 : strict_mode_flag_(strict_mode_flag) { | |
6552 SetOperandAt(0, object); | |
6553 SetOperandAt(1, key); | |
6554 SetOperandAt(2, value); | |
6555 SetOperandAt(3, context); | |
6556 SetAllSideEffects(); | |
6557 } | |
6558 | 6600 |
6559 HValue* object() { return OperandAt(0); } | 6601 HValue* object() { return OperandAt(0); } |
6560 HValue* key() { return OperandAt(1); } | 6602 HValue* key() { return OperandAt(1); } |
6561 HValue* value() { return OperandAt(2); } | 6603 HValue* value() { return OperandAt(2); } |
6562 HValue* context() { return OperandAt(3); } | 6604 HValue* context() { return OperandAt(3); } |
6563 StrictModeFlag strict_mode_flag() { return strict_mode_flag_; } | 6605 StrictModeFlag strict_mode_flag() { return strict_mode_flag_; } |
6564 | 6606 |
6565 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { | 6607 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { |
6566 // tagged[tagged] = tagged | 6608 // tagged[tagged] = tagged |
6567 return Representation::Tagged(); | 6609 return Representation::Tagged(); |
6568 } | 6610 } |
6569 | 6611 |
6570 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; | 6612 virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; |
6571 | 6613 |
6572 DECLARE_CONCRETE_INSTRUCTION(StoreKeyedGeneric) | 6614 DECLARE_CONCRETE_INSTRUCTION(StoreKeyedGeneric) |
6573 | 6615 |
6574 private: | 6616 private: |
| 6617 HStoreKeyedGeneric(HValue* context, |
| 6618 HValue* object, |
| 6619 HValue* key, |
| 6620 HValue* value, |
| 6621 StrictModeFlag strict_mode_flag) |
| 6622 : strict_mode_flag_(strict_mode_flag) { |
| 6623 SetOperandAt(0, object); |
| 6624 SetOperandAt(1, key); |
| 6625 SetOperandAt(2, value); |
| 6626 SetOperandAt(3, context); |
| 6627 SetAllSideEffects(); |
| 6628 } |
| 6629 |
6575 StrictModeFlag strict_mode_flag_; | 6630 StrictModeFlag strict_mode_flag_; |
6576 }; | 6631 }; |
6577 | 6632 |
6578 | 6633 |
6579 class HTransitionElementsKind V8_FINAL : public HTemplateInstruction<2> { | 6634 class HTransitionElementsKind V8_FINAL : public HTemplateInstruction<2> { |
6580 public: | 6635 public: |
6581 inline static HTransitionElementsKind* New(Zone* zone, | 6636 inline static HTransitionElementsKind* New(Zone* zone, |
6582 HValue* context, | 6637 HValue* context, |
6583 HValue* object, | 6638 HValue* object, |
6584 Handle<Map> original_map, | 6639 Handle<Map> original_map, |
(...skipping 358 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6943 ASSERT(function->function_id == Runtime::kCreateObjectLiteral); | 6998 ASSERT(function->function_id == Runtime::kCreateObjectLiteral); |
6944 #endif | 6999 #endif |
6945 } | 7000 } |
6946 | 7001 |
6947 virtual bool IsDeletable() const V8_OVERRIDE { return true; } | 7002 virtual bool IsDeletable() const V8_OVERRIDE { return true; } |
6948 }; | 7003 }; |
6949 | 7004 |
6950 | 7005 |
6951 class HValueOf V8_FINAL : public HUnaryOperation { | 7006 class HValueOf V8_FINAL : public HUnaryOperation { |
6952 public: | 7007 public: |
6953 explicit HValueOf(HValue* value) : HUnaryOperation(value) { | 7008 DECLARE_INSTRUCTION_FACTORY_P1(HValueOf, HValue*); |
6954 set_representation(Representation::Tagged()); | |
6955 } | |
6956 | 7009 |
6957 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { | 7010 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { |
6958 return Representation::Tagged(); | 7011 return Representation::Tagged(); |
6959 } | 7012 } |
6960 | 7013 |
6961 DECLARE_CONCRETE_INSTRUCTION(ValueOf) | 7014 DECLARE_CONCRETE_INSTRUCTION(ValueOf) |
6962 | 7015 |
6963 private: | 7016 private: |
| 7017 explicit HValueOf(HValue* value) : HUnaryOperation(value) { |
| 7018 set_representation(Representation::Tagged()); |
| 7019 } |
| 7020 |
6964 virtual bool IsDeletable() const V8_OVERRIDE { return true; } | 7021 virtual bool IsDeletable() const V8_OVERRIDE { return true; } |
6965 }; | 7022 }; |
6966 | 7023 |
6967 | 7024 |
6968 class HDateField V8_FINAL : public HUnaryOperation { | 7025 class HDateField V8_FINAL : public HUnaryOperation { |
6969 public: | 7026 public: |
6970 HDateField(HValue* date, Smi* index) | 7027 DECLARE_INSTRUCTION_FACTORY_P2(HDateField, HValue*, Smi*); |
6971 : HUnaryOperation(date), index_(index) { | |
6972 set_representation(Representation::Tagged()); | |
6973 } | |
6974 | 7028 |
6975 Smi* index() const { return index_; } | 7029 Smi* index() const { return index_; } |
6976 | 7030 |
6977 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { | 7031 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { |
6978 return Representation::Tagged(); | 7032 return Representation::Tagged(); |
6979 } | 7033 } |
6980 | 7034 |
6981 DECLARE_CONCRETE_INSTRUCTION(DateField) | 7035 DECLARE_CONCRETE_INSTRUCTION(DateField) |
6982 | 7036 |
6983 private: | 7037 private: |
| 7038 HDateField(HValue* date, Smi* index) |
| 7039 : HUnaryOperation(date), index_(index) { |
| 7040 set_representation(Representation::Tagged()); |
| 7041 } |
| 7042 |
6984 Smi* index_; | 7043 Smi* index_; |
6985 }; | 7044 }; |
6986 | 7045 |
6987 | 7046 |
6988 class HSeqStringSetChar V8_FINAL : public HTemplateInstruction<3> { | 7047 class HSeqStringSetChar V8_FINAL : public HTemplateInstruction<3> { |
6989 public: | 7048 public: |
6990 HSeqStringSetChar(String::Encoding encoding, | 7049 DECLARE_INSTRUCTION_FACTORY_P4(HSeqStringSetChar, String::Encoding, |
6991 HValue* string, | 7050 HValue*, HValue*, HValue*); |
6992 HValue* index, | |
6993 HValue* value) : encoding_(encoding) { | |
6994 SetOperandAt(0, string); | |
6995 SetOperandAt(1, index); | |
6996 SetOperandAt(2, value); | |
6997 set_representation(Representation::Tagged()); | |
6998 } | |
6999 | 7051 |
7000 String::Encoding encoding() { return encoding_; } | 7052 String::Encoding encoding() { return encoding_; } |
7001 HValue* string() { return OperandAt(0); } | 7053 HValue* string() { return OperandAt(0); } |
7002 HValue* index() { return OperandAt(1); } | 7054 HValue* index() { return OperandAt(1); } |
7003 HValue* value() { return OperandAt(2); } | 7055 HValue* value() { return OperandAt(2); } |
7004 | 7056 |
7005 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { | 7057 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { |
7006 return (index == 0) ? Representation::Tagged() | 7058 return (index == 0) ? Representation::Tagged() |
7007 : Representation::Integer32(); | 7059 : Representation::Integer32(); |
7008 } | 7060 } |
7009 | 7061 |
7010 DECLARE_CONCRETE_INSTRUCTION(SeqStringSetChar) | 7062 DECLARE_CONCRETE_INSTRUCTION(SeqStringSetChar) |
7011 | 7063 |
7012 private: | 7064 private: |
| 7065 HSeqStringSetChar(String::Encoding encoding, |
| 7066 HValue* string, |
| 7067 HValue* index, |
| 7068 HValue* value) : encoding_(encoding) { |
| 7069 SetOperandAt(0, string); |
| 7070 SetOperandAt(1, index); |
| 7071 SetOperandAt(2, value); |
| 7072 set_representation(Representation::Tagged()); |
| 7073 } |
| 7074 |
7013 String::Encoding encoding_; | 7075 String::Encoding encoding_; |
7014 }; | 7076 }; |
7015 | 7077 |
7016 | 7078 |
7017 class HCheckMapValue V8_FINAL : public HTemplateInstruction<2> { | 7079 class HCheckMapValue V8_FINAL : public HTemplateInstruction<2> { |
7018 public: | 7080 public: |
7019 DECLARE_INSTRUCTION_FACTORY_P2(HCheckMapValue, HValue*, HValue*); | 7081 DECLARE_INSTRUCTION_FACTORY_P2(HCheckMapValue, HValue*, HValue*); |
7020 | 7082 |
7021 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { | 7083 virtual Representation RequiredInputRepresentation(int index) V8_OVERRIDE { |
7022 return Representation::Tagged(); | 7084 return Representation::Tagged(); |
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7151 virtual bool IsDeletable() const V8_OVERRIDE { return true; } | 7213 virtual bool IsDeletable() const V8_OVERRIDE { return true; } |
7152 }; | 7214 }; |
7153 | 7215 |
7154 | 7216 |
7155 #undef DECLARE_INSTRUCTION | 7217 #undef DECLARE_INSTRUCTION |
7156 #undef DECLARE_CONCRETE_INSTRUCTION | 7218 #undef DECLARE_CONCRETE_INSTRUCTION |
7157 | 7219 |
7158 } } // namespace v8::internal | 7220 } } // namespace v8::internal |
7159 | 7221 |
7160 #endif // V8_HYDROGEN_INSTRUCTIONS_H_ | 7222 #endif // V8_HYDROGEN_INSTRUCTIONS_H_ |
OLD | NEW |