Commit 00b85aab authored by cbruni's avatar cbruni Committed by Commit bot

Adding GetMoreGeneralElementsKind in elements-kind.h

BUG=

Review URL: https://codereview.chromium.org/1307743011

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