Don't track Smi->Double->Object element transitions for small undefined arrays.
R=jkummerow@chromium.org BUG= TEST= Review URL: http://codereview.chromium.org/8816009 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@10181 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
ff6f2fa9b3
commit
c33dfd1154
@ -3378,6 +3378,7 @@ Expression* Parser::ParseArrayLiteral(bool* ok) {
|
||||
isolate()->factory()->NewFixedArray(values->length(), TENURED);
|
||||
Handle<FixedDoubleArray> double_literals;
|
||||
ElementsKind elements_kind = FAST_SMI_ONLY_ELEMENTS;
|
||||
bool has_only_undefined_values = true;
|
||||
|
||||
// Fill in the literals.
|
||||
bool is_simple = true;
|
||||
@ -3401,6 +3402,7 @@ Expression* Parser::ParseArrayLiteral(bool* ok) {
|
||||
// FAST_DOUBLE_ELEMENTS and FAST_ELEMENTS as necessary. Always remember
|
||||
// the tagged value, no matter what the ElementsKind is in case we
|
||||
// ultimately end up in FAST_ELEMENTS.
|
||||
has_only_undefined_values = false;
|
||||
object_literals->set(i, *boilerplate_value);
|
||||
if (elements_kind == FAST_SMI_ONLY_ELEMENTS) {
|
||||
// Smi only elements. Notice if a transition to FAST_DOUBLE_ELEMENTS or
|
||||
@ -3439,6 +3441,13 @@ Expression* Parser::ParseArrayLiteral(bool* ok) {
|
||||
}
|
||||
}
|
||||
|
||||
// Very small array literals that don't have a concrete hint about their type
|
||||
// from a constant value should default to the slow case to avoid lots of
|
||||
// elements transitions on really small objects.
|
||||
if (has_only_undefined_values && values->length() <= 2) {
|
||||
elements_kind = FAST_ELEMENTS;
|
||||
}
|
||||
|
||||
// Simple and shallow arrays can be lazily copied, we transform the
|
||||
// elements array to a copy-on-write array.
|
||||
if (is_simple && depth == 1 && values->length() > 0 &&
|
||||
|
Loading…
Reference in New Issue
Block a user