Home | History | Annotate | Download | only in compiler
      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:
     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 
     37   static inline bool SupportedBackend() { return V8_TURBOFAN_BACKEND != 0; }
     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 
     46   CompilationInfo* info() const { return info_; }
     47   Isolate* isolate() { return info_->isolate(); }
     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