blob: 9f8241a63c4ee4984f2f261f333a6447ce849c09 [file] [log] [blame]
Ben Murdochb8a8cc12014-11-26 15:28:44 +00001// 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
15namespace v8 {
16namespace internal {
17namespace compiler {
18
19// Clients of this interface shouldn't depend on lots of compiler internals.
20class Graph;
21class Schedule;
22class SourcePositionTable;
23class Linkage;
24
25class 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_