| Index: src/compiler/js-native-context-specialization.cc
|
| diff --git a/src/compiler/js-native-context-specialization.cc b/src/compiler/js-native-context-specialization.cc
|
| index fb8e53b034878cc5ec9d203f2832ad98ae3b9db8..a2fe6c182957661110134a04f28acd06f5df7fab 100644
|
| --- a/src/compiler/js-native-context-specialization.cc
|
| +++ b/src/compiler/js-native-context-specialization.cc
|
| @@ -573,6 +573,7 @@ Reduction JSNativeContextSpecialization::ReduceNamedAccess(
|
| Object* maybe_constructor = receiver_map->GetConstructor();
|
| // Detached global proxies have |null| as their constructor.
|
| if (maybe_constructor->IsJSFunction() &&
|
| + JSFunction::cast(maybe_constructor)->has_context() &&
|
| JSFunction::cast(maybe_constructor)->native_context() ==
|
| *native_context()) {
|
| return ReduceGlobalAccess(node, receiver, value, name, access_mode,
|
| @@ -799,17 +800,6 @@ Reduction JSNativeContextSpecialization::ReduceNamedAccessFromNexus(
|
| }
|
| }
|
|
|
| - // Check if the {nexus} reports type feedback for the IC.
|
| - if (nexus.IsUninitialized()) {
|
| - if ((flags() & kDeoptimizationEnabled) &&
|
| - (flags() & kBailoutOnUninitialized)) {
|
| - return ReduceSoftDeoptimize(
|
| - node,
|
| - DeoptimizeReason::kInsufficientTypeFeedbackForGenericNamedAccess);
|
| - }
|
| - return NoChange();
|
| - }
|
| -
|
| // Extract receiver maps from the IC using the {nexus}.
|
| MapHandleList receiver_maps;
|
| if (!ExtractReceiverMaps(receiver, effect, nexus, &receiver_maps)) {
|
| @@ -1194,17 +1184,6 @@ Reduction JSNativeContextSpecialization::ReduceKeyedAccess(
|
| }
|
| }
|
|
|
| - // Check if the {nexus} reports type feedback for the IC.
|
| - if (nexus.IsUninitialized()) {
|
| - if ((flags() & kDeoptimizationEnabled) &&
|
| - (flags() & kBailoutOnUninitialized)) {
|
| - return ReduceSoftDeoptimize(
|
| - node,
|
| - DeoptimizeReason::kInsufficientTypeFeedbackForGenericKeyedAccess);
|
| - }
|
| - return NoChange();
|
| - }
|
| -
|
| // Extract receiver maps from the {nexus}.
|
| MapHandleList receiver_maps;
|
| if (!ExtractReceiverMaps(receiver, effect, nexus, &receiver_maps)) {
|
| @@ -2250,7 +2229,10 @@ bool JSNativeContextSpecialization::ExtractReceiverMaps(
|
| }
|
| return true;
|
| }
|
| - return false;
|
| + // Check if the {nexus} actually reports feedback for the IC. We return
|
| + // true if the IC is still uninitialized, which translates to a SOFT
|
| + // deoptimization exit in the callers.
|
| + return nexus.IsUninitialized();
|
| }
|
|
|
| bool JSNativeContextSpecialization::InferReceiverMaps(
|
|
|