Chromium Code Reviews| 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_DEOPTIMIZER_H_ | 5 #ifndef V8_DEOPTIMIZER_H_ |
| 6 #define V8_DEOPTIMIZER_H_ | 6 #define V8_DEOPTIMIZER_H_ |
| 7 | 7 |
| 8 #include "src/v8.h" | 8 #include "src/v8.h" |
| 9 | 9 |
| 10 #include "src/allocation.h" | 10 #include "src/allocation.h" |
| (...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 119 kArgumentsAdaptor, | 119 kArgumentsAdaptor, |
| 120 kConstructStub, | 120 kConstructStub, |
| 121 kCompiledStub, | 121 kCompiledStub, |
| 122 kInvalid | 122 kInvalid |
| 123 }; | 123 }; |
| 124 | 124 |
| 125 int GetValueCount(); | 125 int GetValueCount(); |
| 126 | 126 |
| 127 Kind kind() const { return kind_; } | 127 Kind kind() const { return kind_; } |
| 128 BailoutId node_id() const { return node_id_; } | 128 BailoutId node_id() const { return node_id_; } |
| 129 JSFunction* raw_function() const { return raw_function_; } | 129 Handle<SharedFunctionInfo> shared_info() const { return shared_info_; } |
| 130 Handle<JSFunction> function() const { return function_; } | |
| 131 int height() const { return height_; } | 130 int height() const { return height_; } |
| 132 | 131 |
| 133 class iterator { | 132 class iterator { |
| 134 public: | 133 public: |
| 135 iterator& operator++() { | 134 iterator& operator++() { |
| 136 AdvanceIterator(&position_); | 135 AdvanceIterator(&position_); |
| 137 return *this; | 136 return *this; |
| 138 } | 137 } |
| 139 | 138 |
| 140 iterator operator++(int) { | 139 iterator operator++(int) { |
| (...skipping 17 matching lines...) Expand all Loading... | |
| 158 : position_(position) {} | 157 : position_(position) {} |
| 159 | 158 |
| 160 std::deque<TranslatedValue>::iterator position_; | 159 std::deque<TranslatedValue>::iterator position_; |
| 161 }; | 160 }; |
| 162 | 161 |
| 163 typedef TranslatedValue& reference; | 162 typedef TranslatedValue& reference; |
| 164 typedef TranslatedValue const& const_reference; | 163 typedef TranslatedValue const& const_reference; |
| 165 | 164 |
| 166 iterator begin() { return iterator(values_.begin()); } | 165 iterator begin() { return iterator(values_.begin()); } |
| 167 iterator end() { return iterator(values_.end()); } | 166 iterator end() { return iterator(values_.end()); } |
| 167 | |
| 168 reference front() { return values_.front(); } | 168 reference front() { return values_.front(); } |
| 169 const_reference front() const { return values_.front(); } | 169 const_reference front() const { return values_.front(); } |
| 170 | 170 |
| 171 reference operator[](size_t index) { return values_[index]; } | |
| 172 const_reference operator[](size_t index) const { return values_[index]; } | |
|
Jarin
2015/06/10 11:15:04
As discussed offline, we should not expose the val
Benedikt Meurer
2015/06/10 11:19:50
Done.
| |
| 173 | |
| 174 size_t size() const { return values_.size(); } | |
|
Jarin
2015/06/10 11:15:04
Remove this. You should use the GetValueCount meth
Benedikt Meurer
2015/06/10 11:19:50
Done.
| |
| 175 | |
| 171 private: | 176 private: |
| 172 friend class TranslatedState; | 177 friend class TranslatedState; |
| 173 | 178 |
| 174 // Constructor static methods. | 179 // Constructor static methods. |
| 175 static TranslatedFrame JSFrame(BailoutId node_id, JSFunction* function, | 180 static TranslatedFrame JSFrame(BailoutId node_id, |
| 176 int height); | 181 SharedFunctionInfo* shared_info, int height); |
| 177 static TranslatedFrame AccessorFrame(Kind kind, JSFunction* function); | 182 static TranslatedFrame AccessorFrame(Kind kind, |
| 178 static TranslatedFrame ArgumentsAdaptorFrame(JSFunction* function, | 183 SharedFunctionInfo* shared_info); |
| 184 static TranslatedFrame ArgumentsAdaptorFrame(SharedFunctionInfo* shared_info, | |
| 179 int height); | 185 int height); |
| 180 static TranslatedFrame ConstructStubFrame(JSFunction* function, int height); | 186 static TranslatedFrame ConstructStubFrame(SharedFunctionInfo* shared_info, |
| 187 int height); | |
| 181 static TranslatedFrame CompiledStubFrame(int height, Isolate* isolate) { | 188 static TranslatedFrame CompiledStubFrame(int height, Isolate* isolate) { |
| 182 return TranslatedFrame(kCompiledStub, isolate, nullptr, height); | 189 return TranslatedFrame(kCompiledStub, isolate, nullptr, height); |
| 183 } | 190 } |
| 184 static TranslatedFrame InvalidFrame() { | 191 static TranslatedFrame InvalidFrame() { |
| 185 return TranslatedFrame(kInvalid, nullptr); | 192 return TranslatedFrame(kInvalid, nullptr); |
| 186 } | 193 } |
| 187 | 194 |
| 188 static void AdvanceIterator(std::deque<TranslatedValue>::iterator* iter); | 195 static void AdvanceIterator(std::deque<TranslatedValue>::iterator* iter); |
| 189 | 196 |
| 190 TranslatedFrame(Kind kind, Isolate* isolate, JSFunction* function = nullptr, | 197 TranslatedFrame(Kind kind, Isolate* isolate, |
| 191 int height = 0) | 198 SharedFunctionInfo* shared_info = nullptr, int height = 0) |
| 192 : kind_(kind), | 199 : kind_(kind), |
| 193 node_id_(BailoutId::None()), | 200 node_id_(BailoutId::None()), |
| 194 raw_function_(function), | 201 raw_shared_info_(shared_info), |
| 195 height_(height), | 202 height_(height), |
| 196 isolate_(isolate) {} | 203 isolate_(isolate) {} |
| 197 | 204 |
| 198 | 205 |
| 199 void Add(const TranslatedValue& value) { values_.push_back(value); } | 206 void Add(const TranslatedValue& value) { values_.push_back(value); } |
| 200 void Handlify(Isolate* isolate); | 207 void Handlify(); |
| 201 | 208 |
| 202 Kind kind_; | 209 Kind kind_; |
| 203 BailoutId node_id_; | 210 BailoutId node_id_; |
| 204 JSFunction* raw_function_; | 211 SharedFunctionInfo* raw_shared_info_; |
| 205 Handle<JSFunction> function_; | 212 Handle<SharedFunctionInfo> shared_info_; |
| 206 int height_; | 213 int height_; |
| 207 Isolate* isolate_; | 214 Isolate* isolate_; |
| 208 | 215 |
| 209 typedef std::deque<TranslatedValue> ValuesContainer; | 216 typedef std::deque<TranslatedValue> ValuesContainer; |
| 210 | 217 |
| 211 ValuesContainer values_; | 218 ValuesContainer values_; |
| 212 }; | 219 }; |
| 213 | 220 |
| 214 | 221 |
| 215 // Auxiliary class for translating deoptimization values. | 222 // Auxiliary class for translating deoptimization values. |
| (...skipping 792 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1008 V(REGISTER) \ | 1015 V(REGISTER) \ |
| 1009 V(INT32_REGISTER) \ | 1016 V(INT32_REGISTER) \ |
| 1010 V(UINT32_REGISTER) \ | 1017 V(UINT32_REGISTER) \ |
| 1011 V(BOOL_REGISTER) \ | 1018 V(BOOL_REGISTER) \ |
| 1012 V(DOUBLE_REGISTER) \ | 1019 V(DOUBLE_REGISTER) \ |
| 1013 V(STACK_SLOT) \ | 1020 V(STACK_SLOT) \ |
| 1014 V(INT32_STACK_SLOT) \ | 1021 V(INT32_STACK_SLOT) \ |
| 1015 V(UINT32_STACK_SLOT) \ | 1022 V(UINT32_STACK_SLOT) \ |
| 1016 V(BOOL_STACK_SLOT) \ | 1023 V(BOOL_STACK_SLOT) \ |
| 1017 V(DOUBLE_STACK_SLOT) \ | 1024 V(DOUBLE_STACK_SLOT) \ |
| 1018 V(LITERAL) | 1025 V(LITERAL) \ |
| 1026 V(JS_FRAME_FUNCTION) | |
| 1019 | 1027 |
| 1020 | 1028 |
| 1021 class Translation BASE_EMBEDDED { | 1029 class Translation BASE_EMBEDDED { |
| 1022 public: | 1030 public: |
| 1023 #define DECLARE_TRANSLATION_OPCODE_ENUM(item) item, | 1031 #define DECLARE_TRANSLATION_OPCODE_ENUM(item) item, |
| 1024 enum Opcode { | 1032 enum Opcode { |
| 1025 TRANSLATION_OPCODE_LIST(DECLARE_TRANSLATION_OPCODE_ENUM) | 1033 TRANSLATION_OPCODE_LIST(DECLARE_TRANSLATION_OPCODE_ENUM) |
| 1026 LAST = LITERAL | 1034 LAST = LITERAL |
| 1027 }; | 1035 }; |
| 1028 #undef DECLARE_TRANSLATION_OPCODE_ENUM | 1036 #undef DECLARE_TRANSLATION_OPCODE_ENUM |
| (...skipping 25 matching lines...) Expand all Loading... | |
| 1054 void StoreUint32Register(Register reg); | 1062 void StoreUint32Register(Register reg); |
| 1055 void StoreBoolRegister(Register reg); | 1063 void StoreBoolRegister(Register reg); |
| 1056 void StoreDoubleRegister(DoubleRegister reg); | 1064 void StoreDoubleRegister(DoubleRegister reg); |
| 1057 void StoreStackSlot(int index); | 1065 void StoreStackSlot(int index); |
| 1058 void StoreInt32StackSlot(int index); | 1066 void StoreInt32StackSlot(int index); |
| 1059 void StoreUint32StackSlot(int index); | 1067 void StoreUint32StackSlot(int index); |
| 1060 void StoreBoolStackSlot(int index); | 1068 void StoreBoolStackSlot(int index); |
| 1061 void StoreDoubleStackSlot(int index); | 1069 void StoreDoubleStackSlot(int index); |
| 1062 void StoreLiteral(int literal_id); | 1070 void StoreLiteral(int literal_id); |
| 1063 void StoreArgumentsObject(bool args_known, int args_index, int args_length); | 1071 void StoreArgumentsObject(bool args_known, int args_index, int args_length); |
| 1072 void StoreJSFrameFunction(); | |
| 1064 | 1073 |
| 1065 Zone* zone() const { return zone_; } | 1074 Zone* zone() const { return zone_; } |
| 1066 | 1075 |
| 1067 static int NumberOfOperandsFor(Opcode opcode); | 1076 static int NumberOfOperandsFor(Opcode opcode); |
| 1068 | 1077 |
| 1069 #if defined(OBJECT_PRINT) || defined(ENABLE_DISASSEMBLER) | 1078 #if defined(OBJECT_PRINT) || defined(ENABLE_DISASSEMBLER) |
| 1070 static const char* StringFor(Opcode opcode); | 1079 static const char* StringFor(Opcode opcode); |
| 1071 #endif | 1080 #endif |
| 1072 | 1081 |
| 1073 // A literal id which refers to the JSFunction itself. | |
| 1074 static const int kSelfLiteralId = -239; | |
| 1075 | |
| 1076 private: | 1082 private: |
| 1077 TranslationBuffer* buffer_; | 1083 TranslationBuffer* buffer_; |
| 1078 int index_; | 1084 int index_; |
| 1079 Zone* zone_; | 1085 Zone* zone_; |
| 1080 }; | 1086 }; |
| 1081 | 1087 |
| 1082 | 1088 |
| 1083 class MaterializedObjectStore { | 1089 class MaterializedObjectStore { |
| 1084 public: | 1090 public: |
| 1085 explicit MaterializedObjectStore(Isolate* isolate) : isolate_(isolate) { | 1091 explicit MaterializedObjectStore(Isolate* isolate) : isolate_(isolate) { |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1176 Object** expression_stack_; | 1182 Object** expression_stack_; |
| 1177 int source_position_; | 1183 int source_position_; |
| 1178 | 1184 |
| 1179 friend class Deoptimizer; | 1185 friend class Deoptimizer; |
| 1180 }; | 1186 }; |
| 1181 | 1187 |
| 1182 } // namespace internal | 1188 } // namespace internal |
| 1183 } // namespace v8 | 1189 } // namespace v8 |
| 1184 | 1190 |
| 1185 #endif // V8_DEOPTIMIZER_H_ | 1191 #endif // V8_DEOPTIMIZER_H_ |
| OLD | NEW |