Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(216)

Side by Side Diff: src/deoptimizer.h

Issue 2692753004: [turbofan] escape analysis supports arguments object and rest elements (Closed)
Patch Set: handle the case where Deoptimizer::function_ is a Smi Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/compiler/verifier.cc ('k') | src/deoptimizer.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/allocation.h" 8 #include "src/allocation.h"
9 #include "src/deoptimize-reason.h" 9 #include "src/deoptimize-reason.h"
10 #include "src/macro-assembler.h" 10 #include "src/macro-assembler.h"
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
125 // kind kTagged. After handlification it is always nullptr. 125 // kind kTagged. After handlification it is always nullptr.
126 Object* raw_literal_; 126 Object* raw_literal_;
127 // kind is kUInt32 or kBoolBit. 127 // kind is kUInt32 or kBoolBit.
128 uint32_t uint32_value_; 128 uint32_t uint32_value_;
129 // kind is kInt32. 129 // kind is kInt32.
130 int32_t int32_value_; 130 int32_t int32_value_;
131 // kind is kFloat 131 // kind is kFloat
132 Float32 float_value_; 132 Float32 float_value_;
133 // kind is kDouble 133 // kind is kDouble
134 Float64 double_value_; 134 Float64 double_value_;
135 // kind is kDuplicatedObject or kArgumentsObject or kCapturedObject. 135 // kind is kDuplicatedObject or kArgumentsObject or
136 // kCapturedObject.
136 MaterializedObjectInfo materialization_info_; 137 MaterializedObjectInfo materialization_info_;
137 }; 138 };
138 139
139 // Checked accessors for the union members. 140 // Checked accessors for the union members.
140 Object* raw_literal() const; 141 Object* raw_literal() const;
141 int32_t int32_value() const; 142 int32_t int32_value() const;
142 uint32_t uint32_value() const; 143 uint32_t uint32_value() const;
143 Float32 float_value() const; 144 Float32 float_value() const;
144 Float64 double_value() const; 145 Float64 double_value() const;
145 int object_length() const; 146 int object_length() const;
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
298 299
299 std::vector<TranslatedFrame>& frames() { return frames_; } 300 std::vector<TranslatedFrame>& frames() { return frames_; }
300 301
301 TranslatedFrame* GetArgumentsInfoFromJSFrameIndex(int jsframe_index, 302 TranslatedFrame* GetArgumentsInfoFromJSFrameIndex(int jsframe_index,
302 int* arguments_count); 303 int* arguments_count);
303 304
304 Isolate* isolate() { return isolate_; } 305 Isolate* isolate() { return isolate_; }
305 306
306 void Init(Address input_frame_pointer, TranslationIterator* iterator, 307 void Init(Address input_frame_pointer, TranslationIterator* iterator,
307 FixedArray* literal_array, RegisterValues* registers, 308 FixedArray* literal_array, RegisterValues* registers,
308 FILE* trace_file); 309 FILE* trace_file, int parameter_count);
309 310
310 private: 311 private:
311 friend TranslatedValue; 312 friend TranslatedValue;
312 313
313 TranslatedFrame CreateNextTranslatedFrame(TranslationIterator* iterator, 314 TranslatedFrame CreateNextTranslatedFrame(TranslationIterator* iterator,
314 FixedArray* literal_array, 315 FixedArray* literal_array,
315 Address fp, 316 Address fp,
316 FILE* trace_file); 317 FILE* trace_file);
317 TranslatedValue CreateNextTranslatedValue(int frame_index, int value_index, 318 int CreateNextTranslatedValue(int frame_index, TranslationIterator* iterator,
318 TranslationIterator* iterator, 319 FixedArray* literal_array, Address fp,
319 FixedArray* literal_array, 320 RegisterValues* registers, FILE* trace_file);
320 Address fp, 321 void CreateArgumentsElementsTranslatedValues(int frame_index,
321 RegisterValues* registers, 322 Address input_frame_pointer,
322 FILE* trace_file); 323 bool is_rest);
323 324
324 void UpdateFromPreviouslyMaterializedObjects(); 325 void UpdateFromPreviouslyMaterializedObjects();
325 Handle<Object> MaterializeAt(int frame_index, int* value_index); 326 Handle<Object> MaterializeAt(int frame_index, int* value_index);
326 Handle<Object> MaterializeObjectAt(int object_index); 327 Handle<Object> MaterializeObjectAt(int object_index);
327 class CapturedObjectMaterializer; 328 class CapturedObjectMaterializer;
328 Handle<Object> MaterializeCapturedObjectAt(TranslatedValue* slot, 329 Handle<Object> MaterializeCapturedObjectAt(TranslatedValue* slot,
329 int frame_index, int* value_index); 330 int frame_index, int* value_index);
330 bool GetAdaptedArguments(Handle<JSObject>* result, int frame_index); 331 bool GetAdaptedArguments(Handle<JSObject>* result, int frame_index);
331 332
332 static uint32_t GetUInt32Slot(Address fp, int slot_index); 333 static uint32_t GetUInt32Slot(Address fp, int slot_index);
333 static Float32 GetFloatSlot(Address fp, int slot_index); 334 static Float32 GetFloatSlot(Address fp, int slot_index);
334 static Float64 GetDoubleSlot(Address fp, int slot_index); 335 static Float64 GetDoubleSlot(Address fp, int slot_index);
335 336
336 std::vector<TranslatedFrame> frames_; 337 std::vector<TranslatedFrame> frames_;
337 Isolate* isolate_; 338 Isolate* isolate_;
338 Address stack_frame_pointer_; 339 Address stack_frame_pointer_;
339 bool has_adapted_arguments_; 340 bool has_adapted_arguments_;
341 int formal_parameter_count_;
340 342
341 struct ObjectPosition { 343 struct ObjectPosition {
342 int frame_index_; 344 int frame_index_;
343 int value_index_; 345 int value_index_;
344 }; 346 };
345 std::deque<ObjectPosition> object_positions_; 347 std::deque<ObjectPosition> object_positions_;
346 }; 348 };
347 349
348 350
349 class OptimizedFunctionVisitor BASE_EMBEDDED { 351 class OptimizedFunctionVisitor BASE_EMBEDDED {
(...skipping 575 matching lines...) Expand 10 before | Expand all | Expand 10 after
925 V(JS_FRAME) \ 927 V(JS_FRAME) \
926 V(INTERPRETED_FRAME) \ 928 V(INTERPRETED_FRAME) \
927 V(CONSTRUCT_STUB_FRAME) \ 929 V(CONSTRUCT_STUB_FRAME) \
928 V(GETTER_STUB_FRAME) \ 930 V(GETTER_STUB_FRAME) \
929 V(SETTER_STUB_FRAME) \ 931 V(SETTER_STUB_FRAME) \
930 V(ARGUMENTS_ADAPTOR_FRAME) \ 932 V(ARGUMENTS_ADAPTOR_FRAME) \
931 V(TAIL_CALLER_FRAME) \ 933 V(TAIL_CALLER_FRAME) \
932 V(COMPILED_STUB_FRAME) \ 934 V(COMPILED_STUB_FRAME) \
933 V(DUPLICATED_OBJECT) \ 935 V(DUPLICATED_OBJECT) \
934 V(ARGUMENTS_OBJECT) \ 936 V(ARGUMENTS_OBJECT) \
937 V(ARGUMENTS_ELEMENTS) \
935 V(CAPTURED_OBJECT) \ 938 V(CAPTURED_OBJECT) \
936 V(REGISTER) \ 939 V(REGISTER) \
937 V(INT32_REGISTER) \ 940 V(INT32_REGISTER) \
938 V(UINT32_REGISTER) \ 941 V(UINT32_REGISTER) \
939 V(BOOL_REGISTER) \ 942 V(BOOL_REGISTER) \
940 V(FLOAT_REGISTER) \ 943 V(FLOAT_REGISTER) \
941 V(DOUBLE_REGISTER) \ 944 V(DOUBLE_REGISTER) \
942 V(STACK_SLOT) \ 945 V(STACK_SLOT) \
943 V(INT32_STACK_SLOT) \ 946 V(INT32_STACK_SLOT) \
944 V(UINT32_STACK_SLOT) \ 947 V(UINT32_STACK_SLOT) \
(...skipping 28 matching lines...) Expand all
973 void BeginInterpretedFrame(BailoutId bytecode_offset, int literal_id, 976 void BeginInterpretedFrame(BailoutId bytecode_offset, int literal_id,
974 unsigned height); 977 unsigned height);
975 void BeginCompiledStubFrame(int height); 978 void BeginCompiledStubFrame(int height);
976 void BeginArgumentsAdaptorFrame(int literal_id, unsigned height); 979 void BeginArgumentsAdaptorFrame(int literal_id, unsigned height);
977 void BeginTailCallerFrame(int literal_id); 980 void BeginTailCallerFrame(int literal_id);
978 void BeginConstructStubFrame(BailoutId bailout_id, int literal_id, 981 void BeginConstructStubFrame(BailoutId bailout_id, int literal_id,
979 unsigned height); 982 unsigned height);
980 void BeginGetterStubFrame(int literal_id); 983 void BeginGetterStubFrame(int literal_id);
981 void BeginSetterStubFrame(int literal_id); 984 void BeginSetterStubFrame(int literal_id);
982 void BeginArgumentsObject(int args_length); 985 void BeginArgumentsObject(int args_length);
986 void ArgumentsElements(bool is_rest);
983 void BeginCapturedObject(int length); 987 void BeginCapturedObject(int length);
984 void DuplicateObject(int object_index); 988 void DuplicateObject(int object_index);
985 void StoreRegister(Register reg); 989 void StoreRegister(Register reg);
986 void StoreInt32Register(Register reg); 990 void StoreInt32Register(Register reg);
987 void StoreUint32Register(Register reg); 991 void StoreUint32Register(Register reg);
988 void StoreBoolRegister(Register reg); 992 void StoreBoolRegister(Register reg);
989 void StoreFloatRegister(FloatRegister reg); 993 void StoreFloatRegister(FloatRegister reg);
990 void StoreDoubleRegister(DoubleRegister reg); 994 void StoreDoubleRegister(DoubleRegister reg);
991 void StoreStackSlot(int index); 995 void StoreStackSlot(int index);
992 void StoreInt32StackSlot(int index); 996 void StoreInt32StackSlot(int index);
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
1099 std::vector<Handle<Object> > expression_stack_; 1103 std::vector<Handle<Object> > expression_stack_;
1100 int source_position_; 1104 int source_position_;
1101 1105
1102 friend class Deoptimizer; 1106 friend class Deoptimizer;
1103 }; 1107 };
1104 1108
1105 } // namespace internal 1109 } // namespace internal
1106 } // namespace v8 1110 } // namespace v8
1107 1111
1108 #endif // V8_DEOPTIMIZER_H_ 1112 #endif // V8_DEOPTIMIZER_H_
OLDNEW
« no previous file with comments | « src/compiler/verifier.cc ('k') | src/deoptimizer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698