Commit bd1cc7b0 authored by Jakob Gruber's avatar Jakob Gruber Committed by V8 LUCI CQ

[compiler] Remove support for --no-concurrent-inlining

Now that concurrent inlining is shipping on stable, remove support
--no-concurrent-inlining.

Note that it's still possible to run Turbofan exclusively on the
main thread by passing --no-concurrent-recompilation.

Bug: v8:7790, v8:12142, chromium:1240585
Change-Id: I1943bbbcad7dea7e3a3c337c239f14f7d96c23cd
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3308798Reviewed-by: 's avatarLiviu Rau <liviurau@chromium.org>
Reviewed-by: 's avatarMaya Lekova <mslekova@chromium.org>
Commit-Queue: Jakob Gruber <jgruber@chromium.org>
Cr-Commit-Position: refs/heads/main@{#78644}
parent 1f2acdba
...@@ -2600,8 +2600,6 @@ filegroup( ...@@ -2600,8 +2600,6 @@ filegroup(
"src/compiler/js-graph.h", "src/compiler/js-graph.h",
"src/compiler/js-heap-broker.cc", "src/compiler/js-heap-broker.cc",
"src/compiler/js-heap-broker.h", "src/compiler/js-heap-broker.h",
"src/compiler/js-heap-copy-reducer.cc",
"src/compiler/js-heap-copy-reducer.h",
"src/compiler/js-inlining.cc", "src/compiler/js-inlining.cc",
"src/compiler/js-inlining.h", "src/compiler/js-inlining.h",
"src/compiler/js-inlining-heuristic.cc", "src/compiler/js-inlining-heuristic.cc",
......
...@@ -2784,7 +2784,6 @@ v8_header_set("v8_internal_headers") { ...@@ -2784,7 +2784,6 @@ v8_header_set("v8_internal_headers") {
"src/compiler/js-generic-lowering.h", "src/compiler/js-generic-lowering.h",
"src/compiler/js-graph.h", "src/compiler/js-graph.h",
"src/compiler/js-heap-broker.h", "src/compiler/js-heap-broker.h",
"src/compiler/js-heap-copy-reducer.h",
"src/compiler/js-inlining-heuristic.h", "src/compiler/js-inlining-heuristic.h",
"src/compiler/js-inlining.h", "src/compiler/js-inlining.h",
"src/compiler/js-intrinsic-lowering.h", "src/compiler/js-intrinsic-lowering.h",
...@@ -3845,7 +3844,6 @@ v8_compiler_sources = [ ...@@ -3845,7 +3844,6 @@ v8_compiler_sources = [
"src/compiler/js-generic-lowering.cc", "src/compiler/js-generic-lowering.cc",
"src/compiler/js-graph.cc", "src/compiler/js-graph.cc",
"src/compiler/js-heap-broker.cc", "src/compiler/js-heap-broker.cc",
"src/compiler/js-heap-copy-reducer.cc",
"src/compiler/js-inlining-heuristic.cc", "src/compiler/js-inlining-heuristic.cc",
"src/compiler/js-inlining.cc", "src/compiler/js-inlining.cc",
"src/compiler/js-intrinsic-lowering.cc", "src/compiler/js-intrinsic-lowering.cc",
......
...@@ -361,7 +361,6 @@ ...@@ -361,7 +361,6 @@
{'name': 'v8testing', 'variant': 'stress_instruction_scheduling'}, {'name': 'v8testing', 'variant': 'stress_instruction_scheduling'},
{'name': 'v8testing', 'variant': 'stress_concurrent_allocation'}, {'name': 'v8testing', 'variant': 'stress_concurrent_allocation'},
{'name': 'v8testing', 'variant': 'stress_concurrent_inlining'}, {'name': 'v8testing', 'variant': 'stress_concurrent_inlining'},
{'name': 'v8testing', 'variant': 'no_concurrent_inlining'},
], ],
}, },
'v8_linux64_dict_tracking_dbg_ng_triggered': { 'v8_linux64_dict_tracking_dbg_ng_triggered': {
...@@ -474,7 +473,6 @@ ...@@ -474,7 +473,6 @@
{'name': 'v8testing', 'variant': 'extra'}, {'name': 'v8testing', 'variant': 'extra'},
{'name': 'v8testing', 'variant': 'no_lfa'}, {'name': 'v8testing', 'variant': 'no_lfa'},
{'name': 'v8testing', 'variant': 'stress_instruction_scheduling'}, {'name': 'v8testing', 'variant': 'stress_instruction_scheduling'},
{'name': 'v8testing', 'variant': 'no_concurrent_inlining'},
], ],
}, },
'v8_linux64_perfetto_dbg_ng_triggered': { 'v8_linux64_perfetto_dbg_ng_triggered': {
...@@ -520,7 +518,6 @@ ...@@ -520,7 +518,6 @@
{'name': 'v8testing', 'variant': 'no_lfa'}, {'name': 'v8testing', 'variant': 'no_lfa'},
{'name': 'v8testing', 'variant': 'slow_path'}, {'name': 'v8testing', 'variant': 'slow_path'},
{'name': 'v8testing', 'variant': 'stress_instruction_scheduling'}, {'name': 'v8testing', 'variant': 'stress_instruction_scheduling'},
{'name': 'v8testing', 'variant': 'no_concurrent_inlining'},
], ],
}, },
'v8_linux64_tsan_rel_ng_triggered': { 'v8_linux64_tsan_rel_ng_triggered': {
...@@ -1153,7 +1150,6 @@ ...@@ -1153,7 +1150,6 @@
{'name': 'v8testing', 'variant': 'minor_mc'}, {'name': 'v8testing', 'variant': 'minor_mc'},
{'name': 'v8testing', 'variant': 'no_lfa'}, {'name': 'v8testing', 'variant': 'no_lfa'},
{'name': 'v8testing', 'variant': 'stress_instruction_scheduling'}, {'name': 'v8testing', 'variant': 'stress_instruction_scheduling'},
{'name': 'v8testing', 'variant': 'no_concurrent_inlining'},
# Noavx. # Noavx.
{ {
'name': 'mozilla', 'name': 'mozilla',
...@@ -1215,7 +1211,6 @@ ...@@ -1215,7 +1211,6 @@
{'name': 'v8testing', 'variant': 'stress_instruction_scheduling'}, {'name': 'v8testing', 'variant': 'stress_instruction_scheduling'},
{'name': 'v8testing', 'variant': 'stress_concurrent_allocation'}, {'name': 'v8testing', 'variant': 'stress_concurrent_allocation'},
{'name': 'v8testing', 'variant': 'stress_concurrent_inlining'}, {'name': 'v8testing', 'variant': 'stress_concurrent_inlining'},
{'name': 'v8testing', 'variant': 'no_concurrent_inlining'},
# Noavx. # Noavx.
{ {
'name': 'mozilla', 'name': 'mozilla',
......
...@@ -66,10 +66,6 @@ OptimizedCompilationInfo::OptimizedCompilationInfo( ...@@ -66,10 +66,6 @@ OptimizedCompilationInfo::OptimizedCompilationInfo(
void OptimizedCompilationInfo::ConfigureFlags() { void OptimizedCompilationInfo::ConfigureFlags() {
if (FLAG_turbo_inline_js_wasm_calls) set_inline_js_wasm_calls(); if (FLAG_turbo_inline_js_wasm_calls) set_inline_js_wasm_calls();
if (IsTurboprop() || FLAG_concurrent_inlining) {
set_concurrent_inlining();
}
switch (code_kind_) { switch (code_kind_) {
case CodeKind::TURBOFAN: case CodeKind::TURBOFAN:
if (FLAG_function_context_specialization) { if (FLAG_function_context_specialization) {
......
...@@ -68,9 +68,8 @@ class V8_EXPORT_PRIVATE OptimizedCompilationInfo final { ...@@ -68,9 +68,8 @@ class V8_EXPORT_PRIVATE OptimizedCompilationInfo final {
V(TraceTurboAllocation, trace_turbo_allocation, 14) \ V(TraceTurboAllocation, trace_turbo_allocation, 14) \
V(TraceHeapBroker, trace_heap_broker, 15) \ V(TraceHeapBroker, trace_heap_broker, 15) \
V(WasmRuntimeExceptionSupport, wasm_runtime_exception_support, 16) \ V(WasmRuntimeExceptionSupport, wasm_runtime_exception_support, 16) \
V(ConcurrentInlining, concurrent_inlining, 17) \ V(DiscardResultForTesting, discard_result_for_testing, 17) \
V(DiscardResultForTesting, discard_result_for_testing, 18) \ V(InlineJSWasmCalls, inline_js_wasm_calls, 18)
V(InlineJSWasmCalls, inline_js_wasm_calls, 19)
enum Flag { enum Flag {
#define DEF_ENUM(Camel, Lower, Bit) k##Camel = 1 << Bit, #define DEF_ENUM(Camel, Lower, Bit) k##Camel = 1 << Bit,
......
...@@ -730,8 +730,7 @@ bool AccessInfoFactory::TryLoadPropertyDetails( ...@@ -730,8 +730,7 @@ bool AccessInfoFactory::TryLoadPropertyDetails(
} }
} else { } else {
DescriptorArray descriptors = *map.instance_descriptors().object(); DescriptorArray descriptors = *map.instance_descriptors().object();
*index_out = descriptors.Search(*name.object(), *map.object(), *index_out = descriptors.Search(*name.object(), *map.object(), true);
broker()->is_concurrent_inlining());
if (index_out->is_found()) { if (index_out->is_found()) {
*details_out = descriptors.GetDetails(*index_out); *details_out = descriptors.GetDetails(*index_out);
} }
...@@ -744,10 +743,8 @@ PropertyAccessInfo AccessInfoFactory::ComputePropertyAccessInfo( ...@@ -744,10 +743,8 @@ PropertyAccessInfo AccessInfoFactory::ComputePropertyAccessInfo(
MapRef map, NameRef name, AccessMode access_mode) const { MapRef map, NameRef name, AccessMode access_mode) const {
CHECK(name.IsUniqueName()); CHECK(name.IsUniqueName());
// Dictionary property const tracking is unsupported when concurrent inlining // Dictionary property const tracking is unsupported with concurrent inlining.
// is enabled. CHECK(!V8_DICT_PROPERTY_CONST_TRACKING_BOOL);
CHECK_IMPLIES(V8_DICT_PROPERTY_CONST_TRACKING_BOOL,
!broker()->is_concurrent_inlining());
JSHeapBroker::MapUpdaterGuardIfNeeded mumd_scope(broker()); JSHeapBroker::MapUpdaterGuardIfNeeded mumd_scope(broker());
...@@ -911,12 +908,6 @@ PropertyAccessInfo AccessInfoFactory::ComputePropertyAccessInfo( ...@@ -911,12 +908,6 @@ PropertyAccessInfo AccessInfoFactory::ComputePropertyAccessInfo(
} }
// Walk up the prototype chain. // Walk up the prototype chain.
if (!broker()->is_concurrent_inlining()) {
if (!map.TrySerializePrototype(NotConcurrentInliningTag{broker()})) {
return Invalid();
}
}
// Load the map's prototype's map to guarantee that every time we use it, // Load the map's prototype's map to guarantee that every time we use it,
// we use the same Map. // we use the same Map.
base::Optional<HeapObjectRef> prototype = map.prototype(); base::Optional<HeapObjectRef> prototype = map.prototype();
...@@ -1129,8 +1120,7 @@ PropertyAccessInfo AccessInfoFactory::LookupTransition( ...@@ -1129,8 +1120,7 @@ PropertyAccessInfo AccessInfoFactory::LookupTransition(
PropertyAttributes attrs) const { PropertyAttributes attrs) const {
// Check if the {map} has a data transition with the given {name}. // Check if the {map} has a data transition with the given {name}.
Map transition = Map transition =
TransitionsAccessor(isolate(), map.object(), TransitionsAccessor(isolate(), map.object(), true)
broker()->is_concurrent_inlining())
.SearchTransition(*name.object(), PropertyKind::kData, attrs); .SearchTransition(*name.object(), PropertyKind::kData, attrs);
if (transition.is_null()) return Invalid(); if (transition.is_null()) return Invalid();
...@@ -1202,11 +1192,6 @@ PropertyAccessInfo AccessInfoFactory::LookupTransition( ...@@ -1202,11 +1192,6 @@ PropertyAccessInfo AccessInfoFactory::LookupTransition(
unrecorded_dependencies.push_back( unrecorded_dependencies.push_back(
dependencies()->TransitionDependencyOffTheRecord(transition_map)); dependencies()->TransitionDependencyOffTheRecord(transition_map));
if (!broker()->is_concurrent_inlining()) {
transition_map.SerializeBackPointer(
NotConcurrentInliningTag{broker()}); // For BuildPropertyStore.
}
// Transitioning stores *may* store to const fields. The resulting // Transitioning stores *may* store to const fields. The resulting
// DataConstant access infos can be distinguished from later, i.e. redundant, // DataConstant access infos can be distinguished from later, i.e. redundant,
// stores to the same constant field by the presence of a transition map. // stores to the same constant field by the presence of a transition map.
......
...@@ -1112,9 +1112,6 @@ void CompilationDependencies::DependOnElementsKind( ...@@ -1112,9 +1112,6 @@ void CompilationDependencies::DependOnElementsKind(
void CompilationDependencies::DependOnOwnConstantElement( void CompilationDependencies::DependOnOwnConstantElement(
const JSObjectRef& holder, uint32_t index, const ObjectRef& element) { const JSObjectRef& holder, uint32_t index, const ObjectRef& element) {
// Only valid if the holder can use direct reads, since validation uses
// GetOwnConstantElementFromHeap.
DCHECK(holder.should_access_heap() || broker_->is_concurrent_inlining());
RecordDependency( RecordDependency(
zone_->New<OwnConstantElementDependency>(holder, index, element)); zone_->New<OwnConstantElementDependency>(holder, index, element));
} }
...@@ -1286,7 +1283,6 @@ void CompilationDependencies::DependOnElementsKinds( ...@@ -1286,7 +1283,6 @@ void CompilationDependencies::DependOnElementsKinds(
void CompilationDependencies::DependOnConsistentJSFunctionView( void CompilationDependencies::DependOnConsistentJSFunctionView(
const JSFunctionRef& function) { const JSFunctionRef& function) {
DCHECK(broker_->is_concurrent_inlining());
RecordDependency(zone_->New<ConsistentJSFunctionViewDependency>(function)); RecordDependency(zone_->New<ConsistentJSFunctionViewDependency>(function));
} }
......
This diff is collapsed.
...@@ -59,13 +59,6 @@ inline bool IsAnyStore(AccessMode mode) { ...@@ -59,13 +59,6 @@ inline bool IsAnyStore(AccessMode mode) {
return mode == AccessMode::kStore || mode == AccessMode::kStoreInLiteral; return mode == AccessMode::kStore || mode == AccessMode::kStoreInLiteral;
} }
// Clarifies in function signatures that a method may only be called when
// concurrent inlining is disabled.
class NotConcurrentInliningTag final {
public:
explicit NotConcurrentInliningTag(JSHeapBroker* broker);
};
enum class OddballType : uint8_t { enum class OddballType : uint8_t {
kNone, // Not an Oddball. kNone, // Not an Oddball.
kBoolean, // True or False. kBoolean, // True or False.
...@@ -424,13 +417,9 @@ class JSObjectRef : public JSReceiverRef { ...@@ -424,13 +417,9 @@ class JSObjectRef : public JSReceiverRef {
// relaxed read. This is to ease the transition to unserialized (or // relaxed read. This is to ease the transition to unserialized (or
// background-serialized) elements. // background-serialized) elements.
base::Optional<FixedArrayBaseRef> elements(RelaxedLoadTag) const; base::Optional<FixedArrayBaseRef> elements(RelaxedLoadTag) const;
void SerializeElements(NotConcurrentInliningTag tag);
bool IsElementsTenured(const FixedArrayBaseRef& elements); bool IsElementsTenured(const FixedArrayBaseRef& elements);
void SerializeObjectCreateMap(NotConcurrentInliningTag tag);
base::Optional<MapRef> GetObjectCreateMap() const; base::Optional<MapRef> GetObjectCreateMap() const;
void SerializeAsBoilerplateRecursive(NotConcurrentInliningTag tag);
}; };
class JSDataViewRef : public JSObjectRef { class JSDataViewRef : public JSObjectRef {
...@@ -489,8 +478,6 @@ class RegExpBoilerplateDescriptionRef : public HeapObjectRef { ...@@ -489,8 +478,6 @@ class RegExpBoilerplateDescriptionRef : public HeapObjectRef {
Handle<RegExpBoilerplateDescription> object() const; Handle<RegExpBoilerplateDescription> object() const;
void Serialize(NotConcurrentInliningTag tag);
FixedArrayRef data() const; FixedArrayRef data() const;
StringRef source() const; StringRef source() const;
int flags() const; int flags() const;
...@@ -577,8 +564,6 @@ class NativeContextRef : public ContextRef { ...@@ -577,8 +564,6 @@ class NativeContextRef : public ContextRef {
Handle<NativeContext> object() const; Handle<NativeContext> object() const;
void Serialize(NotConcurrentInliningTag tag);
#define DECL_ACCESSOR(type, name) type##Ref name() const; #define DECL_ACCESSOR(type, name) type##Ref name() const;
BROKER_NATIVE_CONTEXT_FIELDS(DECL_ACCESSOR) BROKER_NATIVE_CONTEXT_FIELDS(DECL_ACCESSOR)
#undef DECL_ACCESSOR #undef DECL_ACCESSOR
...@@ -662,8 +647,6 @@ class AllocationSiteRef : public HeapObjectRef { ...@@ -662,8 +647,6 @@ class AllocationSiteRef : public HeapObjectRef {
AllocationType GetAllocationType() const; AllocationType GetAllocationType() const;
ObjectRef nested_site() const; ObjectRef nested_site() const;
void SerializeRecursive(NotConcurrentInliningTag tag);
base::Optional<JSObjectRef> boilerplate() const; base::Optional<JSObjectRef> boilerplate() const;
ElementsKind GetElementsKind() const; ElementsKind GetElementsKind() const;
bool CanInlineCall() const; bool CanInlineCall() const;
...@@ -725,17 +708,10 @@ class V8_EXPORT_PRIVATE MapRef : public HeapObjectRef { ...@@ -725,17 +708,10 @@ class V8_EXPORT_PRIVATE MapRef : public HeapObjectRef {
INSTANCE_TYPE_CHECKERS(DEF_TESTER) INSTANCE_TYPE_CHECKERS(DEF_TESTER)
#undef DEF_TESTER #undef DEF_TESTER
void SerializeBackPointer(NotConcurrentInliningTag tag);
HeapObjectRef GetBackPointer() const; HeapObjectRef GetBackPointer() const;
void SerializePrototype(NotConcurrentInliningTag tag);
// TODO(neis): We should be able to remove TrySerializePrototype once
// concurrent-inlining is always on. Then we can also change the return type
// of prototype() back to HeapObjectRef.
bool TrySerializePrototype(NotConcurrentInliningTag tag);
base::Optional<HeapObjectRef> prototype() const; base::Optional<HeapObjectRef> prototype() const;
void SerializeForElementStore(NotConcurrentInliningTag tag);
bool HasOnlyStablePrototypesWithFastElements( bool HasOnlyStablePrototypesWithFastElements(
ZoneVector<MapRef>* prototype_maps); ZoneVector<MapRef>* prototype_maps);
......
...@@ -43,8 +43,7 @@ void JSHeapBroker::IncrementTracingIndentation() { ++trace_indentation_; } ...@@ -43,8 +43,7 @@ void JSHeapBroker::IncrementTracingIndentation() { ++trace_indentation_; }
void JSHeapBroker::DecrementTracingIndentation() { --trace_indentation_; } void JSHeapBroker::DecrementTracingIndentation() { --trace_indentation_; }
JSHeapBroker::JSHeapBroker(Isolate* isolate, Zone* broker_zone, JSHeapBroker::JSHeapBroker(Isolate* isolate, Zone* broker_zone,
bool tracing_enabled, bool is_concurrent_inlining, bool tracing_enabled, CodeKind code_kind)
CodeKind code_kind)
: isolate_(isolate), : isolate_(isolate),
#if V8_COMPRESS_POINTERS #if V8_COMPRESS_POINTERS
cage_base_(isolate), cage_base_(isolate),
...@@ -55,7 +54,6 @@ JSHeapBroker::JSHeapBroker(Isolate* isolate, Zone* broker_zone, ...@@ -55,7 +54,6 @@ JSHeapBroker::JSHeapBroker(Isolate* isolate, Zone* broker_zone,
root_index_map_(isolate), root_index_map_(isolate),
array_and_object_prototypes_(zone()), array_and_object_prototypes_(zone()),
tracing_enabled_(tracing_enabled), tracing_enabled_(tracing_enabled),
is_concurrent_inlining_(is_concurrent_inlining),
code_kind_(code_kind), code_kind_(code_kind),
feedback_(zone()), feedback_(zone()),
property_access_infos_(zone()), property_access_infos_(zone()),
...@@ -710,9 +708,6 @@ ProcessedFeedback const& JSHeapBroker::ReadFeedbackForArrayOrObjectLiteral( ...@@ -710,9 +708,6 @@ ProcessedFeedback const& JSHeapBroker::ReadFeedbackForArrayOrObjectLiteral(
AllocationSiteRef site = AllocationSiteRef site =
MakeRefAssumeMemoryFence(this, AllocationSite::cast(object)); MakeRefAssumeMemoryFence(this, AllocationSite::cast(object));
if (!is_concurrent_inlining() && site.PointsToLiteral()) {
site.SerializeRecursive(NotConcurrentInliningTag{this});
}
return *zone()->New<LiteralFeedback>(site, nexus.kind()); return *zone()->New<LiteralFeedback>(site, nexus.kind());
} }
...@@ -728,9 +723,6 @@ ProcessedFeedback const& JSHeapBroker::ReadFeedbackForRegExpLiteral( ...@@ -728,9 +723,6 @@ ProcessedFeedback const& JSHeapBroker::ReadFeedbackForRegExpLiteral(
RegExpBoilerplateDescriptionRef boilerplate = MakeRefAssumeMemoryFence( RegExpBoilerplateDescriptionRef boilerplate = MakeRefAssumeMemoryFence(
this, RegExpBoilerplateDescription::cast(object)); this, RegExpBoilerplateDescription::cast(object));
if (!is_concurrent_inlining()) {
boilerplate.Serialize(NotConcurrentInliningTag{this});
}
return *zone()->New<RegExpLiteralFeedback>(boilerplate, nexus.kind()); return *zone()->New<RegExpLiteralFeedback>(boilerplate, nexus.kind());
} }
...@@ -971,12 +963,10 @@ PropertyAccessInfo JSHeapBroker::GetPropertyAccessInfo( ...@@ -971,12 +963,10 @@ PropertyAccessInfo JSHeapBroker::GetPropertyAccessInfo(
AccessInfoFactory factory(this, dependencies, zone()); AccessInfoFactory factory(this, dependencies, zone());
PropertyAccessInfo access_info = PropertyAccessInfo access_info =
factory.ComputePropertyAccessInfo(map, name, access_mode); factory.ComputePropertyAccessInfo(map, name, access_mode);
if (is_concurrent_inlining_) { TRACE(this, "Storing PropertyAccessInfo for "
TRACE(this, "Storing PropertyAccessInfo for " << access_mode << " of property " << name << " on map "
<< access_mode << " of property " << name << " on map " << map);
<< map); property_access_infos_.insert({target, access_info});
property_access_infos_.insert({target, access_info});
}
return access_info; return access_info;
} }
...@@ -989,16 +979,16 @@ MinimorphicLoadPropertyAccessInfo JSHeapBroker::GetPropertyAccessInfo( ...@@ -989,16 +979,16 @@ MinimorphicLoadPropertyAccessInfo JSHeapBroker::GetPropertyAccessInfo(
AccessInfoFactory factory(this, nullptr, zone()); AccessInfoFactory factory(this, nullptr, zone());
MinimorphicLoadPropertyAccessInfo access_info = MinimorphicLoadPropertyAccessInfo access_info =
factory.ComputePropertyAccessInfo(feedback); factory.ComputePropertyAccessInfo(feedback);
if (is_concurrent_inlining_) {
// We can assume a memory fence on {source.vector} because in production, // We can assume a memory fence on {source.vector} because in production,
// the vector has already passed the gc predicate. Unit tests create // the vector has already passed the gc predicate. Unit tests create
// FeedbackSource objects directly from handles, but they run on // FeedbackSource objects directly from handles, but they run on
// the main thread. // the main thread.
TRACE(this, "Storing MinimorphicLoadPropertyAccessInfo for " TRACE(this, "Storing MinimorphicLoadPropertyAccessInfo for "
<< source.index() << " " << source.index() << " "
<< MakeRefAssumeMemoryFence<Object>(this, source.vector)); << MakeRefAssumeMemoryFence<Object>(this, source.vector));
minimorphic_property_access_infos_.insert({source, access_info}); minimorphic_property_access_infos_.insert({source, access_info});
}
return access_info; return access_info;
} }
......
...@@ -94,12 +94,12 @@ DEFINE_OPERATORS_FOR_FLAGS(GetOrCreateDataFlags) ...@@ -94,12 +94,12 @@ DEFINE_OPERATORS_FOR_FLAGS(GetOrCreateDataFlags)
class V8_EXPORT_PRIVATE JSHeapBroker { class V8_EXPORT_PRIVATE JSHeapBroker {
public: public:
JSHeapBroker(Isolate* isolate, Zone* broker_zone, bool tracing_enabled, JSHeapBroker(Isolate* isolate, Zone* broker_zone, bool tracing_enabled,
bool is_concurrent_inlining, CodeKind code_kind); CodeKind code_kind);
// For use only in tests, sets default values for some arguments. Avoids // For use only in tests, sets default values for some arguments. Avoids
// churn when new flags are added. // churn when new flags are added.
JSHeapBroker(Isolate* isolate, Zone* broker_zone) JSHeapBroker(Isolate* isolate, Zone* broker_zone)
: JSHeapBroker(isolate, broker_zone, FLAG_trace_heap_broker, false, : JSHeapBroker(isolate, broker_zone, FLAG_trace_heap_broker,
CodeKind::TURBOFAN) {} CodeKind::TURBOFAN) {}
~JSHeapBroker(); ~JSHeapBroker();
...@@ -127,7 +127,6 @@ class V8_EXPORT_PRIVATE JSHeapBroker { ...@@ -127,7 +127,6 @@ class V8_EXPORT_PRIVATE JSHeapBroker {
Zone* zone() const { return zone_; } Zone* zone() const { return zone_; }
bool tracing_enabled() const { return tracing_enabled_; } bool tracing_enabled() const { return tracing_enabled_; }
bool is_concurrent_inlining() const { return is_concurrent_inlining_; }
bool is_turboprop() const { return code_kind_ == CodeKind::TURBOPROP; } bool is_turboprop() const { return code_kind_ == CodeKind::TURBOPROP; }
NexusConfig feedback_nexus_config() const { NexusConfig feedback_nexus_config() const {
...@@ -436,7 +435,6 @@ class V8_EXPORT_PRIVATE JSHeapBroker { ...@@ -436,7 +435,6 @@ class V8_EXPORT_PRIVATE JSHeapBroker {
array_and_object_prototypes_; array_and_object_prototypes_;
BrokerMode mode_ = kDisabled; BrokerMode mode_ = kDisabled;
bool const tracing_enabled_; bool const tracing_enabled_;
bool const is_concurrent_inlining_;
CodeKind const code_kind_; CodeKind const code_kind_;
std::unique_ptr<PersistentHandles> ph_; std::unique_ptr<PersistentHandles> ph_;
LocalIsolate* local_isolate_ = nullptr; LocalIsolate* local_isolate_ = nullptr;
......
// Copyright 2018 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "src/compiler/js-heap-copy-reducer.h"
#include "src/compiler/common-operator.h"
#include "src/compiler/js-heap-broker.h"
#include "src/compiler/js-operator.h"
#include "src/compiler/node-properties.h"
#include "src/compiler/simplified-operator.h"
#include "src/heap/factory-inl.h"
#include "src/objects/map.h"
#include "src/objects/scope-info.h"
#include "src/objects/template-objects.h"
namespace v8 {
namespace internal {
namespace compiler {
// In the functions below, we call the ObjectRef (or subclass) constructor in
// order to trigger serialization if not yet done.
JSHeapCopyReducer::JSHeapCopyReducer(JSHeapBroker* broker) : broker_(broker) {}
JSHeapBroker* JSHeapCopyReducer::broker() { return broker_; }
Reduction JSHeapCopyReducer::Reduce(Node* node) {
switch (node->opcode()) {
case IrOpcode::kHeapConstant: {
ObjectRef object = MakeRef(broker(), HeapConstantOf(node->op()));
if (object.IsJSObject()) {
object.AsJSObject().SerializeObjectCreateMap(
NotConcurrentInliningTag{broker()});
}
break;
}
case IrOpcode::kJSCreateArray: {
CreateArrayParametersOf(node->op()).site(broker());
break;
}
case IrOpcode::kJSCreateArguments: {
Node* const frame_state = NodeProperties::GetFrameStateInput(node);
FrameStateInfo state_info = FrameStateInfoOf(frame_state->op());
MakeRef(broker(), state_info.shared_info().ToHandleChecked());
break;
}
case IrOpcode::kJSCreateBlockContext: {
USE(ScopeInfoOf(broker(), node->op()));
break;
}
case IrOpcode::kJSCreateBoundFunction: {
CreateBoundFunctionParameters const& p =
CreateBoundFunctionParametersOf(node->op());
p.map(broker());
break;
}
case IrOpcode::kJSCreateCatchContext: {
USE(ScopeInfoOf(broker(), node->op()));
break;
}
case IrOpcode::kJSCreateClosure: {
CreateClosureParameters const& p = CreateClosureParametersOf(node->op());
p.shared_info(broker());
p.code(broker());
break;
}
case IrOpcode::kJSCreateEmptyLiteralArray: {
FeedbackParameter const& p = FeedbackParameterOf(node->op());
if (p.feedback().IsValid()) {
broker()->GetFeedbackForArrayOrObjectLiteral(p.feedback());
}
break;
}
/* Unary ops. */
case IrOpcode::kJSBitwiseNot:
case IrOpcode::kJSDecrement:
case IrOpcode::kJSIncrement:
case IrOpcode::kJSNegate: {
FeedbackParameter const& p = FeedbackParameterOf(node->op());
if (p.feedback().IsValid()) {
// Unary ops are treated as binary ops with respect to feedback.
broker()->GetFeedbackForBinaryOperation(p.feedback());
}
break;
}
/* Binary ops. */
case IrOpcode::kJSAdd:
case IrOpcode::kJSSubtract:
case IrOpcode::kJSMultiply:
case IrOpcode::kJSDivide:
case IrOpcode::kJSModulus:
case IrOpcode::kJSExponentiate:
case IrOpcode::kJSBitwiseOr:
case IrOpcode::kJSBitwiseXor:
case IrOpcode::kJSBitwiseAnd:
case IrOpcode::kJSShiftLeft:
case IrOpcode::kJSShiftRight:
case IrOpcode::kJSShiftRightLogical: {
FeedbackParameter const& p = FeedbackParameterOf(node->op());
if (p.feedback().IsValid()) {
broker()->GetFeedbackForBinaryOperation(p.feedback());
}
break;
}
/* Compare ops. */
case IrOpcode::kJSEqual:
case IrOpcode::kJSGreaterThan:
case IrOpcode::kJSGreaterThanOrEqual:
case IrOpcode::kJSLessThan:
case IrOpcode::kJSLessThanOrEqual:
case IrOpcode::kJSStrictEqual: {
FeedbackParameter const& p = FeedbackParameterOf(node->op());
if (p.feedback().IsValid()) {
broker()->GetFeedbackForCompareOperation(p.feedback());
}
break;
}
case IrOpcode::kJSCreateFunctionContext: {
CreateFunctionContextParameters const& p =
CreateFunctionContextParametersOf(node->op());
p.scope_info(broker());
break;
}
case IrOpcode::kJSCreateLiteralArray:
case IrOpcode::kJSCreateLiteralObject: {
CreateLiteralParameters const& p = CreateLiteralParametersOf(node->op());
if (p.feedback().IsValid()) {
broker()->GetFeedbackForArrayOrObjectLiteral(p.feedback());
}
break;
}
case IrOpcode::kJSCreateLiteralRegExp: {
CreateLiteralParameters const& p = CreateLiteralParametersOf(node->op());
if (p.feedback().IsValid()) {
broker()->GetFeedbackForRegExpLiteral(p.feedback());
}
break;
}
case IrOpcode::kJSGetTemplateObject: {
GetTemplateObjectParameters const& p =
GetTemplateObjectParametersOf(node->op());
p.shared(broker());
p.description(broker());
broker()->GetFeedbackForTemplateObject(p.feedback());
break;
}
case IrOpcode::kJSCreateWithContext: {
USE(ScopeInfoOf(broker(), node->op()));
break;
}
case IrOpcode::kJSLoadNamed: {
NamedAccess const& p = NamedAccessOf(node->op());
NameRef name = p.name(broker());
if (p.feedback().IsValid()) {
broker()->GetFeedbackForPropertyAccess(p.feedback(), AccessMode::kLoad,
name);
}
break;
}
case IrOpcode::kJSLoadNamedFromSuper: {
NamedAccess const& p = NamedAccessOf(node->op());
NameRef name = p.name(broker());
if (p.feedback().IsValid()) {
broker()->GetFeedbackForPropertyAccess(p.feedback(), AccessMode::kLoad,
name);
}
break;
}
case IrOpcode::kJSStoreNamed: {
NamedAccess const& p = NamedAccessOf(node->op());
p.name(broker());
break;
}
case IrOpcode::kStoreField:
case IrOpcode::kLoadField: {
FieldAccess access = FieldAccessOf(node->op());
Handle<Map> map_handle;
if (access.map.ToHandle(&map_handle)) {
MakeRef(broker(), map_handle);
}
Handle<Name> name_handle;
if (access.name.ToHandle(&name_handle)) {
MakeRef(broker(), name_handle);
}
break;
}
case IrOpcode::kMapGuard: {
ZoneHandleSet<Map> const& maps = MapGuardMapsOf(node->op());
for (Handle<Map> map : maps) {
MakeRef(broker(), map);
}
break;
}
case IrOpcode::kCheckMaps: {
ZoneHandleSet<Map> const& maps = CheckMapsParametersOf(node->op()).maps();
for (Handle<Map> map : maps) {
MakeRef(broker(), map);
}
break;
}
case IrOpcode::kCompareMaps: {
ZoneHandleSet<Map> const& maps = CompareMapsParametersOf(node->op());
for (Handle<Map> map : maps) {
MakeRef(broker(), map);
}
break;
}
case IrOpcode::kJSLoadProperty: {
PropertyAccess const& p = PropertyAccessOf(node->op());
AccessMode access_mode = AccessMode::kLoad;
if (p.feedback().IsValid()) {
broker()->GetFeedbackForPropertyAccess(p.feedback(), access_mode,
base::nullopt);
}
break;
}
default:
break;
}
return NoChange();
}
} // namespace compiler
} // namespace internal
} // namespace v8
// Copyright 2018 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef V8_COMPILER_JS_HEAP_COPY_REDUCER_H_
#define V8_COMPILER_JS_HEAP_COPY_REDUCER_H_
#include "src/compiler/graph-reducer.h"
namespace v8 {
namespace internal {
namespace compiler {
class JSHeapBroker;
// The heap copy reducer makes sure that the relevant heap data referenced
// by handles embedded in the graph is copied to the heap broker.
// TODO(jarin) This is just a temporary solution until the graph uses only
// ObjetRef-derived reference to refer to the heap data.
class V8_EXPORT_PRIVATE JSHeapCopyReducer : public Reducer {
public:
explicit JSHeapCopyReducer(JSHeapBroker* broker);
const char* reducer_name() const override { return "JSHeapCopyReducer"; }
Reduction Reduce(Node* node) override;
private:
JSHeapBroker* broker();
JSHeapBroker* broker_;
};
} // namespace compiler
} // namespace internal
} // namespace v8
#endif // V8_COMPILER_JS_HEAP_COPY_REDUCER_H_
...@@ -533,24 +533,18 @@ Reduction JSInliner::ReduceJSCall(Node* node) { ...@@ -533,24 +533,18 @@ Reduction JSInliner::ReduceJSCall(Node* node) {
// always hold true. // always hold true.
CHECK(shared_info->is_compiled()); CHECK(shared_info->is_compiled());
if (info_->source_positions()) { if (info_->source_positions() &&
if (broker()->is_concurrent_inlining()) { !shared_info->object()->AreSourcePositionsAvailable(
if (!shared_info->object()->AreSourcePositionsAvailable( broker()->local_isolate_or_isolate())) {
broker()->local_isolate_or_isolate())) { // This case is expected to be very rare, since we generate source
// This case is expected to be very rare, since we generate source // positions for all functions when debugging or profiling are turned
// positions for all functions when debugging or profiling are turned // on (see Isolate::NeedsDetailedOptimizedCodeLineInfo). Source
// on (see Isolate::NeedsDetailedOptimizedCodeLineInfo). Source // positions should only be missing here if there is a race between 1)
// positions should only be missing here if there is a race between 1) // enabling/disabling the debugger/profiler, and 2) this compile job.
// enabling/disabling the debugger/profiler, and 2) this compile job. // In that case, we simply don't inline.
// In that case, we simply don't inline. TRACE("Not inlining " << *shared_info << " into " << outer_shared_info
TRACE("Not inlining " << *shared_info << " into " << outer_shared_info << " because source positions are missing.");
<< " because source positions are missing."); return NoChange();
return NoChange();
}
} else {
SharedFunctionInfo::EnsureSourcePositionsAvailable(isolate(),
shared_info->object());
}
} }
// Determine the target's feedback vector and its context. // Determine the target's feedback vector and its context.
......
...@@ -49,7 +49,6 @@ ...@@ -49,7 +49,6 @@
#include "src/compiler/js-create-lowering.h" #include "src/compiler/js-create-lowering.h"
#include "src/compiler/js-generic-lowering.h" #include "src/compiler/js-generic-lowering.h"
#include "src/compiler/js-heap-broker.h" #include "src/compiler/js-heap-broker.h"
#include "src/compiler/js-heap-copy-reducer.h"
#include "src/compiler/js-inlining-heuristic.h" #include "src/compiler/js-inlining-heuristic.h"
#include "src/compiler/js-intrinsic-lowering.h" #include "src/compiler/js-intrinsic-lowering.h"
#include "src/compiler/js-native-context-specialization.h" #include "src/compiler/js-native-context-specialization.h"
...@@ -157,9 +156,9 @@ class PipelineData { ...@@ -157,9 +156,9 @@ class PipelineData {
instruction_zone_(instruction_zone_scope_.zone()), instruction_zone_(instruction_zone_scope_.zone()),
codegen_zone_scope_(zone_stats_, kCodegenZoneName), codegen_zone_scope_(zone_stats_, kCodegenZoneName),
codegen_zone_(codegen_zone_scope_.zone()), codegen_zone_(codegen_zone_scope_.zone()),
broker_(new JSHeapBroker( broker_(new JSHeapBroker(isolate_, info_->zone(),
isolate_, info_->zone(), info_->trace_heap_broker(), info_->trace_heap_broker(),
info_->concurrent_inlining(), info->code_kind())), info->code_kind())),
register_allocation_zone_scope_(zone_stats_, register_allocation_zone_scope_(zone_stats_,
kRegisterAllocationZoneName), kRegisterAllocationZoneName),
register_allocation_zone_(register_allocation_zone_scope_.zone()), register_allocation_zone_(register_allocation_zone_scope_.zone()),
...@@ -1200,17 +1199,8 @@ PipelineCompilationJob::Status PipelineCompilationJob::PrepareJobImpl( ...@@ -1200,17 +1199,8 @@ PipelineCompilationJob::Status PipelineCompilationJob::PrepareJobImpl(
pipeline_.InitializeHeapBroker(); pipeline_.InitializeHeapBroker();
if (!data_.broker()->is_concurrent_inlining()) { // Serialization may have allocated.
if (!pipeline_.CreateGraph()) { isolate->heap()->PublishPendingAllocations();
CHECK(!isolate->has_pending_exception());
return AbortOptimization(BailoutReason::kGraphBuildingFailed);
}
}
if (compilation_info()->concurrent_inlining()) {
// Serialization may have allocated.
isolate->heap()->PublishPendingAllocations();
}
return SUCCEEDED; return SUCCEEDED;
} }
...@@ -1223,10 +1213,8 @@ PipelineCompilationJob::Status PipelineCompilationJob::ExecuteJobImpl( ...@@ -1223,10 +1213,8 @@ PipelineCompilationJob::Status PipelineCompilationJob::ExecuteJobImpl(
LocalIsolateScope local_isolate_scope(data_.broker(), data_.info(), LocalIsolateScope local_isolate_scope(data_.broker(), data_.info(),
local_isolate); local_isolate);
if (data_.broker()->is_concurrent_inlining()) { if (!pipeline_.CreateGraph()) {
if (!pipeline_.CreateGraph()) { return AbortOptimization(BailoutReason::kGraphBuildingFailed);
return AbortOptimization(BailoutReason::kGraphBuildingFailed);
}
} }
// We selectively Unpark inside OptimizeGraph*. // We selectively Unpark inside OptimizeGraph*.
...@@ -1514,24 +1502,6 @@ struct HeapBrokerInitializationPhase { ...@@ -1514,24 +1502,6 @@ struct HeapBrokerInitializationPhase {
} }
}; };
struct CopyMetadataForConcurrentCompilePhase {
DECL_MAIN_THREAD_PIPELINE_PHASE_CONSTANTS(SerializeMetadata)
void Run(PipelineData* data, Zone* temp_zone) {
GraphReducer graph_reducer(
temp_zone, data->graph(), &data->info()->tick_counter(), data->broker(),
data->jsgraph()->Dead(), data->observe_node_manager());
JSHeapCopyReducer heap_copy_reducer(data->broker());
AddReducer(data, &graph_reducer, &heap_copy_reducer);
graph_reducer.ReduceGraph();
// Some nodes that are no longer in the graph might still be in the cache.
NodeVector cached_nodes(temp_zone);
data->jsgraph()->GetCachedNodes(&cached_nodes);
for (Node* const node : cached_nodes) graph_reducer.ReduceNode(node);
}
};
struct TypedLoweringPhase { struct TypedLoweringPhase {
DECL_PIPELINE_PHASE_CONSTANTS(TypedLowering) DECL_PIPELINE_PHASE_CONSTANTS(TypedLowering)
...@@ -2693,10 +2663,8 @@ void PipelineImpl::InitializeHeapBroker() { ...@@ -2693,10 +2663,8 @@ void PipelineImpl::InitializeHeapBroker() {
} }
data->broker()->SetTargetNativeContextRef(data->native_context()); data->broker()->SetTargetNativeContextRef(data->native_context());
if (data->broker()->is_concurrent_inlining()) { Run<HeapBrokerInitializationPhase>();
Run<HeapBrokerInitializationPhase>(); data->broker()->StopSerializing();
data->broker()->StopSerializing();
}
data->EndPhaseKind(); data->EndPhaseKind();
} }
...@@ -2728,15 +2696,6 @@ bool PipelineImpl::CreateGraph() { ...@@ -2728,15 +2696,6 @@ bool PipelineImpl::CreateGraph() {
} }
} }
// Run the type-sensitive lowerings and optimizations on the graph.
{
if (!data->broker()->is_concurrent_inlining()) {
Run<HeapBrokerInitializationPhase>();
Run<CopyMetadataForConcurrentCompilePhase>();
data->broker()->StopSerializing();
}
}
data->EndPhaseKind(); data->EndPhaseKind();
return true; return true;
...@@ -3391,20 +3350,12 @@ MaybeHandle<Code> Pipeline::GenerateCodeForTesting( ...@@ -3391,20 +3350,12 @@ MaybeHandle<Code> Pipeline::GenerateCodeForTesting(
CanonicalHandleScope canonical(isolate, info); CanonicalHandleScope canonical(isolate, info);
info->ReopenHandlesInNewHandleScope(isolate); info->ReopenHandlesInNewHandleScope(isolate);
pipeline.InitializeHeapBroker(); pipeline.InitializeHeapBroker();
// Emulating the proper pipeline, we call CreateGraph on different places
// (i.e before or after creating a LocalIsolateScope) depending on
// is_concurrent_inlining.
if (!data.broker()->is_concurrent_inlining()) {
if (!pipeline.CreateGraph()) return MaybeHandle<Code>();
}
} }
{ {
LocalIsolateScope local_isolate_scope(data.broker(), info, LocalIsolateScope local_isolate_scope(data.broker(), info,
isolate->main_thread_local_isolate()); isolate->main_thread_local_isolate());
if (data.broker()->is_concurrent_inlining()) { if (!pipeline.CreateGraph()) return MaybeHandle<Code>();
if (!pipeline.CreateGraph()) return MaybeHandle<Code>();
}
// We selectively Unpark inside OptimizeGraph. // We selectively Unpark inside OptimizeGraph.
if (!pipeline.OptimizeGraph(&linkage)) return MaybeHandle<Code>(); if (!pipeline.OptimizeGraph(&linkage)) return MaybeHandle<Code>();
......
...@@ -434,7 +434,6 @@ DEFINE_NEG_IMPLICATION(enable_third_party_heap, inline_new) ...@@ -434,7 +434,6 @@ DEFINE_NEG_IMPLICATION(enable_third_party_heap, inline_new)
DEFINE_NEG_IMPLICATION(enable_third_party_heap, allocation_site_pretenuring) DEFINE_NEG_IMPLICATION(enable_third_party_heap, allocation_site_pretenuring)
DEFINE_NEG_IMPLICATION(enable_third_party_heap, turbo_allocation_folding) DEFINE_NEG_IMPLICATION(enable_third_party_heap, turbo_allocation_folding)
DEFINE_NEG_IMPLICATION(enable_third_party_heap, concurrent_recompilation) DEFINE_NEG_IMPLICATION(enable_third_party_heap, concurrent_recompilation)
DEFINE_NEG_IMPLICATION(enable_third_party_heap, concurrent_inlining)
DEFINE_NEG_IMPLICATION(enable_third_party_heap, script_streaming) DEFINE_NEG_IMPLICATION(enable_third_party_heap, script_streaming)
DEFINE_NEG_IMPLICATION(enable_third_party_heap, DEFINE_NEG_IMPLICATION(enable_third_party_heap,
parallel_compile_tasks_for_eager_toplevel) parallel_compile_tasks_for_eager_toplevel)
...@@ -520,7 +519,6 @@ DEFINE_WEAK_VALUE_IMPLICATION(future, write_protect_code_memory, false) ...@@ -520,7 +519,6 @@ DEFINE_WEAK_VALUE_IMPLICATION(future, write_protect_code_memory, false)
DEFINE_BOOL_READONLY(dict_property_const_tracking, DEFINE_BOOL_READONLY(dict_property_const_tracking,
V8_DICT_PROPERTY_CONST_TRACKING_BOOL, V8_DICT_PROPERTY_CONST_TRACKING_BOOL,
"Use const tracking on dictionary properties") "Use const tracking on dictionary properties")
DEFINE_NEG_IMPLICATION(dict_property_const_tracking, concurrent_inlining)
DEFINE_NEG_IMPLICATION(dict_property_const_tracking, turboprop) DEFINE_NEG_IMPLICATION(dict_property_const_tracking, turboprop)
// Flags for jitless // Flags for jitless
...@@ -548,7 +546,6 @@ DEFINE_BOOL(assert_types, false, ...@@ -548,7 +546,6 @@ DEFINE_BOOL(assert_types, false,
"generate runtime type assertions to test the typer") "generate runtime type assertions to test the typer")
// TODO(tebbi): Support allocating types from background thread. // TODO(tebbi): Support allocating types from background thread.
DEFINE_NEG_IMPLICATION(assert_types, concurrent_recompilation) DEFINE_NEG_IMPLICATION(assert_types, concurrent_recompilation)
DEFINE_NEG_IMPLICATION(assert_types, concurrent_inlining)
DEFINE_BOOL(trace_compilation_dependencies, false, "trace code dependencies") DEFINE_BOOL(trace_compilation_dependencies, false, "trace code dependencies")
// Depend on --trace-deopt-verbose for reporting dependency invalidations. // Depend on --trace-deopt-verbose for reporting dependency invalidations.
...@@ -754,12 +751,13 @@ DEFINE_INT(concurrent_recompilation_queue_length, 8, ...@@ -754,12 +751,13 @@ DEFINE_INT(concurrent_recompilation_queue_length, 8,
"the length of the concurrent compilation queue") "the length of the concurrent compilation queue")
DEFINE_INT(concurrent_recompilation_delay, 0, DEFINE_INT(concurrent_recompilation_delay, 0,
"artificial compilation delay in ms") "artificial compilation delay in ms")
DEFINE_BOOL(concurrent_inlining, true, // TODO(v8:12142): Remove this flag once all references (chromium feature flag,
"run optimizing compiler's inlining phase on a separate thread") // finch trials, field trial configs) are gone.
DEFINE_BOOL(concurrent_inlining, true, "deprecated, does nothing")
DEFINE_BOOL( DEFINE_BOOL(
stress_concurrent_inlining, false, stress_concurrent_inlining, false,
"create additional concurrent optimization jobs but throw away result") "create additional concurrent optimization jobs but throw away result")
DEFINE_IMPLICATION(stress_concurrent_inlining, concurrent_inlining) DEFINE_IMPLICATION(stress_concurrent_inlining, concurrent_recompilation)
DEFINE_NEG_IMPLICATION(stress_concurrent_inlining, lazy_feedback_allocation) DEFINE_NEG_IMPLICATION(stress_concurrent_inlining, lazy_feedback_allocation)
DEFINE_WEAK_VALUE_IMPLICATION(stress_concurrent_inlining, interrupt_budget, DEFINE_WEAK_VALUE_IMPLICATION(stress_concurrent_inlining, interrupt_budget,
15 * KB) 15 * KB)
......
...@@ -92,7 +92,6 @@ class BackgroundCompilationThread final : public v8::base::Thread { ...@@ -92,7 +92,6 @@ class BackgroundCompilationThread final : public v8::base::Thread {
TEST(TestConcurrentSharedFunctionInfo) { TEST(TestConcurrentSharedFunctionInfo) {
FlagScope<bool> allow_natives_syntax(&i::FLAG_allow_natives_syntax, true); FlagScope<bool> allow_natives_syntax(&i::FLAG_allow_natives_syntax, true);
FlagScope<bool> concurrent_inlining(&i::FLAG_concurrent_inlining, true);
HandleAndZoneScope scope; HandleAndZoneScope scope;
Isolate* isolate = scope.main_isolate(); Isolate* isolate = scope.main_isolate();
......
...@@ -6,7 +6,6 @@ ...@@ -6,7 +6,6 @@
#include "src/compiler/compilation-dependencies.h" #include "src/compiler/compilation-dependencies.h"
#include "src/compiler/js-graph.h" #include "src/compiler/js-graph.h"
#include "src/compiler/js-heap-broker.h" #include "src/compiler/js-heap-broker.h"
#include "src/compiler/js-heap-copy-reducer.h"
#include "src/compiler/js-typed-lowering.h" #include "src/compiler/js-typed-lowering.h"
#include "src/compiler/machine-operator.h" #include "src/compiler/machine-operator.h"
#include "src/compiler/node-properties.h" #include "src/compiler/node-properties.h"
...@@ -92,8 +91,6 @@ class JSTypedLoweringTester : public HandleAndZoneScope { ...@@ -92,8 +91,6 @@ class JSTypedLoweringTester : public HandleAndZoneScope {
} }
Node* reduce(Node* node) { Node* reduce(Node* node) {
JSHeapCopyReducer heap_copy_reducer(&js_heap_broker);
CHECK(!heap_copy_reducer.Reduce(node).Changed());
JSGraph jsgraph(main_isolate(), &graph, &common, &javascript, &simplified, JSGraph jsgraph(main_isolate(), &graph, &common, &javascript, &simplified,
&machine); &machine);
GraphReducer graph_reducer(main_zone(), &graph, &tick_counter, GraphReducer graph_reducer(main_zone(), &graph, &tick_counter,
......
// Copyright 2019 the V8 project authors. All rights reserved. // Copyright 2019 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
//
// Flags: --allow-natives-syntax --opt --noalways-opt --noturboprop
// Flags: --allow-natives-syntax --concurrent-inlining
// Flags: --opt --noalways-opt --noturboprop
class C {}; class C {};
const c = new C; const c = new C;
const getPrototypeOf = Object.getPrototypeOf; const getPrototypeOf = Object.getPrototypeOf;
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
// Flags: --interrupt-budget=1024 --concurrent-inlining // Flags: --interrupt-budget=1024
const v2 = {}; const v2 = {};
const v4 = {a:42}; const v4 = {a:42};
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
// Flags: --allow-natives-syntax --concurrent-inlining // Flags: --allow-natives-syntax
(function() { (function() {
var use_symbol = { var use_symbol = {
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
// Flags: --expose-gc --noincremental-marking --no-concurrent-inlining // Flags: --expose-gc --noincremental-marking --no-concurrent-recompilation
let cleanup_called = false; let cleanup_called = false;
function cleanup(holdings) { function cleanup(holdings) {
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
// Flags: --allow-natives-syntax --concurrent-inlining --no-use-ic --super-ic // Flags: --allow-natives-syntax --no-use-ic --super-ic
class A { class A {
bar() { } bar() { }
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
// //
// Flags: --allow-natives-syntax --concurrent-inlining // Flags: --allow-natives-syntax
function bar(error) { function bar(error) {
try { try {
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
// Flags: --allow-natives-syntax --concurrent-inlining // Flags: --allow-natives-syntax
function bar() { function bar() {
arr = new Array(4); arr = new Array(4);
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
// Flags: --allow-natives-syntax --expose-gc --opt --no-concurrent-inlining // Flags: --allow-natives-syntax --expose-gc --opt --no-concurrent-recompilation
// Flags: --no-stress-opt --no-always-opt --no-assert-types // Flags: --no-stress-opt --no-always-opt --no-assert-types
// This weak ref is for checking whether the closure-allocated object o got // This weak ref is for checking whether the closure-allocated object o got
......
...@@ -2,8 +2,7 @@ ...@@ -2,8 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
// Flags: --expose-gc --allow-natives-syntax // Flags: --expose-gc --allow-natives-syntax --function-context-specialization
// Flags: --concurrent-inlining --function-context-specialization
function main() { function main() {
var obj = {}; var obj = {};
......
...@@ -4,7 +4,6 @@ ...@@ -4,7 +4,6 @@
#include "test/unittests/compiler/graph-unittest.h" #include "test/unittests/compiler/graph-unittest.h"
#include "src/compiler/js-heap-copy-reducer.h"
#include "src/compiler/node-properties.h" #include "src/compiler/node-properties.h"
#include "src/heap/factory.h" #include "src/heap/factory.h"
#include "src/objects/objects-inl.h" // TODO(everyone): Make typer.h IWYU compliant. #include "src/objects/objects-inl.h" // TODO(everyone): Make typer.h IWYU compliant.
......
...@@ -8,7 +8,6 @@ ...@@ -8,7 +8,6 @@
#include "src/compiler/access-builder.h" #include "src/compiler/access-builder.h"
#include "src/compiler/compilation-dependencies.h" #include "src/compiler/compilation-dependencies.h"
#include "src/compiler/js-graph.h" #include "src/compiler/js-graph.h"
#include "src/compiler/js-heap-copy-reducer.h"
#include "src/compiler/js-operator.h" #include "src/compiler/js-operator.h"
#include "src/compiler/machine-operator.h" #include "src/compiler/machine-operator.h"
#include "src/compiler/node-properties.h" #include "src/compiler/node-properties.h"
...@@ -46,8 +45,6 @@ class JSTypedLoweringTest : public TypedGraphTest { ...@@ -46,8 +45,6 @@ class JSTypedLoweringTest : public TypedGraphTest {
protected: protected:
Reduction Reduce(Node* node) { Reduction Reduce(Node* node) {
JSHeapCopyReducer heap_copy_reducer(broker());
CHECK(!heap_copy_reducer.Reduce(node).Changed());
MachineOperatorBuilder machine(zone()); MachineOperatorBuilder machine(zone());
SimplifiedOperatorBuilder simplified(zone()); SimplifiedOperatorBuilder simplified(zone());
JSGraph jsgraph(isolate(), graph(), common(), javascript(), &simplified, JSGraph jsgraph(isolate(), graph(), common(), javascript(), &simplified,
......
...@@ -17,8 +17,6 @@ ALL_VARIANT_FLAGS = { ...@@ -17,8 +17,6 @@ ALL_VARIANT_FLAGS = {
"sparkplug": [["--sparkplug"]], "sparkplug": [["--sparkplug"]],
"always_sparkplug": [[ "--always-sparkplug", "--sparkplug"]], "always_sparkplug": [[ "--always-sparkplug", "--sparkplug"]],
"minor_mc": [["--minor-mc"]], "minor_mc": [["--minor-mc"]],
"no_concurrent_inlining": [["--no-concurrent-inlining",
"--no-stress-concurrent-inlining"]],
"no_lfa": [["--no-lazy-feedback-allocation"]], "no_lfa": [["--no-lazy-feedback-allocation"]],
# No optimization means disable all optimizations. OptimizeFunctionOnNextCall # No optimization means disable all optimizations. OptimizeFunctionOnNextCall
# would not force optimization too. It turns into a Nop. Please see # would not force optimization too. It turns into a Nop. Please see
...@@ -31,8 +29,7 @@ ALL_VARIANT_FLAGS = { ...@@ -31,8 +29,7 @@ ALL_VARIANT_FLAGS = {
"stress": [["--stress-opt", "--no-liftoff", "--stress-lazy-source-positions", "stress": [["--stress-opt", "--no-liftoff", "--stress-lazy-source-positions",
"--no-wasm-generic-wrapper"]], "--no-wasm-generic-wrapper"]],
"stress_concurrent_allocation": [["--stress-concurrent-allocation"]], "stress_concurrent_allocation": [["--stress-concurrent-allocation"]],
"stress_concurrent_inlining": [["--stress-concurrent-inlining", "stress_concurrent_inlining": [["--stress-concurrent-inlining"]],
"--concurrent-inlining"]],
"stress_js_bg_compile_wasm_code_gc": [["--stress-background-compile", "stress_js_bg_compile_wasm_code_gc": [["--stress-background-compile",
"--stress-wasm-code-gc"]], "--stress-wasm-code-gc"]],
"stress_incremental_marking": [["--stress-incremental-marking"]], "stress_incremental_marking": [["--stress-incremental-marking"]],
...@@ -62,7 +59,8 @@ INCOMPATIBLE_FLAGS_PER_VARIANT = { ...@@ -62,7 +59,8 @@ INCOMPATIBLE_FLAGS_PER_VARIANT = {
"stress_concurrent_allocation": ["--single-threaded-gc", "--predictable"], "stress_concurrent_allocation": ["--single-threaded-gc", "--predictable"],
"stress_concurrent_inlining": ["--single-threaded", "--predictable", "stress_concurrent_inlining": ["--single-threaded", "--predictable",
"--turboprop", "--lazy-feedback-allocation", "--turboprop", "--lazy-feedback-allocation",
"--assert-types"], "--assert-types",
"--no-concurrent-recompilation"],
"turboprop": ["--stress_concurrent_inlining"], "turboprop": ["--stress_concurrent_inlining"],
# The fast API tests initialize an embedder object that never needs to be # The fast API tests initialize an embedder object that never needs to be
# serialized to the snapshot, so we don't have a # serialized to the snapshot, so we don't have a
...@@ -82,7 +80,7 @@ INCOMPATIBLE_FLAGS_PER_VARIANT = { ...@@ -82,7 +80,7 @@ INCOMPATIBLE_FLAGS_PER_VARIANT = {
# There is a negative implication: --perf-prof disables # There is a negative implication: --perf-prof disables
# --wasm-write-protect-code-memory. # --wasm-write-protect-code-memory.
"wasm_write_protect_code": ["--perf-prof"], "wasm_write_protect_code": ["--perf-prof"],
"assert_types": ["--concurrent-recompilation", "--concurrent-inlining", "--stress_concurrent_inlining", "--no-assert-types"], "assert_types": ["--concurrent-recompilation", "--stress_concurrent_inlining", "--no-assert-types"],
} }
# Flags that lead to a contradiction under certain build variables. # Flags that lead to a contradiction under certain build variables.
...@@ -100,7 +98,6 @@ INCOMPATIBLE_FLAGS_PER_BUILD_VARIABLE = { ...@@ -100,7 +98,6 @@ INCOMPATIBLE_FLAGS_PER_BUILD_VARIABLE = {
"--stress-concurrent-allocation", "--stress-concurrent-allocation",
"--stress-concurrent-inlining"], "--stress-concurrent-inlining"],
"dict_property_const_tracking": [ "dict_property_const_tracking": [
"--concurrent-inlining",
"--turboprop", "--turboprop",
"--stress-concurrent-inlining"], "--stress-concurrent-inlining"],
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment