v8
V8 is Google’s open source high-performance JavaScript and WebAssembly engine, written in C++.
Loading...
Searching...
No Matches
code-assembler-compilation-job.h
Go to the documentation of this file.
1// Copyright 2024 the V8 project authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef V8_COMPILER_CODE_ASSEMBLER_COMPILATION_JOB_H_
6#define V8_COMPILER_CODE_ASSEMBLER_COMPILATION_JOB_H_
7
15
16namespace v8 {
17namespace internal {
18namespace compiler {
19
20class TFGraph;
21class PipelineImpl;
22class TFPipelineData;
23
25 public:
27 std::function<void(compiler::CodeAssemblerState*)>;
29 std::function<void(Builtin builtin, Handle<Code> code)>;
30
32 Isolate* isolate, Builtin builtin, CodeAssemblerGenerator generator,
33 CodeAssemblerInstaller installer,
34 const AssemblerOptions& assembler_options,
35 std::function<compiler::CallDescriptor*(Zone*)> get_call_descriptor,
36 CodeKind code_kind, const char* name,
37 const ProfileDataFromFile* profile_data, int finalize_order);
38
41 delete;
42
43 static constexpr int kNoFinalizeOrder = -1;
44 int FinalizeOrder() const final {
46 return finalize_order_;
47 }
48
49 protected:
50 struct TFDataAndPipeline;
51
52 friend class CodeAssemblerTester;
53 V8_EXPORT_PRIVATE static std::unique_ptr<CodeAssemblerCompilationJob>
55 Isolate* isolate, Builtin builtin, CodeAssemblerGenerator generator,
56 CodeAssemblerInstaller installer,
57 std::function<compiler::CallDescriptor*(Zone*)> get_call_descriptor,
58 CodeKind code_kind, const char* name);
59
60 static bool ShouldOptimizeJumps(Isolate* isolate);
61
66
67 Status PrepareJobImpl(Isolate* isolate) final;
68 // ExecuteJobImpl is implemented in subclasses, as pipelines differ between
69 // using Turbofan and Turboshaft.
70 Status FinalizeJobImpl(Isolate* isolate) final;
71
72 virtual PipelineImpl* EmplacePipeline(Isolate* isolate) = 0;
73 virtual Handle<Code> FinalizeCode(Isolate* isolate) = 0;
74
79
85 std::optional<NodeOriginTable> node_origins_;
86
87 // Conditionally allocated, depending on flags.
88 std::unique_ptr<JumpOptimizationInfo> jump_opt_;
89 std::unique_ptr<TurbofanPipelineStatistics> pipeline_statistics_;
90
91 // Used to deterministically order finalization.
93};
94
95} // namespace compiler
96} // namespace internal
97} // namespace v8
98
99#endif // V8_COMPILER_CODE_ASSEMBLER_COMPILATION_JOB_H_
Status PrepareJobImpl(Isolate *isolate) final
Definition pipeline.cc:2304
static V8_EXPORT_PRIVATE std::unique_ptr< CodeAssemblerCompilationJob > NewJobForTesting(Isolate *isolate, Builtin builtin, CodeAssemblerGenerator generator, CodeAssemblerInstaller installer, std::function< compiler::CallDescriptor *(Zone *)> get_call_descriptor, CodeKind code_kind, const char *name)
Definition pipeline.cc:2507
CodeAssemblerCompilationJob(const CodeAssemblerCompilationJob &)=delete
Status FinalizeJobImpl(Isolate *isolate) final
Definition pipeline.cc:2355
std::function< void(Builtin builtin, Handle< Code > code)> CodeAssemblerInstaller
CodeAssemblerCompilationJob(Isolate *isolate, Builtin builtin, CodeAssemblerGenerator generator, CodeAssemblerInstaller installer, const AssemblerOptions &assembler_options, std::function< compiler::CallDescriptor *(Zone *)> get_call_descriptor, CodeKind code_kind, const char *name, const ProfileDataFromFile *profile_data, int finalize_order)
Definition pipeline.cc:2272
std::unique_ptr< TurbofanPipelineStatistics > pipeline_statistics_
virtual Handle< Code > FinalizeCode(Isolate *isolate)=0
static bool ShouldOptimizeJumps(Isolate *isolate)
Definition pipeline.cc:2299
std::function< void(compiler::CodeAssemblerState *)> CodeAssemblerGenerator
virtual PipelineImpl * EmplacePipeline(Isolate *isolate)=0
CodeAssemblerCompilationJob & operator=(const CodeAssemblerCompilationJob &)=delete
std::unique_ptr< RawMachineAssembler > raw_assembler_
#define DCHECK_NE(v1, v2)
Definition logging.h:486
#define V8_EXPORT_PRIVATE
Definition macros.h:460