v8
V8 is Google’s open source high-performance JavaScript and WebAssembly engine, written in C++.
Loading...
Searching...
No Matches
pipeline.h
Go to the documentation of this file.
1// Copyright 2014 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_PIPELINE_H_
6#define V8_COMPILER_PIPELINE_H_
7
8#include <memory>
9
10// Clients of this interface shouldn't depend on lots of compiler internals.
11// Do not include anything from src/compiler here!
13#include "src/common/globals.h"
14#include "src/objects/code.h"
16
17#if V8_ENABLE_WEBASSEMBLY
19#include "src/wasm/value-type.h"
20#endif
21
22namespace v8 {
23namespace internal {
24
25struct AssemblerOptions;
26class OptimizedCompilationInfo;
27class TurbofanCompilationJob;
28class ProfileDataFromFile;
29class RegisterConfiguration;
30struct WasmInliningPosition;
31
32namespace wasm {
33struct CompilationEnv;
34struct FunctionBody;
35struct WasmCompilationResult;
36class WasmDetectedFeatures;
37} // namespace wasm
38
39namespace compiler::turboshaft {
40class Graph;
41class PipelineData;
42class TurboshaftCompilationJob;
43} // namespace compiler::turboshaft
44
45namespace compiler {
46
48class CallDescriptor;
49class TFGraph;
50class InstructionSequence;
51class JSGraph;
52class JSHeapBroker;
53class MachineGraph;
54class Schedule;
55class SourcePositionTable;
56struct WasmCompilationData;
57class TFPipelineData;
58class ZoneStats;
59
64
65std::ostream& operator<<(std::ostream& out, const InstructionRangesAsJSON& s);
66
67class Pipeline : public AllStatic {
68 public:
69 // Returns a new compilation job for the given JavaScript function.
70 static V8_EXPORT_PRIVATE std::unique_ptr<TurbofanCompilationJob>
72 CodeKind code_kind, bool has_script,
74
76 std::function<void(compiler::CodeAssemblerState*)>;
78 std::function<void(Builtin builtin, Handle<Code> code)>;
79
80 static std::unique_ptr<TurbofanCompilationJob>
82 Isolate* isolate, Builtin builtin, CodeAssemblerGenerator generator,
83 CodeAssemblerInstaller installer,
84 const AssemblerOptions& assembler_options,
85 CallDescriptors::Key interface_descriptor, const char* name,
86 const ProfileDataFromFile* profile_data, int finalize_order);
87
88 static std::unique_ptr<TurbofanCompilationJob>
90 Isolate* isolate, Builtin builtin, CodeAssemblerGenerator generator,
91 CodeAssemblerInstaller installer,
92 const AssemblerOptions& assembler_options, int argc, const char* name,
93 const ProfileDataFromFile* profile_data, int finalize_order);
94
95 static std::unique_ptr<TurbofanCompilationJob>
97 CodeAssemblerGenerator generator,
98 CodeAssemblerInstaller installer,
99 const AssemblerOptions& assembler_options,
100 const char* name,
101 const ProfileDataFromFile* profile_data,
102 int finalize_order);
103
104#if V8_ENABLE_WEBASSEMBLY
105 // Run the pipeline on a machine graph and generate code.
106 static wasm::WasmCompilationResult GenerateCodeForWasmNativeStub(
107 CallDescriptor* call_descriptor, MachineGraph* mcgraph, CodeKind kind,
108 const char* debug_name, const AssemblerOptions& assembler_options,
110
112 GenerateCodeForWasmNativeStubFromTurboshaft(
114 const char* debug_name, const AssemblerOptions& assembler_options,
116
117 static wasm::WasmCompilationResult GenerateWasmCode(
118 wasm::CompilationEnv* env, WasmCompilationData& compilation_data,
119 wasm::WasmDetectedFeatures* detected, Counters* counters);
120
121 // Returns a new compilation job for a wasm heap stub.
122 static std::unique_ptr<TurbofanCompilationJob> NewWasmHeapStubCompilationJob(
123 Isolate* isolate, CallDescriptor* call_descriptor,
124 std::unique_ptr<Zone> zone, TFGraph* graph, CodeKind kind,
125 std::unique_ptr<char[]> debug_name, const AssemblerOptions& options);
126
127 static std::unique_ptr<compiler::turboshaft::TurboshaftCompilationJob>
128 NewWasmTurboshaftWrapperCompilationJob(
129 Isolate* isolate, const wasm::CanonicalSig* sig,
130 wasm::WrapperCompilationInfo wrapper_info,
131 std::unique_ptr<char[]> debug_name, const AssemblerOptions& options);
132#endif
133
135 turboshaft::PipelineData* turboshaft_data,
136 CallDescriptor* call_descriptor, Builtin builtin, const char* debug_name,
137 const ProfileDataFromFile* profile_data);
138
139 // ---------------------------------------------------------------------------
140 // The following methods are for testing purposes only. Avoid production use.
141 // ---------------------------------------------------------------------------
142
143 // Run the pipeline on JavaScript bytecode and generate code.
145 OptimizedCompilationInfo* info, Isolate* isolate);
146
147 // Run the pipeline on a machine graph and generate code. If {schedule} is
148 // {nullptr}, then compute a new schedule for code generation.
150 OptimizedCompilationInfo* info, Isolate* isolate,
151 CallDescriptor* call_descriptor, TFGraph* graph,
152 const AssemblerOptions& options, Schedule* schedule = nullptr);
153
154 // Run the instruction selector on a turboshaft graph and generate code.
156 CallDescriptor* call_descriptor, turboshaft::PipelineData* data);
157
158 private:
160};
161
162} // namespace compiler
163} // namespace internal
164} // namespace v8
165
166#endif // V8_COMPILER_PIPELINE_H_
Schedule * schedule
Builtins::Kind kind
Definition builtins.cc:40
static constexpr BytecodeOffset None()
Definition utils.h:675
static std::unique_ptr< TurbofanCompilationJob > NewBytecodeHandlerCompilationJob(Isolate *isolate, Builtin builtin, CodeAssemblerGenerator generator, CodeAssemblerInstaller installer, const AssemblerOptions &assembler_options, const char *name, const ProfileDataFromFile *profile_data, int finalize_order)
Definition pipeline.cc:2487
static MaybeHandle< Code > GenerateCodeForTurboshaftBuiltin(turboshaft::PipelineData *turboshaft_data, CallDescriptor *call_descriptor, Builtin builtin, const char *debug_name, const ProfileDataFromFile *profile_data)
Definition pipeline.cc:2518
std::function< void(Builtin builtin, Handle< Code > code)> CodeAssemblerInstaller
Definition pipeline.h:77
static std::unique_ptr< TurbofanCompilationJob > NewCSLinkageCodeStubBuiltinCompilationJob(Isolate *isolate, Builtin builtin, CodeAssemblerGenerator generator, CodeAssemblerInstaller installer, const AssemblerOptions &assembler_options, CallDescriptors::Key interface_descriptor, const char *name, const ProfileDataFromFile *profile_data, int finalize_order)
Definition pipeline.cc:2448
static V8_EXPORT_PRIVATE MaybeHandle< Code > GenerateCodeForTesting(OptimizedCompilationInfo *info, Isolate *isolate)
Definition pipeline.cc:3095
static V8_EXPORT_PRIVATE MaybeHandle< Code > GenerateTurboshaftCodeForTesting(CallDescriptor *call_descriptor, turboshaft::PipelineData *data)
Definition pipeline.cc:3229
static V8_EXPORT_PRIVATE std::unique_ptr< TurbofanCompilationJob > NewCompilationJob(Isolate *isolate, Handle< JSFunction > function, CodeKind code_kind, bool has_script, BytecodeOffset osr_offset=BytecodeOffset::None())
Definition pipeline.cc:3273
std::function< void(compiler::CodeAssemblerState *)> CodeAssemblerGenerator
Definition pipeline.h:75
static std::unique_ptr< TurbofanCompilationJob > NewJSLinkageCodeStubBuiltinCompilationJob(Isolate *isolate, Builtin builtin, CodeAssemblerGenerator generator, CodeAssemblerInstaller installer, const AssemblerOptions &assembler_options, int argc, const char *name, const ProfileDataFromFile *profile_data, int finalize_order)
Definition pipeline.cc:2470
SourcePositionTable * source_positions
std::ostream & operator<<(std::ostream &os, AccessMode access_mode)
compiler::CodeAssemblerState CodeAssemblerState
kWasmInternalFunctionIndirectPointerTag kProtectedInstanceDataOffset sig
Definition c-api.cc:87
#define V8_EXPORT_PRIVATE
Definition macros.h:460
const ZoneVector< std::pair< int, int > > * instr_origins
Definition pipeline.h:62
const InstructionSequence * sequence
Definition pipeline.h:61