Adding GetMoreGeneralElementsKind in elements-kind.h
BUG= Review URL: https://codereview.chromium.org/1307743011 Cr-Commit-Position: refs/heads/master@{#30614}
This commit is contained in:
parent
b2a47a0bc6
commit
00b85aabbf
@ -650,9 +650,7 @@ BUILTIN(ArrayConcat) {
|
||||
ElementsKind arg_kind = JSArray::cast(arg)->map()->elements_kind();
|
||||
has_double = has_double || IsFastDoubleElementsKind(arg_kind);
|
||||
is_holey = is_holey || IsFastHoleyElementsKind(arg_kind);
|
||||
if (IsMoreGeneralElementsKindTransition(elements_kind, arg_kind)) {
|
||||
elements_kind = arg_kind;
|
||||
}
|
||||
elements_kind = GetMoreGeneralElementsKind(elements_kind, arg_kind);
|
||||
}
|
||||
if (is_holey) elements_kind = GetHoleyElementsKind(elements_kind);
|
||||
}
|
||||
|
@ -211,6 +211,15 @@ bool IsMoreGeneralElementsKindTransition(ElementsKind from_kind,
|
||||
ElementsKind to_kind);
|
||||
|
||||
|
||||
inline ElementsKind GetMoreGeneralElementsKind(ElementsKind from_kind,
|
||||
ElementsKind to_kind) {
|
||||
if (IsMoreGeneralElementsKindTransition(from_kind, to_kind)) {
|
||||
return to_kind;
|
||||
}
|
||||
return from_kind;
|
||||
}
|
||||
|
||||
|
||||
inline bool IsTransitionableFastElementsKind(ElementsKind from_kind) {
|
||||
return IsFastElementsKind(from_kind) &&
|
||||
from_kind != TERMINAL_FAST_ELEMENTS_KIND;
|
||||
|
@ -275,11 +275,8 @@ bool IC::TryRemoveInvalidPrototypeDependentStub(Handle<Object> receiver,
|
||||
if (first_map == NULL) return false;
|
||||
Handle<Map> old_map(first_map);
|
||||
if (old_map->is_deprecated()) return true;
|
||||
if (IsMoreGeneralElementsKindTransition(old_map->elements_kind(),
|
||||
receiver_map()->elements_kind())) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
return IsMoreGeneralElementsKindTransition(old_map->elements_kind(),
|
||||
receiver_map()->elements_kind());
|
||||
}
|
||||
|
||||
CacheHolderFlag flag;
|
||||
|
@ -134,7 +134,7 @@ void LookupIterator::PrepareForDataProperty(Handle<Object> value) {
|
||||
ElementsKind kind = holder_map_->elements_kind();
|
||||
ElementsKind to = value->OptimalElementsKind();
|
||||
if (IsHoleyElementsKind(kind)) to = GetHoleyElementsKind(to);
|
||||
to = IsMoreGeneralElementsKindTransition(kind, to) ? to : kind;
|
||||
to = GetMoreGeneralElementsKind(kind, to);
|
||||
JSObject::TransitionElementsKind(holder, to);
|
||||
holder_map_ = handle(holder->map(), isolate_);
|
||||
|
||||
|
@ -4190,9 +4190,8 @@ void JSObject::AllocateStorageForMap(Handle<JSObject> object, Handle<Map> map) {
|
||||
ElementsKind obj_kind = object->map()->elements_kind();
|
||||
ElementsKind map_kind = map->elements_kind();
|
||||
if (map_kind != obj_kind) {
|
||||
ElementsKind to_kind = map_kind;
|
||||
if (IsMoreGeneralElementsKindTransition(map_kind, obj_kind) ||
|
||||
IsDictionaryElementsKind(obj_kind)) {
|
||||
ElementsKind to_kind = GetMoreGeneralElementsKind(map_kind, obj_kind);
|
||||
if (IsDictionaryElementsKind(obj_kind)) {
|
||||
to_kind = obj_kind;
|
||||
}
|
||||
if (IsDictionaryElementsKind(to_kind)) {
|
||||
@ -12608,7 +12607,7 @@ MaybeHandle<Object> JSObject::AddDataElement(Handle<JSObject> object,
|
||||
to = GetHoleyElementsKind(to);
|
||||
kind = GetHoleyElementsKind(kind);
|
||||
}
|
||||
to = IsMoreGeneralElementsKindTransition(kind, to) ? to : kind;
|
||||
to = GetMoreGeneralElementsKind(kind, to);
|
||||
ElementsAccessor* accessor = ElementsAccessor::ForKind(to);
|
||||
accessor->Add(object, index, value, attributes, new_capacity);
|
||||
|
||||
|
@ -730,21 +730,16 @@ RUNTIME_FUNCTION(Runtime_ArrayConcat) {
|
||||
Handle<JSArray> array(Handle<JSArray>::cast(obj));
|
||||
length_estimate = static_cast<uint32_t>(array->length()->Number());
|
||||
if (length_estimate != 0) {
|
||||
ElementsKind array_kind =
|
||||
GetPackedElementsKind(array->map()->elements_kind());
|
||||
if (IsMoreGeneralElementsKindTransition(kind, array_kind)) {
|
||||
kind = array_kind;
|
||||
}
|
||||
kind = GetMoreGeneralElementsKind(
|
||||
kind, GetPackedElementsKind(array->map()->elements_kind()));
|
||||
}
|
||||
element_estimate = EstimateElementCount(array);
|
||||
} else {
|
||||
if (obj->IsHeapObject()) {
|
||||
if (obj->IsNumber()) {
|
||||
if (IsMoreGeneralElementsKindTransition(kind, FAST_DOUBLE_ELEMENTS)) {
|
||||
kind = FAST_DOUBLE_ELEMENTS;
|
||||
}
|
||||
} else if (IsMoreGeneralElementsKindTransition(kind, FAST_ELEMENTS)) {
|
||||
kind = FAST_ELEMENTS;
|
||||
kind = GetMoreGeneralElementsKind(kind, FAST_DOUBLE_ELEMENTS);
|
||||
} else {
|
||||
kind = GetMoreGeneralElementsKind(kind, FAST_ELEMENTS);
|
||||
}
|
||||
}
|
||||
length_estimate = 1;
|
||||
|
@ -424,10 +424,8 @@ RUNTIME_FUNCTION(Runtime_StoreArrayLiteralElement) {
|
||||
? FAST_HOLEY_ELEMENTS
|
||||
: FAST_ELEMENTS;
|
||||
JSObject::TransitionElementsKind(object, transitioned_kind);
|
||||
ElementsKind boilerplate_elements_kind =
|
||||
boilerplate_object->GetElementsKind();
|
||||
if (IsMoreGeneralElementsKindTransition(boilerplate_elements_kind,
|
||||
transitioned_kind)) {
|
||||
if (IsMoreGeneralElementsKindTransition(
|
||||
boilerplate_object->GetElementsKind(), transitioned_kind)) {
|
||||
JSObject::TransitionElementsKind(boilerplate_object, transitioned_kind);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user