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