Reviewers: danno,
Message:
PTAL.
Description:
Remove unnecessary elements type check when allocating array in runtime.
BUG=
TEST=--smi-only-arrays should be perf-neutral to allocating big arrays in a
tight loop.
Please review this at http://codereview.chromium.org/9356002/
SVN Base: https://v8.googlecode.com/svn/branches/bleeding_edge
Affected files:
M src/builtins.cc
M src/heap.cc
Index: src/builtins.cc
diff --git a/src/builtins.cc b/src/builtins.cc
index
1badca7bc574f4c76225c02784ba0ef0cf6f8915..e48c676b4f97a39fe45a8b0663e1cd862dfabd17
100644
--- a/src/builtins.cc
+++ b/src/builtins.cc
@@ -218,12 +218,12 @@ static MaybeObject* ArrayCodeGenericCommon(Arguments*
args,
if (obj->IsSmi()) {
int len = Smi::cast(obj)->value();
if (len >= 0 && len < JSObject::kInitialMaxFastElementArray) {
- Object* obj;
+ Object* fixed_array;
{ MaybeObject* maybe_obj = heap->AllocateFixedArrayWithHoles(len);
- if (!maybe_obj->ToObject(&obj)) return maybe_obj;
+ if (!maybe_obj->ToObject(&fixed_array)) return maybe_obj;
}
- MaybeObject* maybe_obj = array->SetContent(FixedArray::cast(obj));
- if (maybe_obj->IsFailure()) return maybe_obj;
+ array->set_elements(FixedArray::cast(fixed_array));
+ array->set_length(Smi::cast(obj));
return array;
}
}
Index: src/heap.cc
diff --git a/src/heap.cc b/src/heap.cc
index
ff31361866c54fdb004747e94652a56c5eafd473..cd8a03e3a6ddf90af03129d78a17e060f6385927
100644
--- a/src/heap.cc
+++ b/src/heap.cc
@@ -4361,10 +4361,10 @@ MaybeObject* Heap::AllocateJSArray(
Context* global_context = isolate()->context()->global_context();
JSFunction* array_function = global_context->array_function();
Map* map = array_function->initial_map();
- if (elements_kind == FAST_ELEMENTS || !FLAG_smi_only_arrays) {
- map = Map::cast(global_context->object_js_array_map());
- } else if (elements_kind == FAST_DOUBLE_ELEMENTS) {
+ if (elements_kind == FAST_DOUBLE_ELEMENTS) {
map = Map::cast(global_context->double_js_array_map());
+ } else if (elements_kind == FAST_ELEMENTS || !FLAG_smi_only_arrays) {
+ map = Map::cast(global_context->object_js_array_map());
} else {
ASSERT(elements_kind == FAST_SMI_ONLY_ELEMENTS);
ASSERT(map == global_context->smi_js_array_map());
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev