[turbofan] Introduce experimental --concurrent-inlining flag.
For now, all it does is control when the heap broker starts serializing. Eventually it will do what its name suggests. I'm also renaming --concurrent-compiler-frontend to the more accurate --concurrent-typed-lowering. Note that it's forceably implied by --concurrent-inlining. Bug: v8:7790 Change-Id: I55c1d8f1538146e89f3e166cb9165f6f38447146 Reviewed-on: https://chromium-review.googlesource.com/c/1270839 Reviewed-by: Maya Lekova <mslekova@chromium.org> Reviewed-by: Jaroslav Sevcik <jarin@chromium.org> Commit-Queue: Georg Neis <neis@chromium.org> Cr-Commit-Position: refs/heads/master@{#56557}
This commit is contained in:
parent
b7f1334e74
commit
00227e7f4c
@ -2333,6 +2333,12 @@ void MapRef::SerializeOwnDescriptors() {
|
||||
data()->AsMap()->SerializeOwnDescriptors(broker());
|
||||
}
|
||||
|
||||
void MapRef::SerializePrototype() {
|
||||
if (broker()->mode() == JSHeapBroker::kDisabled) return;
|
||||
CHECK_EQ(broker()->mode(), JSHeapBroker::kSerializing);
|
||||
data()->AsMap()->SerializePrototype(broker());
|
||||
}
|
||||
|
||||
void ModuleRef::Serialize() {
|
||||
if (broker()->mode() == JSHeapBroker::kDisabled) return;
|
||||
CHECK_EQ(broker()->mode(), JSHeapBroker::kSerializing);
|
||||
|
@ -359,6 +359,8 @@ class MapRef : public HeapObjectRef {
|
||||
bool is_callable() const;
|
||||
|
||||
ObjectRef constructor_or_backpointer() const;
|
||||
|
||||
void SerializePrototype();
|
||||
ObjectRef prototype() const;
|
||||
|
||||
OddballType oddball_type() const;
|
||||
|
@ -359,6 +359,8 @@ Reduction JSNativeContextSpecialization::ReduceJSGetSuperConstructor(
|
||||
if (!m.HasValue()) return NoChange();
|
||||
JSFunctionRef function = m.Ref(js_heap_broker()).AsJSFunction();
|
||||
MapRef function_map = function.map();
|
||||
// TODO(neis): Remove SerializePrototype call once brokerization is complete.
|
||||
function_map.SerializePrototype();
|
||||
ObjectRef function_prototype = function_map.prototype();
|
||||
|
||||
// We can constant-fold the super constructor access if the
|
||||
|
@ -2008,6 +2008,12 @@ bool PipelineImpl::CreateGraph() {
|
||||
Run<GraphBuilderPhase>();
|
||||
RunPrintAndVerify(GraphBuilderPhase::phase_name(), true);
|
||||
|
||||
if (FLAG_concurrent_inlining) {
|
||||
data->js_heap_broker()->StartSerializing();
|
||||
Run<SerializeStandardObjectsPhase>();
|
||||
Run<CopyMetadataForConcurrentCompilePhase>();
|
||||
}
|
||||
|
||||
// Perform function context specialization and inlining (if enabled).
|
||||
Run<InliningPhase>();
|
||||
RunPrintAndVerify(InliningPhase::phase_name(), true);
|
||||
@ -2031,7 +2037,12 @@ bool PipelineImpl::CreateGraph() {
|
||||
|
||||
// Run the type-sensitive lowerings and optimizations on the graph.
|
||||
{
|
||||
if (FLAG_concurrent_compiler_frontend) {
|
||||
if (FLAG_concurrent_inlining) {
|
||||
// TODO(neis): Remove CopyMetadataForConcurrentCompilePhase call once
|
||||
// brokerization of JSNativeContextSpecialization is complete.
|
||||
Run<CopyMetadataForConcurrentCompilePhase>();
|
||||
data->js_heap_broker()->StopSerializing();
|
||||
} else if (FLAG_concurrent_typed_lowering) {
|
||||
data->js_heap_broker()->StartSerializing();
|
||||
Run<SerializeStandardObjectsPhase>();
|
||||
Run<CopyMetadataForConcurrentCompilePhase>();
|
||||
@ -2058,7 +2069,7 @@ bool PipelineImpl::OptimizeGraph(Linkage* linkage) {
|
||||
|
||||
data->BeginPhaseKind("lowering");
|
||||
|
||||
if (FLAG_concurrent_compiler_frontend) {
|
||||
if (FLAG_concurrent_typed_lowering) {
|
||||
// Type the graph and keep the Typer running such that new nodes get
|
||||
// automatically typed when they are created.
|
||||
Run<TyperPhase>(data->CreateTyper());
|
||||
@ -2574,7 +2585,7 @@ std::ostream& operator<<(std::ostream& out, const BlockStartsAsJSON& s) {
|
||||
|
||||
MaybeHandle<Code> PipelineImpl::FinalizeCode() {
|
||||
PipelineData* data = this->data_;
|
||||
if (data->js_heap_broker() && FLAG_concurrent_compiler_frontend) {
|
||||
if (data->js_heap_broker() && FLAG_concurrent_typed_lowering) {
|
||||
data->js_heap_broker()->Retire();
|
||||
}
|
||||
Run<FinalizeCodePhase>();
|
||||
|
@ -402,9 +402,13 @@ DEFINE_INT(concurrent_recompilation_delay, 0,
|
||||
"artificial compilation delay in ms")
|
||||
DEFINE_BOOL(block_concurrent_recompilation, false,
|
||||
"block queued jobs until released")
|
||||
DEFINE_BOOL(concurrent_compiler_frontend, false,
|
||||
"run optimizing compiler's frontend phases on a separate thread")
|
||||
DEFINE_IMPLICATION(future, concurrent_compiler_frontend)
|
||||
DEFINE_BOOL(
|
||||
concurrent_typed_lowering, false,
|
||||
"run optimizing compiler's typed lowering phase on a separate thread")
|
||||
DEFINE_IMPLICATION(future, concurrent_typed_lowering)
|
||||
DEFINE_BOOL(concurrent_inlining, false,
|
||||
"run optimizing compiler's inlining phase on a separate thread")
|
||||
DEFINE_IMPLICATION(concurrent_inlining, concurrent_typed_lowering)
|
||||
DEFINE_BOOL(strict_heap_broker, false, "fail on incomplete serialization")
|
||||
DEFINE_BOOL(trace_heap_broker, false, "trace the heap broker")
|
||||
|
||||
|
@ -110,8 +110,8 @@ static const int slot_index = Context::NATIVE_CONTEXT_INDEX;
|
||||
TEST(ReduceJSLoadContext0) {
|
||||
// TODO(neis): The native context below does not have all the fields
|
||||
// initialized that the heap broker wants to serialize.
|
||||
bool concurrent_compiler_frontend = FLAG_concurrent_compiler_frontend;
|
||||
FLAG_concurrent_compiler_frontend = false;
|
||||
bool concurrent_typed_lowering = FLAG_concurrent_typed_lowering;
|
||||
FLAG_concurrent_typed_lowering = false;
|
||||
|
||||
ContextSpecializationTester t(Nothing<OuterContext>());
|
||||
|
||||
@ -178,7 +178,7 @@ TEST(ReduceJSLoadContext0) {
|
||||
CHECK_EQ(*expected, *match.Value());
|
||||
}
|
||||
|
||||
FLAG_concurrent_compiler_frontend = concurrent_compiler_frontend;
|
||||
FLAG_concurrent_typed_lowering = concurrent_typed_lowering;
|
||||
}
|
||||
|
||||
TEST(ReduceJSLoadContext1) {
|
||||
@ -258,8 +258,8 @@ TEST(ReduceJSLoadContext2) {
|
||||
|
||||
// TODO(neis): The native context below does not have all the fields
|
||||
// initialized that the heap broker wants to serialize.
|
||||
bool concurrent_compiler_frontend = FLAG_concurrent_compiler_frontend;
|
||||
FLAG_concurrent_compiler_frontend = false;
|
||||
bool concurrent_typed_lowering = FLAG_concurrent_typed_lowering;
|
||||
FLAG_concurrent_typed_lowering = false;
|
||||
|
||||
ContextSpecializationTester t(Nothing<OuterContext>());
|
||||
|
||||
@ -332,7 +332,7 @@ TEST(ReduceJSLoadContext2) {
|
||||
t.CheckChangesToValue(load, slot_value0);
|
||||
}
|
||||
|
||||
FLAG_concurrent_compiler_frontend = concurrent_compiler_frontend;
|
||||
FLAG_concurrent_typed_lowering = concurrent_typed_lowering;
|
||||
}
|
||||
|
||||
TEST(ReduceJSLoadContext3) {
|
||||
@ -344,8 +344,8 @@ TEST(ReduceJSLoadContext3) {
|
||||
|
||||
// TODO(neis): The native context below does not have all the fields
|
||||
// initialized that the heap broker wants to serialize.
|
||||
bool concurrent_compiler_frontend = FLAG_concurrent_compiler_frontend;
|
||||
FLAG_concurrent_compiler_frontend = false;
|
||||
bool concurrent_typed_lowering = FLAG_concurrent_typed_lowering;
|
||||
FLAG_concurrent_typed_lowering = false;
|
||||
|
||||
HandleAndZoneScope handle_zone_scope;
|
||||
auto factory = handle_zone_scope.main_isolate()->factory();
|
||||
@ -422,14 +422,14 @@ TEST(ReduceJSLoadContext3) {
|
||||
t.CheckChangesToValue(load, slot_value0);
|
||||
}
|
||||
|
||||
FLAG_concurrent_compiler_frontend = concurrent_compiler_frontend;
|
||||
FLAG_concurrent_typed_lowering = concurrent_typed_lowering;
|
||||
}
|
||||
|
||||
TEST(ReduceJSStoreContext0) {
|
||||
// TODO(neis): The native context below does not have all the fields
|
||||
// initialized that the heap broker wants to serialize.
|
||||
bool concurrent_compiler_frontend = FLAG_concurrent_compiler_frontend;
|
||||
FLAG_concurrent_compiler_frontend = false;
|
||||
bool concurrent_typed_lowering = FLAG_concurrent_typed_lowering;
|
||||
FLAG_concurrent_typed_lowering = false;
|
||||
|
||||
ContextSpecializationTester t(Nothing<OuterContext>());
|
||||
|
||||
@ -491,7 +491,7 @@ TEST(ReduceJSStoreContext0) {
|
||||
CHECK_EQ(false, access.immutable());
|
||||
}
|
||||
|
||||
FLAG_concurrent_compiler_frontend = concurrent_compiler_frontend;
|
||||
FLAG_concurrent_typed_lowering = concurrent_typed_lowering;
|
||||
}
|
||||
|
||||
TEST(ReduceJSStoreContext1) {
|
||||
@ -541,8 +541,8 @@ TEST(ReduceJSStoreContext1) {
|
||||
TEST(ReduceJSStoreContext2) {
|
||||
// TODO(neis): The native context below does not have all the fields
|
||||
// initialized that the heap broker wants to serialize.
|
||||
bool concurrent_compiler_frontend = FLAG_concurrent_compiler_frontend;
|
||||
FLAG_concurrent_compiler_frontend = false;
|
||||
bool concurrent_typed_lowering = FLAG_concurrent_typed_lowering;
|
||||
FLAG_concurrent_typed_lowering = false;
|
||||
|
||||
ContextSpecializationTester t(Nothing<OuterContext>());
|
||||
|
||||
@ -595,14 +595,14 @@ TEST(ReduceJSStoreContext2) {
|
||||
t.CheckContextInputAndDepthChanges(store, context_object0, 0);
|
||||
}
|
||||
|
||||
FLAG_concurrent_compiler_frontend = concurrent_compiler_frontend;
|
||||
FLAG_concurrent_typed_lowering = concurrent_typed_lowering;
|
||||
}
|
||||
|
||||
TEST(ReduceJSStoreContext3) {
|
||||
// TODO(neis): The native context below does not have all the fields
|
||||
// initialized that the heap broker wants to serialize.
|
||||
bool concurrent_compiler_frontend = FLAG_concurrent_compiler_frontend;
|
||||
FLAG_concurrent_compiler_frontend = false;
|
||||
bool concurrent_typed_lowering = FLAG_concurrent_typed_lowering;
|
||||
FLAG_concurrent_typed_lowering = false;
|
||||
|
||||
HandleAndZoneScope handle_zone_scope;
|
||||
auto factory = handle_zone_scope.main_isolate()->factory();
|
||||
@ -659,7 +659,7 @@ TEST(ReduceJSStoreContext3) {
|
||||
t.CheckContextInputAndDepthChanges(store, context_object0, 0);
|
||||
}
|
||||
|
||||
FLAG_concurrent_compiler_frontend = concurrent_compiler_frontend;
|
||||
FLAG_concurrent_typed_lowering = concurrent_typed_lowering;
|
||||
}
|
||||
|
||||
TEST(SpecializeJSFunction_ToConstant1) {
|
||||
|
@ -22,7 +22,7 @@ class JSCallReducerTest : public TypedGraphTest {
|
||||
public:
|
||||
JSCallReducerTest()
|
||||
: TypedGraphTest(3), javascript_(zone()), deps_(isolate(), zone()) {
|
||||
if (FLAG_concurrent_compiler_frontend) {
|
||||
if (FLAG_concurrent_typed_lowering) {
|
||||
js_heap_broker()->SerializeStandardObjects();
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user