@@ -8222,6 +8222,18 @@ bool HOptimizedGraphBuilder::TryInlineBuiltinFunctionCall(Call* expr) {
82228222}
82238223
82248224
8225+ // static
8226+ bool HOptimizedGraphBuilder::CanInlineArrayResizeOperation (
8227+ Handle<Map> receiver_map) {
8228+ return !receiver_map.is_null () &&
8229+ receiver_map->instance_type () == JS_ARRAY_TYPE &&
8230+ IsFastElementsKind (receiver_map->elements_kind ()) &&
8231+ !receiver_map->is_dictionary_map () &&
8232+ !JSArray::IsReadOnlyLengthDescriptor (receiver_map) &&
8233+ !receiver_map->is_observed () && receiver_map->is_extensible ();
8234+ }
8235+
8236+
82258237bool HOptimizedGraphBuilder::TryInlineBuiltinMethodCall (
82268238 Call* expr, Handle<JSFunction> function, Handle<Map> receiver_map,
82278239 int args_count_no_receiver) {
@@ -8341,13 +8353,8 @@ bool HOptimizedGraphBuilder::TryInlineBuiltinMethodCall(
83418353 }
83428354 break ;
83438355 case kArrayPop : {
8344- if (receiver_map.is_null ()) return false ;
8345- if (receiver_map->instance_type () != JS_ARRAY_TYPE ) return false ;
8356+ if (!CanInlineArrayResizeOperation (receiver_map)) return false ;
83468357 ElementsKind elements_kind = receiver_map->elements_kind ();
8347- if (JSArray::IsReadOnlyLengthDescriptor (receiver_map)) return false ;
8348- if (!IsFastElementsKind (elements_kind)) return false ;
8349- if (receiver_map->is_observed ()) return false ;
8350- if (!receiver_map->is_extensible ()) return false ;
83518358
83528359 Drop (args_count_no_receiver);
83538360 HValue* result;
@@ -8404,13 +8411,8 @@ bool HOptimizedGraphBuilder::TryInlineBuiltinMethodCall(
84048411 return true ;
84058412 }
84068413 case kArrayPush : {
8407- if (receiver_map.is_null ()) return false ;
8408- if (receiver_map->instance_type () != JS_ARRAY_TYPE ) return false ;
8414+ if (!CanInlineArrayResizeOperation (receiver_map)) return false ;
84098415 ElementsKind elements_kind = receiver_map->elements_kind ();
8410- if (!IsFastElementsKind (elements_kind)) return false ;
8411- if (receiver_map->is_observed ()) return false ;
8412- if (JSArray::IsReadOnlyLengthDescriptor (receiver_map)) return false ;
8413- if (!receiver_map->is_extensible ()) return false ;
84148416
84158417 // If there may be elements accessors in the prototype chain, the fast
84168418 // inlined version can't be used.
@@ -8457,13 +8459,8 @@ bool HOptimizedGraphBuilder::TryInlineBuiltinMethodCall(
84578459 return true ;
84588460 }
84598461 case kArrayShift : {
8460- if (receiver_map.is_null ()) return false ;
8461- if (receiver_map->instance_type () != JS_ARRAY_TYPE ) return false ;
8462+ if (!CanInlineArrayResizeOperation (receiver_map)) return false ;
84628463 ElementsKind kind = receiver_map->elements_kind ();
8463- if (JSArray::IsReadOnlyLengthDescriptor (receiver_map)) return false ;
8464- if (!IsFastElementsKind (kind)) return false ;
8465- if (receiver_map->is_observed ()) return false ;
8466- if (!receiver_map->is_extensible ()) return false ;
84678464
84688465 // If there may be elements accessors in the prototype chain, the fast
84698466 // inlined version can't be used.
0 commit comments