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 "src/v8.h" 9 10 #include "src/compiler.h" 11 12 // Note: TODO(turbofan) implies a performance improvement opportunity, 13 // and TODO(name) implies an incomplete implementation 14 15 namespace v8 { 16 namespace internal { 17 namespace compiler { 18 19 // Clients of this interface shouldn't depend on lots of compiler internals. 20 class Graph; 21 class Schedule; 22 class SourcePositionTable; 23 class Linkage; 24 25 class Pipeline { 26 public: Pipeline(CompilationInfo * info)27 explicit Pipeline(CompilationInfo* info) : info_(info) {} 28 29 // Run the entire pipeline and generate a handle to a code object. 30 Handle<Code> GenerateCode(); 31 32 // Run the pipeline on a machine graph and generate code. If {schedule} 33 // is {NULL}, then compute a new schedule for code generation. 34 Handle<Code> GenerateCodeForMachineGraph(Linkage* linkage, Graph* graph, 35 Schedule* schedule = NULL); 36 SupportedBackend()37 static inline bool SupportedBackend() { return V8_TURBOFAN_BACKEND != 0; } SupportedTarget()38 static inline bool SupportedTarget() { return V8_TURBOFAN_TARGET != 0; } 39 40 static void SetUp(); 41 static void TearDown(); 42 43 private: 44 CompilationInfo* info_; 45 info()46 CompilationInfo* info() const { return info_; } isolate()47 Isolate* isolate() { return info_->isolate(); } zone()48 Zone* zone() { return info_->zone(); } 49 50 Schedule* ComputeSchedule(Graph* graph); 51 void VerifyAndPrintGraph(Graph* graph, const char* phase); 52 Handle<Code> GenerateCode(Linkage* linkage, Graph* graph, Schedule* schedule, 53 SourcePositionTable* source_positions); 54 }; 55 } 56 } 57 } // namespace v8::internal::compiler 58 59 #endif // V8_COMPILER_PIPELINE_H_ 60