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

Side by Side Diff: src/compiler.h

Issue 1225683004: [turbofan] Add new JSFrameSpecialization reducer. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Also specialize Parameters as discussed with Jaro. Created 5 years, 5 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 | « BUILD.gn ('k') | src/compiler.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_COMPILER_H_ 5 #ifndef V8_COMPILER_H_
6 #define V8_COMPILER_H_ 6 #define V8_COMPILER_H_
7 7
8 #include "src/allocation.h" 8 #include "src/allocation.h"
9 #include "src/ast.h" 9 #include "src/ast.h"
10 #include "src/bailout-reason.h" 10 #include "src/bailout-reason.h"
11 #include "src/compilation-dependencies.h" 11 #include "src/compilation-dependencies.h"
12 #include "src/signature.h" 12 #include "src/signature.h"
13 #include "src/zone.h" 13 #include "src/zone.h"
14 14
15 namespace v8 { 15 namespace v8 {
16 namespace internal { 16 namespace internal {
17 17
18 class AstValueFactory; 18 class AstValueFactory;
19 class HydrogenCodeStub; 19 class HydrogenCodeStub;
20 class JavaScriptFrame;
20 class ParseInfo; 21 class ParseInfo;
21 class ScriptData; 22 class ScriptData;
22 23
23 struct OffsetRange { 24 struct OffsetRange {
24 OffsetRange(int from, int to) : from(from), to(to) {} 25 OffsetRange(int from, int to) : from(from), to(to) {}
25 int from; 26 int from;
26 int to; 27 int to;
27 }; 28 };
28 29
29 30
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
115 kDeferredCalling = 1 << 0, 116 kDeferredCalling = 1 << 0,
116 kNonDeferredCalling = 1 << 1, 117 kNonDeferredCalling = 1 << 1,
117 kSavesCallerDoubles = 1 << 2, 118 kSavesCallerDoubles = 1 << 2,
118 kRequiresFrame = 1 << 3, 119 kRequiresFrame = 1 << 3,
119 kMustNotHaveEagerFrame = 1 << 4, 120 kMustNotHaveEagerFrame = 1 << 4,
120 kDeoptimizationSupport = 1 << 5, 121 kDeoptimizationSupport = 1 << 5,
121 kDebug = 1 << 6, 122 kDebug = 1 << 6,
122 kCompilingForDebugging = 1 << 7, 123 kCompilingForDebugging = 1 << 7,
123 kSerializing = 1 << 8, 124 kSerializing = 1 << 8,
124 kContextSpecializing = 1 << 9, 125 kContextSpecializing = 1 << 9,
125 kInliningEnabled = 1 << 10, 126 kFrameSpecializing = 1 << 10,
126 kTypingEnabled = 1 << 11, 127 kInliningEnabled = 1 << 11,
127 kDisableFutureOptimization = 1 << 12, 128 kTypingEnabled = 1 << 12,
128 kSplittingEnabled = 1 << 13, 129 kDisableFutureOptimization = 1 << 13,
129 kTypeFeedbackEnabled = 1 << 14, 130 kSplittingEnabled = 1 << 14,
130 kDeoptimizationEnabled = 1 << 15, 131 kTypeFeedbackEnabled = 1 << 15,
131 kSourcePositionsEnabled = 1 << 16, 132 kDeoptimizationEnabled = 1 << 16,
132 kFirstCompile = 1 << 17, 133 kSourcePositionsEnabled = 1 << 17,
134 kFirstCompile = 1 << 18,
133 }; 135 };
134 136
135 explicit CompilationInfo(ParseInfo* parse_info); 137 explicit CompilationInfo(ParseInfo* parse_info);
136 CompilationInfo(CodeStub* stub, Isolate* isolate, Zone* zone); 138 CompilationInfo(CodeStub* stub, Isolate* isolate, Zone* zone);
137 virtual ~CompilationInfo(); 139 virtual ~CompilationInfo();
138 140
139 ParseInfo* parse_info() const { return parse_info_; } 141 ParseInfo* parse_info() const { return parse_info_; }
140 142
141 // ----------------------------------------------------------- 143 // -----------------------------------------------------------
142 // TODO(titzer): inline and delete accessors of ParseInfo 144 // TODO(titzer): inline and delete accessors of ParseInfo
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
210 bool is_debug() const { return GetFlag(kDebug); } 212 bool is_debug() const { return GetFlag(kDebug); }
211 213
212 void PrepareForSerializing() { SetFlag(kSerializing); } 214 void PrepareForSerializing() { SetFlag(kSerializing); }
213 215
214 bool will_serialize() const { return GetFlag(kSerializing); } 216 bool will_serialize() const { return GetFlag(kSerializing); }
215 217
216 void MarkAsContextSpecializing() { SetFlag(kContextSpecializing); } 218 void MarkAsContextSpecializing() { SetFlag(kContextSpecializing); }
217 219
218 bool is_context_specializing() const { return GetFlag(kContextSpecializing); } 220 bool is_context_specializing() const { return GetFlag(kContextSpecializing); }
219 221
222 void MarkAsFrameSpecializing() { SetFlag(kFrameSpecializing); }
223
224 bool is_frame_specializing() const { return GetFlag(kFrameSpecializing); }
225
220 void MarkAsTypeFeedbackEnabled() { SetFlag(kTypeFeedbackEnabled); } 226 void MarkAsTypeFeedbackEnabled() { SetFlag(kTypeFeedbackEnabled); }
221 227
222 bool is_type_feedback_enabled() const { 228 bool is_type_feedback_enabled() const {
223 return GetFlag(kTypeFeedbackEnabled); 229 return GetFlag(kTypeFeedbackEnabled);
224 } 230 }
225 231
226 void MarkAsDeoptimizationEnabled() { SetFlag(kDeoptimizationEnabled); } 232 void MarkAsDeoptimizationEnabled() { SetFlag(kDeoptimizationEnabled); }
227 233
228 bool is_deoptimization_enabled() const { 234 bool is_deoptimization_enabled() const {
229 return GetFlag(kDeoptimizationEnabled); 235 return GetFlag(kDeoptimizationEnabled);
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
381 return osr_ast_id_ == osr_ast_id && function.is_identical_to(closure()); 387 return osr_ast_id_ == osr_ast_id && function.is_identical_to(closure());
382 } 388 }
383 389
384 int optimization_id() const { return optimization_id_; } 390 int optimization_id() const { return optimization_id_; }
385 391
386 int osr_expr_stack_height() { return osr_expr_stack_height_; } 392 int osr_expr_stack_height() { return osr_expr_stack_height_; }
387 void set_osr_expr_stack_height(int height) { 393 void set_osr_expr_stack_height(int height) {
388 DCHECK(height >= 0); 394 DCHECK(height >= 0);
389 osr_expr_stack_height_ = height; 395 osr_expr_stack_height_ = height;
390 } 396 }
397 JavaScriptFrame* osr_frame() const { return osr_frame_; }
398 void set_osr_frame(JavaScriptFrame* osr_frame) { osr_frame_ = osr_frame; }
391 399
392 #if DEBUG 400 #if DEBUG
393 void PrintAstForTesting(); 401 void PrintAstForTesting();
394 #endif 402 #endif
395 403
396 bool is_simple_parameter_list(); 404 bool is_simple_parameter_list();
397 405
398 Handle<Code> GenerateCodeStub(); 406 Handle<Code> GenerateCodeStub();
399 407
400 typedef std::vector<Handle<SharedFunctionInfo>> InlinedFunctionList; 408 typedef std::vector<Handle<SharedFunctionInfo>> InlinedFunctionList;
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
485 // during graph optimization. 493 // during graph optimization.
486 int opt_count_; 494 int opt_count_;
487 495
488 // Number of parameters used for compilation of stubs that require arguments. 496 // Number of parameters used for compilation of stubs that require arguments.
489 int parameter_count_; 497 int parameter_count_;
490 498
491 int optimization_id_; 499 int optimization_id_;
492 500
493 int osr_expr_stack_height_; 501 int osr_expr_stack_height_;
494 502
503 // The current OSR frame for specialization or {nullptr}.
504 JavaScriptFrame* osr_frame_ = nullptr;
505
495 Type::FunctionType* function_type_; 506 Type::FunctionType* function_type_;
496 507
497 DISALLOW_COPY_AND_ASSIGN(CompilationInfo); 508 DISALLOW_COPY_AND_ASSIGN(CompilationInfo);
498 }; 509 };
499 510
500 511
501 // A wrapper around a CompilationInfo that detaches the Handles from 512 // A wrapper around a CompilationInfo that detaches the Handles from
502 // the underlying DeferredHandleScope and stores them in info_ on 513 // the underlying DeferredHandleScope and stores them in info_ on
503 // destruction. 514 // destruction.
504 class CompilationHandleScope BASE_EMBEDDED { 515 class CompilationHandleScope BASE_EMBEDDED {
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after
655 // Create a shared function info object (the code may be lazily compiled). 666 // Create a shared function info object (the code may be lazily compiled).
656 static Handle<SharedFunctionInfo> GetSharedFunctionInfo( 667 static Handle<SharedFunctionInfo> GetSharedFunctionInfo(
657 FunctionLiteral* node, Handle<Script> script, CompilationInfo* outer); 668 FunctionLiteral* node, Handle<Script> script, CompilationInfo* outer);
658 669
659 enum ConcurrencyMode { NOT_CONCURRENT, CONCURRENT }; 670 enum ConcurrencyMode { NOT_CONCURRENT, CONCURRENT };
660 671
661 // Generate and return optimized code or start a concurrent optimization job. 672 // Generate and return optimized code or start a concurrent optimization job.
662 // In the latter case, return the InOptimizationQueue builtin. On failure, 673 // In the latter case, return the InOptimizationQueue builtin. On failure,
663 // return the empty handle. 674 // return the empty handle.
664 MUST_USE_RESULT static MaybeHandle<Code> GetOptimizedCode( 675 MUST_USE_RESULT static MaybeHandle<Code> GetOptimizedCode(
665 Handle<JSFunction> function, 676 Handle<JSFunction> function, Handle<Code> current_code,
666 Handle<Code> current_code, 677 ConcurrencyMode mode, BailoutId osr_ast_id = BailoutId::None(),
667 ConcurrencyMode mode, 678 JavaScriptFrame* osr_frame = nullptr);
668 BailoutId osr_ast_id = BailoutId::None());
669 679
670 // Generate and return code from previously queued optimization job. 680 // Generate and return code from previously queued optimization job.
671 // On failure, return the empty handle. 681 // On failure, return the empty handle.
672 static Handle<Code> GetConcurrentlyOptimizedCode(OptimizedCompileJob* job); 682 static Handle<Code> GetConcurrentlyOptimizedCode(OptimizedCompileJob* job);
673 683
674 // TODO(titzer): move this method out of the compiler. 684 // TODO(titzer): move this method out of the compiler.
675 static bool DebuggerWantsEagerCompilation( 685 static bool DebuggerWantsEagerCompilation(
676 Isolate* isolate, bool allow_lazy_without_ctx = false); 686 Isolate* isolate, bool allow_lazy_without_ctx = false);
677 }; 687 };
678 688
(...skipping 17 matching lines...) Expand all
696 Zone zone_; 706 Zone zone_;
697 size_t info_zone_start_allocation_size_; 707 size_t info_zone_start_allocation_size_;
698 base::ElapsedTimer timer_; 708 base::ElapsedTimer timer_;
699 709
700 DISALLOW_COPY_AND_ASSIGN(CompilationPhase); 710 DISALLOW_COPY_AND_ASSIGN(CompilationPhase);
701 }; 711 };
702 712
703 } } // namespace v8::internal 713 } } // namespace v8::internal
704 714
705 #endif // V8_COMPILER_H_ 715 #endif // V8_COMPILER_H_
OLDNEW
« no previous file with comments | « BUILD.gn ('k') | src/compiler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698