OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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 #ifndef V8_HYDROGEN_INSTRUCTIONS_H_ | 5 #ifndef V8_HYDROGEN_INSTRUCTIONS_H_ |
6 #define V8_HYDROGEN_INSTRUCTIONS_H_ | 6 #define V8_HYDROGEN_INSTRUCTIONS_H_ |
7 | 7 |
8 #include <cstring> | 8 #include <cstring> |
9 #include <iosfwd> | 9 #include <iosfwd> |
10 | 10 |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
98 V(ForceRepresentation) \ | 98 V(ForceRepresentation) \ |
99 V(ForInCacheArray) \ | 99 V(ForInCacheArray) \ |
100 V(ForInPrepareMap) \ | 100 V(ForInPrepareMap) \ |
101 V(FunctionLiteral) \ | 101 V(FunctionLiteral) \ |
102 V(GetCachedArrayIndex) \ | 102 V(GetCachedArrayIndex) \ |
103 V(Goto) \ | 103 V(Goto) \ |
104 V(HasCachedArrayIndexAndBranch) \ | 104 V(HasCachedArrayIndexAndBranch) \ |
105 V(HasInstanceTypeAndBranch) \ | 105 V(HasInstanceTypeAndBranch) \ |
106 V(InnerAllocatedObject) \ | 106 V(InnerAllocatedObject) \ |
107 V(InstanceOf) \ | 107 V(InstanceOf) \ |
108 V(InstanceOfKnownGlobal) \ | |
109 V(InvokeFunction) \ | 108 V(InvokeFunction) \ |
110 V(IsConstructCallAndBranch) \ | 109 V(IsConstructCallAndBranch) \ |
| 110 V(HasInPrototypeChainAndBranch) \ |
111 V(IsObjectAndBranch) \ | 111 V(IsObjectAndBranch) \ |
112 V(IsStringAndBranch) \ | 112 V(IsStringAndBranch) \ |
113 V(IsSmiAndBranch) \ | 113 V(IsSmiAndBranch) \ |
114 V(IsUndetectableAndBranch) \ | 114 V(IsUndetectableAndBranch) \ |
115 V(LeaveInlined) \ | 115 V(LeaveInlined) \ |
116 V(LoadContextSlot) \ | 116 V(LoadContextSlot) \ |
117 V(LoadFieldByIndex) \ | 117 V(LoadFieldByIndex) \ |
118 V(LoadFunctionPrototype) \ | 118 V(LoadFunctionPrototype) \ |
119 V(LoadGlobalGeneric) \ | 119 V(LoadGlobalGeneric) \ |
120 V(LoadGlobalViaContext) \ | 120 V(LoadGlobalViaContext) \ |
(...skipping 4632 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4753 private: | 4753 private: |
4754 HInstanceOf(HValue* context, HValue* left, HValue* right) | 4754 HInstanceOf(HValue* context, HValue* left, HValue* right) |
4755 : HBinaryOperation(context, left, right, Strength::WEAK, | 4755 : HBinaryOperation(context, left, right, Strength::WEAK, |
4756 HType::Boolean()) { | 4756 HType::Boolean()) { |
4757 set_representation(Representation::Tagged()); | 4757 set_representation(Representation::Tagged()); |
4758 SetAllSideEffects(); | 4758 SetAllSideEffects(); |
4759 } | 4759 } |
4760 }; | 4760 }; |
4761 | 4761 |
4762 | 4762 |
4763 class HInstanceOfKnownGlobal final : public HTemplateInstruction<2> { | 4763 class HHasInPrototypeChainAndBranch final |
| 4764 : public HTemplateControlInstruction<2, 2> { |
4764 public: | 4765 public: |
4765 DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P2(HInstanceOfKnownGlobal, | 4766 DECLARE_INSTRUCTION_FACTORY_P2(HHasInPrototypeChainAndBranch, HValue*, |
4766 HValue*, | 4767 HValue*); |
4767 Handle<JSFunction>); | |
4768 | 4768 |
4769 HValue* context() { return OperandAt(0); } | 4769 HValue* object() const { return OperandAt(0); } |
4770 HValue* left() { return OperandAt(1); } | 4770 HValue* prototype() const { return OperandAt(1); } |
4771 Handle<JSFunction> function() { return function_; } | |
4772 | 4771 |
4773 Representation RequiredInputRepresentation(int index) override { | 4772 Representation RequiredInputRepresentation(int index) override { |
4774 return Representation::Tagged(); | 4773 return Representation::Tagged(); |
4775 } | 4774 } |
4776 | 4775 |
4777 DECLARE_CONCRETE_INSTRUCTION(InstanceOfKnownGlobal) | 4776 bool ObjectNeedsSmiCheck() const { |
| 4777 return !object()->type().IsHeapObject() && |
| 4778 !object()->representation().IsHeapObject(); |
| 4779 } |
| 4780 |
| 4781 DECLARE_CONCRETE_INSTRUCTION(HasInPrototypeChainAndBranch) |
4778 | 4782 |
4779 private: | 4783 private: |
4780 HInstanceOfKnownGlobal(HValue* context, | 4784 HHasInPrototypeChainAndBranch(HValue* object, HValue* prototype) { |
4781 HValue* left, | 4785 SetOperandAt(0, object); |
4782 Handle<JSFunction> right) | 4786 SetOperandAt(1, prototype); |
4783 : HTemplateInstruction<2>(HType::Boolean()), function_(right) { | 4787 SetDependsOnFlag(kCalls); |
4784 SetOperandAt(0, context); | |
4785 SetOperandAt(1, left); | |
4786 set_representation(Representation::Tagged()); | |
4787 SetAllSideEffects(); | |
4788 } | 4788 } |
4789 | |
4790 Handle<JSFunction> function_; | |
4791 }; | 4789 }; |
4792 | 4790 |
4793 | 4791 |
4794 class HPower final : public HTemplateInstruction<2> { | 4792 class HPower final : public HTemplateInstruction<2> { |
4795 public: | 4793 public: |
4796 static HInstruction* New(Isolate* isolate, Zone* zone, HValue* context, | 4794 static HInstruction* New(Isolate* isolate, Zone* zone, HValue* context, |
4797 HValue* left, HValue* right); | 4795 HValue* left, HValue* right); |
4798 | 4796 |
4799 HValue* left() { return OperandAt(0); } | 4797 HValue* left() { return OperandAt(0); } |
4800 HValue* right() const { return OperandAt(1); } | 4798 HValue* right() const { return OperandAt(1); } |
(...skipping 3260 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8061 }; | 8059 }; |
8062 | 8060 |
8063 | 8061 |
8064 | 8062 |
8065 #undef DECLARE_INSTRUCTION | 8063 #undef DECLARE_INSTRUCTION |
8066 #undef DECLARE_CONCRETE_INSTRUCTION | 8064 #undef DECLARE_CONCRETE_INSTRUCTION |
8067 | 8065 |
8068 } } // namespace v8::internal | 8066 } } // namespace v8::internal |
8069 | 8067 |
8070 #endif // V8_HYDROGEN_INSTRUCTIONS_H_ | 8068 #endif // V8_HYDROGEN_INSTRUCTIONS_H_ |
OLD | NEW |