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

Side by Side Diff: src/deoptimizer.h

Issue 1768263004: [turbofan] [deoptimizer] Support inlining of ES6 tail calls. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Rebasing 2 Created 4 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
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/macro-assembler.h" 9 #include "src/macro-assembler.h"
10 10
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
109 }; 109 };
110 110
111 111
112 class TranslatedFrame { 112 class TranslatedFrame {
113 public: 113 public:
114 enum Kind { 114 enum Kind {
115 kFunction, 115 kFunction,
116 kInterpretedFunction, 116 kInterpretedFunction,
117 kGetter, 117 kGetter,
118 kSetter, 118 kSetter,
119 kTailCallerFunction,
119 kArgumentsAdaptor, 120 kArgumentsAdaptor,
120 kConstructStub, 121 kConstructStub,
121 kCompiledStub, 122 kCompiledStub,
122 kInvalid 123 kInvalid
123 }; 124 };
124 125
125 int GetValueCount(); 126 int GetValueCount();
126 127
127 Kind kind() const { return kind_; } 128 Kind kind() const { return kind_; }
128 BailoutId node_id() const { return node_id_; } 129 BailoutId node_id() const { return node_id_; }
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
179 // Constructor static methods. 180 // Constructor static methods.
180 static TranslatedFrame JSFrame(BailoutId node_id, 181 static TranslatedFrame JSFrame(BailoutId node_id,
181 SharedFunctionInfo* shared_info, int height); 182 SharedFunctionInfo* shared_info, int height);
182 static TranslatedFrame InterpretedFrame(BailoutId bytecode_offset, 183 static TranslatedFrame InterpretedFrame(BailoutId bytecode_offset,
183 SharedFunctionInfo* shared_info, 184 SharedFunctionInfo* shared_info,
184 int height); 185 int height);
185 static TranslatedFrame AccessorFrame(Kind kind, 186 static TranslatedFrame AccessorFrame(Kind kind,
186 SharedFunctionInfo* shared_info); 187 SharedFunctionInfo* shared_info);
187 static TranslatedFrame ArgumentsAdaptorFrame(SharedFunctionInfo* shared_info, 188 static TranslatedFrame ArgumentsAdaptorFrame(SharedFunctionInfo* shared_info,
188 int height); 189 int height);
190 static TranslatedFrame JSTailCallerFrame(SharedFunctionInfo* shared_info);
189 static TranslatedFrame ConstructStubFrame(SharedFunctionInfo* shared_info, 191 static TranslatedFrame ConstructStubFrame(SharedFunctionInfo* shared_info,
190 int height); 192 int height);
191 static TranslatedFrame CompiledStubFrame(int height, Isolate* isolate) { 193 static TranslatedFrame CompiledStubFrame(int height, Isolate* isolate) {
192 return TranslatedFrame(kCompiledStub, isolate, nullptr, height); 194 return TranslatedFrame(kCompiledStub, isolate, nullptr, height);
193 } 195 }
194 static TranslatedFrame InvalidFrame() { 196 static TranslatedFrame InvalidFrame() {
195 return TranslatedFrame(kInvalid, nullptr); 197 return TranslatedFrame(kInvalid, nullptr);
196 } 198 }
197 199
198 static void AdvanceIterator(std::deque<TranslatedValue>::iterator* iter); 200 static void AdvanceIterator(std::deque<TranslatedValue>::iterator* iter);
(...skipping 323 matching lines...) Expand 10 before | Expand all | Expand 10 after
522 BailoutId node_id, 524 BailoutId node_id,
523 SharedFunctionInfo* shared); 525 SharedFunctionInfo* shared);
524 526
525 // Code generation support. 527 // Code generation support.
526 static int input_offset() { return OFFSET_OF(Deoptimizer, input_); } 528 static int input_offset() { return OFFSET_OF(Deoptimizer, input_); }
527 static int output_count_offset() { 529 static int output_count_offset() {
528 return OFFSET_OF(Deoptimizer, output_count_); 530 return OFFSET_OF(Deoptimizer, output_count_);
529 } 531 }
530 static int output_offset() { return OFFSET_OF(Deoptimizer, output_); } 532 static int output_offset() { return OFFSET_OF(Deoptimizer, output_); }
531 533
534 static int caller_frame_top_offset() {
535 return OFFSET_OF(Deoptimizer, caller_frame_top_);
536 }
537
532 static int GetDeoptimizedCodeCount(Isolate* isolate); 538 static int GetDeoptimizedCodeCount(Isolate* isolate);
533 539
534 static const int kNotDeoptimizationEntry = -1; 540 static const int kNotDeoptimizationEntry = -1;
535 541
536 // Generators for the deoptimization entry code. 542 // Generators for the deoptimization entry code.
537 class TableEntryGenerator BASE_EMBEDDED { 543 class TableEntryGenerator BASE_EMBEDDED {
538 public: 544 public:
539 TableEntryGenerator(MacroAssembler* masm, BailoutType type, int count) 545 TableEntryGenerator(MacroAssembler* masm, BailoutType type, int count)
540 : masm_(masm), type_(type), count_(count) {} 546 : masm_(masm), type_(type), count_(count) {}
541 547
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
575 BailoutType type, 581 BailoutType type,
576 unsigned bailout_id, 582 unsigned bailout_id,
577 Address from, 583 Address from,
578 int fp_to_sp_delta, 584 int fp_to_sp_delta,
579 Code* optimized_code); 585 Code* optimized_code);
580 Code* FindOptimizedCode(JSFunction* function, Code* optimized_code); 586 Code* FindOptimizedCode(JSFunction* function, Code* optimized_code);
581 void PrintFunctionName(); 587 void PrintFunctionName();
582 void DeleteFrameDescriptions(); 588 void DeleteFrameDescriptions();
583 589
584 void DoComputeOutputFrames(); 590 void DoComputeOutputFrames();
585 void DoComputeJSFrame(int frame_index, bool goto_catch_handler); 591 void DoComputeJSFrame(TranslatedFrame* translated_frame, int frame_index,
586 void DoComputeInterpretedFrame(int frame_index, bool goto_catch_handler); 592 bool goto_catch_handler);
587 void DoComputeArgumentsAdaptorFrame(int frame_index); 593 void DoComputeInterpretedFrame(TranslatedFrame* translated_frame,
588 void DoComputeConstructStubFrame(int frame_index); 594 int frame_index, bool goto_catch_handler);
589 void DoComputeAccessorStubFrame(int frame_index, bool is_setter_stub_frame); 595 void DoComputeArgumentsAdaptorFrame(TranslatedFrame* translated_frame,
590 void DoComputeCompiledStubFrame(int frame_index); 596 int frame_index);
597 void DoComputeTailCallerFrame(TranslatedFrame* translated_frame,
598 int frame_index);
599 void DoComputeConstructStubFrame(TranslatedFrame* translated_frame,
600 int frame_index);
601 void DoComputeAccessorStubFrame(TranslatedFrame* translated_frame,
602 int frame_index, bool is_setter_stub_frame);
603 void DoComputeCompiledStubFrame(TranslatedFrame* translated_frame,
604 int frame_index);
591 605
592 void WriteTranslatedValueToOutput( 606 void WriteTranslatedValueToOutput(
593 TranslatedFrame::iterator* iterator, int* input_index, int frame_index, 607 TranslatedFrame::iterator* iterator, int* input_index, int frame_index,
594 unsigned output_offset, const char* debug_hint_string = nullptr, 608 unsigned output_offset, const char* debug_hint_string = nullptr,
595 Address output_address_for_materialization = nullptr); 609 Address output_address_for_materialization = nullptr);
596 void WriteValueToOutput(Object* value, int input_index, int frame_index, 610 void WriteValueToOutput(Object* value, int input_index, int frame_index,
597 unsigned output_offset, 611 unsigned output_offset,
598 const char* debug_hint_string); 612 const char* debug_hint_string);
599 void DebugPrintOutputSlot(intptr_t value, int frame_index, 613 void DebugPrintOutputSlot(intptr_t value, int frame_index,
600 unsigned output_offset, 614 unsigned output_offset,
(...skipping 327 matching lines...) Expand 10 before | Expand all | Expand 10 after
928 }; 942 };
929 943
930 #define TRANSLATION_OPCODE_LIST(V) \ 944 #define TRANSLATION_OPCODE_LIST(V) \
931 V(BEGIN) \ 945 V(BEGIN) \
932 V(JS_FRAME) \ 946 V(JS_FRAME) \
933 V(INTERPRETED_FRAME) \ 947 V(INTERPRETED_FRAME) \
934 V(CONSTRUCT_STUB_FRAME) \ 948 V(CONSTRUCT_STUB_FRAME) \
935 V(GETTER_STUB_FRAME) \ 949 V(GETTER_STUB_FRAME) \
936 V(SETTER_STUB_FRAME) \ 950 V(SETTER_STUB_FRAME) \
937 V(ARGUMENTS_ADAPTOR_FRAME) \ 951 V(ARGUMENTS_ADAPTOR_FRAME) \
952 V(JS_TAIL_CALLER_FRAME) \
Michael Starzinger 2016/03/08 16:25:08 nit: Can we call this "TAIL_CALLER_FRAME" without
Igor Sheludko 2016/03/08 18:03:40 Done.
938 V(COMPILED_STUB_FRAME) \ 953 V(COMPILED_STUB_FRAME) \
939 V(DUPLICATED_OBJECT) \ 954 V(DUPLICATED_OBJECT) \
940 V(ARGUMENTS_OBJECT) \ 955 V(ARGUMENTS_OBJECT) \
941 V(CAPTURED_OBJECT) \ 956 V(CAPTURED_OBJECT) \
942 V(REGISTER) \ 957 V(REGISTER) \
943 V(INT32_REGISTER) \ 958 V(INT32_REGISTER) \
944 V(UINT32_REGISTER) \ 959 V(UINT32_REGISTER) \
945 V(BOOL_REGISTER) \ 960 V(BOOL_REGISTER) \
946 V(DOUBLE_REGISTER) \ 961 V(DOUBLE_REGISTER) \
947 V(STACK_SLOT) \ 962 V(STACK_SLOT) \
(...skipping 23 matching lines...) Expand all
971 } 986 }
972 987
973 int index() const { return index_; } 988 int index() const { return index_; }
974 989
975 // Commands. 990 // Commands.
976 void BeginJSFrame(BailoutId node_id, int literal_id, unsigned height); 991 void BeginJSFrame(BailoutId node_id, int literal_id, unsigned height);
977 void BeginInterpretedFrame(BailoutId bytecode_offset, int literal_id, 992 void BeginInterpretedFrame(BailoutId bytecode_offset, int literal_id,
978 unsigned height); 993 unsigned height);
979 void BeginCompiledStubFrame(int height); 994 void BeginCompiledStubFrame(int height);
980 void BeginArgumentsAdaptorFrame(int literal_id, unsigned height); 995 void BeginArgumentsAdaptorFrame(int literal_id, unsigned height);
996 void BeginTailCallerFrame(int literal_id);
981 void BeginConstructStubFrame(int literal_id, unsigned height); 997 void BeginConstructStubFrame(int literal_id, unsigned height);
982 void BeginGetterStubFrame(int literal_id); 998 void BeginGetterStubFrame(int literal_id);
983 void BeginSetterStubFrame(int literal_id); 999 void BeginSetterStubFrame(int literal_id);
984 void BeginArgumentsObject(int args_length); 1000 void BeginArgumentsObject(int args_length);
985 void BeginCapturedObject(int length); 1001 void BeginCapturedObject(int length);
986 void DuplicateObject(int object_index); 1002 void DuplicateObject(int object_index);
987 void StoreRegister(Register reg); 1003 void StoreRegister(Register reg);
988 void StoreInt32Register(Register reg); 1004 void StoreInt32Register(Register reg);
989 void StoreUint32Register(Register reg); 1005 void StoreUint32Register(Register reg);
990 void StoreBoolRegister(Register reg); 1006 void StoreBoolRegister(Register reg);
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
1099 std::vector<Handle<Object> > expression_stack_; 1115 std::vector<Handle<Object> > expression_stack_;
1100 int source_position_; 1116 int source_position_;
1101 1117
1102 friend class Deoptimizer; 1118 friend class Deoptimizer;
1103 }; 1119 };
1104 1120
1105 } // namespace internal 1121 } // namespace internal
1106 } // namespace v8 1122 } // namespace v8
1107 1123
1108 #endif // V8_DEOPTIMIZER_H_ 1124 #endif // V8_DEOPTIMIZER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698