| OLD | NEW |
| 1 // Copyright 2016 the V8 project authors. All rights reserved. | 1 // Copyright 2016 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_COMPILATION_INFO_H_ | 5 #ifndef V8_COMPILATION_INFO_H_ |
| 6 #define V8_COMPILATION_INFO_H_ | 6 #define V8_COMPILATION_INFO_H_ |
| 7 | 7 |
| 8 #include <memory> | 8 #include <memory> |
| 9 | 9 |
| 10 #include "src/compilation-dependencies.h" | 10 #include "src/compilation-dependencies.h" |
| 11 #include "src/frames.h" | 11 #include "src/frames.h" |
| 12 #include "src/globals.h" | 12 #include "src/globals.h" |
| 13 #include "src/handles.h" | 13 #include "src/handles.h" |
| 14 #include "src/objects.h" | 14 #include "src/objects.h" |
| 15 #include "src/source-position-table.h" | 15 #include "src/source-position-table.h" |
| 16 #include "src/utils.h" | 16 #include "src/utils.h" |
| 17 #include "src/vector.h" | 17 #include "src/vector.h" |
| 18 | 18 |
| 19 namespace v8 { | 19 namespace v8 { |
| 20 namespace internal { | 20 namespace internal { |
| 21 | 21 |
| 22 class CoverageInfo; |
| 22 class DeclarationScope; | 23 class DeclarationScope; |
| 23 class DeferredHandles; | 24 class DeferredHandles; |
| 24 class FunctionLiteral; | 25 class FunctionLiteral; |
| 25 class JavaScriptFrame; | 26 class JavaScriptFrame; |
| 26 class ParseInfo; | 27 class ParseInfo; |
| 27 class Isolate; | 28 class Isolate; |
| 28 class Zone; | 29 class Zone; |
| 29 | 30 |
| 30 // CompilationInfo encapsulates some information known at compile time. It | 31 // CompilationInfo encapsulates some information known at compile time. It |
| 31 // is constructed based on the resources available at compile-time. | 32 // is constructed based on the resources available at compile-time. |
| (...skipping 12 matching lines...) Expand all Loading... |
| 44 kFunctionContextSpecializing = 1 << 7, | 45 kFunctionContextSpecializing = 1 << 7, |
| 45 kFrameSpecializing = 1 << 8, | 46 kFrameSpecializing = 1 << 8, |
| 46 kInliningEnabled = 1 << 9, | 47 kInliningEnabled = 1 << 9, |
| 47 kDisableFutureOptimization = 1 << 10, | 48 kDisableFutureOptimization = 1 << 10, |
| 48 kSplittingEnabled = 1 << 11, | 49 kSplittingEnabled = 1 << 11, |
| 49 kDeoptimizationEnabled = 1 << 12, | 50 kDeoptimizationEnabled = 1 << 12, |
| 50 kSourcePositionsEnabled = 1 << 13, | 51 kSourcePositionsEnabled = 1 << 13, |
| 51 kBailoutOnUninitialized = 1 << 14, | 52 kBailoutOnUninitialized = 1 << 14, |
| 52 kOptimizeFromBytecode = 1 << 15, | 53 kOptimizeFromBytecode = 1 << 15, |
| 53 kLoopPeelingEnabled = 1 << 16, | 54 kLoopPeelingEnabled = 1 << 16, |
| 55 kBlockCoverageEnabled = 1 << 17, |
| 54 }; | 56 }; |
| 55 | 57 |
| 56 CompilationInfo(Zone* zone, ParseInfo* parse_info, Isolate* isolate, | 58 CompilationInfo(Zone* zone, ParseInfo* parse_info, Isolate* isolate, |
| 57 Handle<JSFunction> closure); | 59 Handle<JSFunction> closure); |
| 58 CompilationInfo(Vector<const char> debug_name, Isolate* isolate, Zone* zone, | 60 CompilationInfo(Vector<const char> debug_name, Isolate* isolate, Zone* zone, |
| 59 Code::Flags code_flags); | 61 Code::Flags code_flags); |
| 60 ~CompilationInfo(); | 62 ~CompilationInfo(); |
| 61 | 63 |
| 62 ParseInfo* parse_info() const { return parse_info_; } | 64 ParseInfo* parse_info() const { return parse_info_; } |
| 63 | 65 |
| (...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 172 void MarkAsOptimizeFromBytecode() { SetFlag(kOptimizeFromBytecode); } | 174 void MarkAsOptimizeFromBytecode() { SetFlag(kOptimizeFromBytecode); } |
| 173 | 175 |
| 174 bool is_optimizing_from_bytecode() const { | 176 bool is_optimizing_from_bytecode() const { |
| 175 return GetFlag(kOptimizeFromBytecode); | 177 return GetFlag(kOptimizeFromBytecode); |
| 176 } | 178 } |
| 177 | 179 |
| 178 void MarkAsLoopPeelingEnabled() { SetFlag(kLoopPeelingEnabled); } | 180 void MarkAsLoopPeelingEnabled() { SetFlag(kLoopPeelingEnabled); } |
| 179 | 181 |
| 180 bool is_loop_peeling_enabled() const { return GetFlag(kLoopPeelingEnabled); } | 182 bool is_loop_peeling_enabled() const { return GetFlag(kLoopPeelingEnabled); } |
| 181 | 183 |
| 184 void MarkAsBlockCoverageEnabled() { SetFlag(kBlockCoverageEnabled); } |
| 185 |
| 186 bool is_block_coverage_enabled() const { |
| 187 return GetFlag(kBlockCoverageEnabled); |
| 188 } |
| 189 |
| 182 bool GeneratePreagedPrologue() const { | 190 bool GeneratePreagedPrologue() const { |
| 183 // Generate a pre-aged prologue if we are optimizing for size, which | 191 // Generate a pre-aged prologue if we are optimizing for size, which |
| 184 // will make code old more aggressive. Only apply to Code::FUNCTION, | 192 // will make code old more aggressive. Only apply to Code::FUNCTION, |
| 185 // since only functions are aged in the compilation cache. | 193 // since only functions are aged in the compilation cache. |
| 186 return FLAG_optimize_for_size && FLAG_age_code && !is_debug() && | 194 return FLAG_optimize_for_size && FLAG_age_code && !is_debug() && |
| 187 output_code_kind() == Code::FUNCTION; | 195 output_code_kind() == Code::FUNCTION; |
| 188 } | 196 } |
| 189 | 197 |
| 190 void SetCode(Handle<Code> code) { code_ = code; } | 198 void SetCode(Handle<Code> code) { code_ = code; } |
| 191 | 199 |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 305 std::unique_ptr<char[]> GetDebugName() const; | 313 std::unique_ptr<char[]> GetDebugName() const; |
| 306 | 314 |
| 307 Code::Kind output_code_kind() const; | 315 Code::Kind output_code_kind() const; |
| 308 | 316 |
| 309 StackFrame::Type GetOutputStackFrameType() const; | 317 StackFrame::Type GetOutputStackFrameType() const; |
| 310 | 318 |
| 311 int GetDeclareGlobalsFlags() const; | 319 int GetDeclareGlobalsFlags() const; |
| 312 | 320 |
| 313 SourcePositionTableBuilder::RecordingMode SourcePositionRecordingMode() const; | 321 SourcePositionTableBuilder::RecordingMode SourcePositionRecordingMode() const; |
| 314 | 322 |
| 323 bool has_coverage_info() const { return !coverage_info_.is_null(); } |
| 324 Handle<CoverageInfo> coverage_info() const { return coverage_info_; } |
| 325 void set_coverage_info(Handle<CoverageInfo> coverage_info) { |
| 326 coverage_info_ = coverage_info; |
| 327 } |
| 328 |
| 315 private: | 329 private: |
| 316 // Compilation mode. | 330 // Compilation mode. |
| 317 // BASE is generated by the full codegen, optionally prepared for bailouts. | 331 // BASE is generated by the full codegen, optionally prepared for bailouts. |
| 318 // OPTIMIZE is optimized code generated by the Hydrogen-based backend. | 332 // OPTIMIZE is optimized code generated by the Hydrogen-based backend. |
| 319 enum Mode { BASE, OPTIMIZE, STUB }; | 333 enum Mode { BASE, OPTIMIZE, STUB }; |
| 320 | 334 |
| 321 CompilationInfo(ParseInfo* parse_info, Vector<const char> debug_name, | 335 CompilationInfo(ParseInfo* parse_info, Vector<const char> debug_name, |
| 322 Code::Flags code_flags, Mode mode, Isolate* isolate, | 336 Code::Flags code_flags, Mode mode, Isolate* isolate, |
| 323 Zone* zone); | 337 Zone* zone); |
| 324 | 338 |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 375 | 389 |
| 376 int optimization_id_; | 390 int optimization_id_; |
| 377 | 391 |
| 378 int osr_expr_stack_height_; | 392 int osr_expr_stack_height_; |
| 379 | 393 |
| 380 // The current OSR frame for specialization or {nullptr}. | 394 // The current OSR frame for specialization or {nullptr}. |
| 381 JavaScriptFrame* osr_frame_ = nullptr; | 395 JavaScriptFrame* osr_frame_ = nullptr; |
| 382 | 396 |
| 383 Vector<const char> debug_name_; | 397 Vector<const char> debug_name_; |
| 384 | 398 |
| 399 // Encapsulates coverage information gathered by the bytecode generator. |
| 400 // Needs to be stored on the shared function info once compilation completes. |
| 401 Handle<CoverageInfo> coverage_info_; |
| 402 |
| 385 DISALLOW_COPY_AND_ASSIGN(CompilationInfo); | 403 DISALLOW_COPY_AND_ASSIGN(CompilationInfo); |
| 386 }; | 404 }; |
| 387 | 405 |
| 388 } // namespace internal | 406 } // namespace internal |
| 389 } // namespace v8 | 407 } // namespace v8 |
| 390 | 408 |
| 391 #endif // V8_COMPILATION_INFO_H_ | 409 #endif // V8_COMPILATION_INFO_H_ |
| OLD | NEW |