• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2021 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_MAGLEV_MAGLEV_COMPILER_H_
6 #define V8_MAGLEV_MAGLEV_COMPILER_H_
7 
8 #include "src/common/globals.h"
9 #include "src/compiler/bytecode-analysis.h"
10 #include "src/compiler/heap-refs.h"
11 #include "src/maglev/maglev-compilation-unit.h"
12 
13 namespace v8 {
14 namespace internal {
15 
16 namespace compiler {
17 class JSHeapBroker;
18 }
19 
20 namespace maglev {
21 
22 class Graph;
23 
24 class MaglevCompiler {
25  public:
26   // May be called from any thread.
27   static void Compile(LocalIsolate* local_isolate,
28                       MaglevCompilationUnit* toplevel_compilation_unit);
29 
30   // Called on the main thread after Compile has completed.
31   // TODO(v8:7700): Move this to a different class?
32   static MaybeHandle<CodeT> GenerateCode(
33       MaglevCompilationUnit* toplevel_compilation_unit);
34 
35  private:
MaglevCompiler(LocalIsolate * local_isolate,MaglevCompilationUnit * toplevel_compilation_unit)36   explicit MaglevCompiler(LocalIsolate* local_isolate,
37                           MaglevCompilationUnit* toplevel_compilation_unit)
38       : local_isolate_(local_isolate),
39         toplevel_compilation_unit_(toplevel_compilation_unit) {}
40 
41   void Compile();
42 
broker()43   compiler::JSHeapBroker* broker() const {
44     return toplevel_compilation_unit_->broker();
45   }
zone()46   Zone* zone() { return toplevel_compilation_unit_->zone(); }
local_isolate()47   LocalIsolate* local_isolate() { return local_isolate_; }
48 
49   LocalIsolate* const local_isolate_;
50   MaglevCompilationUnit* const toplevel_compilation_unit_;
51 };
52 
53 }  // namespace maglev
54 }  // namespace internal
55 }  // namespace v8
56 
57 #endif  // V8_MAGLEV_MAGLEV_COMPILER_H_
58