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 // Clients of this interface shouldn't depend on lots of compiler internals. 9 // Do not include anything from src/compiler here! 10 #include "src/objects.h" 11 12 namespace v8 { 13 namespace internal { 14 15 class CompilationInfo; 16 class CompilationJob; 17 class RegisterConfiguration; 18 19 namespace compiler { 20 21 class CallDescriptor; 22 class Graph; 23 class InstructionSequence; 24 class Schedule; 25 class SourcePositionTable; 26 27 class Pipeline : public AllStatic { 28 public: 29 // Returns a new compilation job for the given function. 30 static CompilationJob* NewCompilationJob(Handle<JSFunction> function); 31 32 // Returns a new compilation job for the WebAssembly compilation info. 33 static CompilationJob* NewWasmCompilationJob( 34 CompilationInfo* info, Graph* graph, CallDescriptor* descriptor, 35 SourcePositionTable* source_positions); 36 37 // Run the pipeline on a machine graph and generate code. The {schedule} must 38 // be valid, hence the given {graph} does not need to be schedulable. 39 static Handle<Code> GenerateCodeForCodeStub(Isolate* isolate, 40 CallDescriptor* call_descriptor, 41 Graph* graph, Schedule* schedule, 42 Code::Flags flags, 43 const char* debug_name); 44 45 // Run the entire pipeline and generate a handle to a code object suitable for 46 // testing. 47 static Handle<Code> GenerateCodeForTesting(CompilationInfo* info); 48 49 // Run the pipeline on a machine graph and generate code. If {schedule} is 50 // {nullptr}, then compute a new schedule for code generation. 51 static Handle<Code> GenerateCodeForTesting(CompilationInfo* info, 52 Graph* graph, 53 Schedule* schedule = nullptr); 54 55 // Run just the register allocator phases. 56 static bool AllocateRegistersForTesting(const RegisterConfiguration* config, 57 InstructionSequence* sequence, 58 bool run_verifier); 59 60 // Run the pipeline on a machine graph and generate code. If {schedule} is 61 // {nullptr}, then compute a new schedule for code generation. 62 static Handle<Code> GenerateCodeForTesting(CompilationInfo* info, 63 CallDescriptor* call_descriptor, 64 Graph* graph, 65 Schedule* schedule = nullptr); 66 67 private: 68 DISALLOW_IMPLICIT_CONSTRUCTORS(Pipeline); 69 }; 70 71 } // namespace compiler 72 } // namespace internal 73 } // namespace v8 74 75 #endif // V8_COMPILER_PIPELINE_H_ 76