| OLD | NEW |
| 1 // Copyright 2010 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 |
| 11 // with the distribution. | 11 // with the distribution. |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 92 // HCallNamed | 92 // HCallNamed |
| 93 // HCallNew | 93 // HCallNew |
| 94 // HCallRuntime | 94 // HCallRuntime |
| 95 // HCallStub | 95 // HCallStub |
| 96 // HCheckPrototypeMaps | 96 // HCheckPrototypeMaps |
| 97 // HConstant | 97 // HConstant |
| 98 // HControlInstruction | 98 // HControlInstruction |
| 99 // HDeoptimize | 99 // HDeoptimize |
| 100 // HGoto | 100 // HGoto |
| 101 // HUnaryControlInstruction | 101 // HUnaryControlInstruction |
| 102 // HBranch | 102 // HCompareMap |
| 103 // HCompareMapAndBranch | |
| 104 // HReturn | 103 // HReturn |
| 104 // HTest |
| 105 // HThrow | 105 // HThrow |
| 106 // HEnterInlined | 106 // HEnterInlined |
| 107 // HFunctionLiteral | 107 // HFunctionLiteral |
| 108 // HGlobalObject | 108 // HGlobalObject |
| 109 // HGlobalReceiver | 109 // HGlobalReceiver |
| 110 // HLeaveInlined | 110 // HLeaveInlined |
| 111 // HLoadContextSlot | 111 // HLoadContextSlot |
| 112 // HLoadGlobal | 112 // HLoadGlobal |
| 113 // HMaterializedLiteral | 113 // HMaterializedLiteral |
| 114 // HArrayLiteral | 114 // HArrayLiteral |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 176 V(ArgumentsElements) \ | 176 V(ArgumentsElements) \ |
| 177 V(ArgumentsLength) \ | 177 V(ArgumentsLength) \ |
| 178 V(ArgumentsObject) \ | 178 V(ArgumentsObject) \ |
| 179 V(ArrayLiteral) \ | 179 V(ArrayLiteral) \ |
| 180 V(BitAnd) \ | 180 V(BitAnd) \ |
| 181 V(BitNot) \ | 181 V(BitNot) \ |
| 182 V(BitOr) \ | 182 V(BitOr) \ |
| 183 V(BitXor) \ | 183 V(BitXor) \ |
| 184 V(BlockEntry) \ | 184 V(BlockEntry) \ |
| 185 V(BoundsCheck) \ | 185 V(BoundsCheck) \ |
| 186 V(Branch) \ | |
| 187 V(CallConstantFunction) \ | 186 V(CallConstantFunction) \ |
| 188 V(CallFunction) \ | 187 V(CallFunction) \ |
| 189 V(CallGlobal) \ | 188 V(CallGlobal) \ |
| 190 V(CallKeyed) \ | 189 V(CallKeyed) \ |
| 191 V(CallKnownGlobal) \ | 190 V(CallKnownGlobal) \ |
| 192 V(CallNamed) \ | 191 V(CallNamed) \ |
| 193 V(CallNew) \ | 192 V(CallNew) \ |
| 194 V(CallRuntime) \ | 193 V(CallRuntime) \ |
| 195 V(CallStub) \ | 194 V(CallStub) \ |
| 196 V(Change) \ | 195 V(Change) \ |
| 197 V(CheckFunction) \ | 196 V(CheckFunction) \ |
| 198 V(CheckInstanceType) \ | 197 V(CheckInstanceType) \ |
| 199 V(CheckMap) \ | 198 V(CheckMap) \ |
| 200 V(CheckNonSmi) \ | 199 V(CheckNonSmi) \ |
| 201 V(CheckPrototypeMaps) \ | 200 V(CheckPrototypeMaps) \ |
| 202 V(CheckSmi) \ | 201 V(CheckSmi) \ |
| 203 V(Compare) \ | 202 V(Compare) \ |
| 204 V(CompareJSObjectEq) \ | 203 V(CompareJSObjectEq) \ |
| 205 V(CompareMapAndBranch) \ | 204 V(CompareMap) \ |
| 206 V(Constant) \ | 205 V(Constant) \ |
| 207 V(DeleteProperty) \ | 206 V(DeleteProperty) \ |
| 208 V(Deoptimize) \ | 207 V(Deoptimize) \ |
| 209 V(Div) \ | 208 V(Div) \ |
| 210 V(EnterInlined) \ | 209 V(EnterInlined) \ |
| 211 V(FixedArrayLength) \ | 210 V(FixedArrayLength) \ |
| 212 V(FunctionLiteral) \ | 211 V(FunctionLiteral) \ |
| 213 V(GlobalObject) \ | 212 V(GlobalObject) \ |
| 214 V(GlobalReceiver) \ | 213 V(GlobalReceiver) \ |
| 215 V(Goto) \ | 214 V(Goto) \ |
| (...skipping 30 matching lines...) Expand all Loading... |
| 246 V(Simulate) \ | 245 V(Simulate) \ |
| 247 V(StackCheck) \ | 246 V(StackCheck) \ |
| 248 V(StoreGlobal) \ | 247 V(StoreGlobal) \ |
| 249 V(StoreKeyedFastElement) \ | 248 V(StoreKeyedFastElement) \ |
| 250 V(StoreKeyedGeneric) \ | 249 V(StoreKeyedGeneric) \ |
| 251 V(StoreNamedField) \ | 250 V(StoreNamedField) \ |
| 252 V(StoreNamedGeneric) \ | 251 V(StoreNamedGeneric) \ |
| 253 V(StringCharCodeAt) \ | 252 V(StringCharCodeAt) \ |
| 254 V(StringLength) \ | 253 V(StringLength) \ |
| 255 V(Sub) \ | 254 V(Sub) \ |
| 255 V(Test) \ |
| 256 V(Throw) \ | 256 V(Throw) \ |
| 257 V(Typeof) \ | 257 V(Typeof) \ |
| 258 V(TypeofIs) \ | 258 V(TypeofIs) \ |
| 259 V(UnaryMathOperation) \ | 259 V(UnaryMathOperation) \ |
| 260 V(UnknownOSRValue) \ | 260 V(UnknownOSRValue) \ |
| 261 V(ValueOf) | 261 V(ValueOf) |
| 262 | 262 |
| 263 #define GVN_FLAG_LIST(V) \ | 263 #define GVN_FLAG_LIST(V) \ |
| 264 V(Calls) \ | 264 V(Calls) \ |
| 265 V(InobjectFields) \ | 265 V(InobjectFields) \ |
| (...skipping 542 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 808 | 808 |
| 809 | 809 |
| 810 class HBlockEntry: public HInstruction { | 810 class HBlockEntry: public HInstruction { |
| 811 public: | 811 public: |
| 812 DECLARE_CONCRETE_INSTRUCTION(BlockEntry, "block_entry") | 812 DECLARE_CONCRETE_INSTRUCTION(BlockEntry, "block_entry") |
| 813 }; | 813 }; |
| 814 | 814 |
| 815 | 815 |
| 816 class HControlInstruction: public HInstruction { | 816 class HControlInstruction: public HInstruction { |
| 817 public: | 817 public: |
| 818 virtual HBasicBlock* FirstSuccessor() const { return NULL; } | 818 HControlInstruction(HBasicBlock* first, HBasicBlock* second) |
| 819 virtual HBasicBlock* SecondSuccessor() const { return NULL; } | 819 : first_successor_(first), second_successor_(second) { |
| 820 } |
| 821 |
| 822 HBasicBlock* FirstSuccessor() const { return first_successor_; } |
| 823 HBasicBlock* SecondSuccessor() const { return second_successor_; } |
| 824 |
| 825 virtual void PrintDataTo(StringStream* stream) const; |
| 820 | 826 |
| 821 DECLARE_INSTRUCTION(ControlInstruction) | 827 DECLARE_INSTRUCTION(ControlInstruction) |
| 828 |
| 829 private: |
| 830 HBasicBlock* first_successor_; |
| 831 HBasicBlock* second_successor_; |
| 822 }; | 832 }; |
| 823 | 833 |
| 824 | 834 |
| 825 class HDeoptimize: public HControlInstruction { | 835 class HDeoptimize: public HControlInstruction { |
| 826 public: | 836 public: |
| 837 HDeoptimize() : HControlInstruction(NULL, NULL) { } |
| 838 |
| 827 DECLARE_CONCRETE_INSTRUCTION(Deoptimize, "deoptimize") | 839 DECLARE_CONCRETE_INSTRUCTION(Deoptimize, "deoptimize") |
| 828 }; | 840 }; |
| 829 | 841 |
| 830 | 842 |
| 831 class HGoto: public HControlInstruction { | 843 class HGoto: public HControlInstruction { |
| 832 public: | 844 public: |
| 833 explicit HGoto(HBasicBlock* destination) | 845 explicit HGoto(HBasicBlock* target) |
| 834 : destination_(destination), | 846 : HControlInstruction(target, NULL), include_stack_check_(false) { |
| 835 include_stack_check_(false) {} | 847 } |
| 836 | 848 |
| 837 virtual HBasicBlock* FirstSuccessor() const { return destination_; } | |
| 838 void set_include_stack_check(bool include_stack_check) { | 849 void set_include_stack_check(bool include_stack_check) { |
| 839 include_stack_check_ = include_stack_check; | 850 include_stack_check_ = include_stack_check; |
| 840 } | 851 } |
| 841 bool include_stack_check() const { return include_stack_check_; } | 852 bool include_stack_check() const { return include_stack_check_; } |
| 842 | 853 |
| 843 virtual void PrintDataTo(StringStream* stream) const; | |
| 844 | |
| 845 DECLARE_CONCRETE_INSTRUCTION(Goto, "goto") | 854 DECLARE_CONCRETE_INSTRUCTION(Goto, "goto") |
| 846 | 855 |
| 847 private: | 856 private: |
| 848 HBasicBlock* destination_; | |
| 849 bool include_stack_check_; | 857 bool include_stack_check_; |
| 850 }; | 858 }; |
| 851 | 859 |
| 852 | 860 |
| 853 class HUnaryControlInstruction: public HControlInstruction { | 861 class HUnaryControlInstruction: public HControlInstruction { |
| 854 public: | 862 public: |
| 855 explicit HUnaryControlInstruction(HValue* value) { | 863 explicit HUnaryControlInstruction(HValue* value, |
| 864 HBasicBlock* true_target, |
| 865 HBasicBlock* false_target) |
| 866 : HControlInstruction(true_target, false_target) { |
| 856 SetOperandAt(0, value); | 867 SetOperandAt(0, value); |
| 857 } | 868 } |
| 858 | 869 |
| 859 virtual Representation RequiredInputRepresentation(int index) const { | 870 virtual Representation RequiredInputRepresentation(int index) const { |
| 860 return Representation::Tagged(); | 871 return Representation::Tagged(); |
| 861 } | 872 } |
| 862 | 873 |
| 874 virtual void PrintDataTo(StringStream* stream) const; |
| 875 |
| 863 HValue* value() const { return OperandAt(0); } | 876 HValue* value() const { return OperandAt(0); } |
| 864 virtual int OperandCount() const { return 1; } | 877 virtual int OperandCount() const { return 1; } |
| 865 virtual HValue* OperandAt(int index) const { return operands_[index]; } | 878 virtual HValue* OperandAt(int index) const { return operands_[index]; } |
| 866 | 879 |
| 867 DECLARE_INSTRUCTION(UnaryControlInstruction) | 880 DECLARE_INSTRUCTION(UnaryControlInstruction) |
| 868 | 881 |
| 869 protected: | 882 protected: |
| 870 virtual void InternalSetOperandAt(int index, HValue* value) { | 883 virtual void InternalSetOperandAt(int index, HValue* value) { |
| 871 operands_[index] = value; | 884 operands_[index] = value; |
| 872 } | 885 } |
| 873 | 886 |
| 874 private: | 887 private: |
| 875 HOperandVector<1> operands_; | 888 HOperandVector<1> operands_; |
| 876 }; | 889 }; |
| 877 | 890 |
| 878 | 891 |
| 879 class HBranch: public HUnaryControlInstruction { | 892 class HTest: public HUnaryControlInstruction { |
| 880 public: | 893 public: |
| 881 HBranch(HBasicBlock* true_destination, | 894 HTest(HValue* value, HBasicBlock* true_target, HBasicBlock* false_target) |
| 882 HBasicBlock* false_destination, | 895 : HUnaryControlInstruction(value, true_target, false_target) { |
| 883 HValue* boolean_value) | 896 ASSERT(true_target != NULL && false_target != NULL); |
| 884 : HUnaryControlInstruction(boolean_value), | |
| 885 true_destination_(true_destination), | |
| 886 false_destination_(false_destination) { | |
| 887 ASSERT(true_destination != NULL && false_destination != NULL); | |
| 888 } | 897 } |
| 889 | 898 |
| 890 virtual Representation RequiredInputRepresentation(int index) const { | 899 virtual Representation RequiredInputRepresentation(int index) const { |
| 891 return Representation::None(); | 900 return Representation::None(); |
| 892 } | 901 } |
| 893 | 902 |
| 894 virtual HBasicBlock* FirstSuccessor() const { return true_destination_; } | 903 DECLARE_CONCRETE_INSTRUCTION(Test, "test") |
| 895 virtual HBasicBlock* SecondSuccessor() const { return false_destination_; } | |
| 896 | |
| 897 virtual void PrintDataTo(StringStream* stream) const; | |
| 898 | |
| 899 DECLARE_CONCRETE_INSTRUCTION(Branch, "branch") | |
| 900 | |
| 901 private: | |
| 902 HBasicBlock* true_destination_; | |
| 903 HBasicBlock* false_destination_; | |
| 904 }; | 904 }; |
| 905 | 905 |
| 906 | 906 |
| 907 class HCompareMapAndBranch: public HUnaryControlInstruction { | 907 class HCompareMap: public HUnaryControlInstruction { |
| 908 public: | 908 public: |
| 909 HCompareMapAndBranch(HValue* result, | 909 HCompareMap(HValue* value, |
| 910 Handle<Map> map, | 910 Handle<Map> map, |
| 911 HBasicBlock* true_destination, | 911 HBasicBlock* true_target, |
| 912 HBasicBlock* false_destination) | 912 HBasicBlock* false_target) |
| 913 : HUnaryControlInstruction(result), | 913 : HUnaryControlInstruction(value, true_target, false_target), |
| 914 map_(map), | 914 map_(map) { |
| 915 true_destination_(true_destination), | 915 ASSERT(true_target != NULL); |
| 916 false_destination_(false_destination) { | 916 ASSERT(false_target != NULL); |
| 917 ASSERT(true_destination != NULL); | |
| 918 ASSERT(false_destination != NULL); | |
| 919 ASSERT(!map.is_null()); | 917 ASSERT(!map.is_null()); |
| 920 } | 918 } |
| 921 | 919 |
| 922 virtual HBasicBlock* FirstSuccessor() const { return true_destination_; } | |
| 923 virtual HBasicBlock* SecondSuccessor() const { return false_destination_; } | |
| 924 | |
| 925 HBasicBlock* true_destination() const { return true_destination_; } | |
| 926 HBasicBlock* false_destination() const { return false_destination_; } | |
| 927 | |
| 928 virtual void PrintDataTo(StringStream* stream) const; | 920 virtual void PrintDataTo(StringStream* stream) const; |
| 929 | 921 |
| 930 Handle<Map> map() const { return map_; } | 922 Handle<Map> map() const { return map_; } |
| 931 | 923 |
| 932 DECLARE_CONCRETE_INSTRUCTION(CompareMapAndBranch, "compare_map_and_branch") | 924 DECLARE_CONCRETE_INSTRUCTION(CompareMap, "compare_map") |
| 933 | 925 |
| 934 private: | 926 private: |
| 935 Handle<Map> map_; | 927 Handle<Map> map_; |
| 936 HBasicBlock* true_destination_; | |
| 937 HBasicBlock* false_destination_; | |
| 938 }; | 928 }; |
| 939 | 929 |
| 940 | 930 |
| 941 class HReturn: public HUnaryControlInstruction { | 931 class HReturn: public HUnaryControlInstruction { |
| 942 public: | 932 public: |
| 943 explicit HReturn(HValue* result) : HUnaryControlInstruction(result) { } | 933 explicit HReturn(HValue* value) |
| 944 | 934 : HUnaryControlInstruction(value, NULL, NULL) { |
| 945 virtual void PrintDataTo(StringStream* stream) const; | 935 } |
| 946 | 936 |
| 947 DECLARE_CONCRETE_INSTRUCTION(Return, "return") | 937 DECLARE_CONCRETE_INSTRUCTION(Return, "return") |
| 948 }; | 938 }; |
| 949 | 939 |
| 950 | 940 |
| 951 class HThrow: public HUnaryControlInstruction { | 941 class HThrow: public HUnaryControlInstruction { |
| 952 public: | 942 public: |
| 953 explicit HThrow(HValue* value) : HUnaryControlInstruction(value) { } | 943 explicit HThrow(HValue* value) |
| 954 | 944 : HUnaryControlInstruction(value, NULL, NULL) { } |
| 955 virtual void PrintDataTo(StringStream* stream) const; | |
| 956 | 945 |
| 957 DECLARE_CONCRETE_INSTRUCTION(Throw, "throw") | 946 DECLARE_CONCRETE_INSTRUCTION(Throw, "throw") |
| 958 }; | 947 }; |
| 959 | 948 |
| 960 | 949 |
| 961 class HUnaryOperation: public HInstruction { | 950 class HUnaryOperation: public HInstruction { |
| 962 public: | 951 public: |
| 963 explicit HUnaryOperation(HValue* value) { | 952 explicit HUnaryOperation(HValue* value) { |
| 964 SetOperandAt(0, value); | 953 SetOperandAt(0, value); |
| 965 } | 954 } |
| (...skipping 2175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3141 HValue* object() const { return left(); } | 3130 HValue* object() const { return left(); } |
| 3142 HValue* key() const { return right(); } | 3131 HValue* key() const { return right(); } |
| 3143 }; | 3132 }; |
| 3144 | 3133 |
| 3145 #undef DECLARE_INSTRUCTION | 3134 #undef DECLARE_INSTRUCTION |
| 3146 #undef DECLARE_CONCRETE_INSTRUCTION | 3135 #undef DECLARE_CONCRETE_INSTRUCTION |
| 3147 | 3136 |
| 3148 } } // namespace v8::internal | 3137 } } // namespace v8::internal |
| 3149 | 3138 |
| 3150 #endif // V8_HYDROGEN_INSTRUCTIONS_H_ | 3139 #endif // V8_HYDROGEN_INSTRUCTIONS_H_ |
| OLD | NEW |