Version 3.12.3

Reverted r11835 'Unify promotion and allocation limit computation' due to V8 Splay performance regression on Mac.  (Chromium issue 134183)

Fixed sharing of literal boilerplates for optimized code.  (issue 2193)

Performance and stability improvements on all platforms.

git-svn-id: http://v8.googlecode.com/svn/trunk@11918 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
diff --git a/src/factory.cc b/src/factory.cc
index 682125e..c33b715 100644
--- a/src/factory.cc
+++ b/src/factory.cc
@@ -555,40 +555,23 @@
 
   result->set_context(*context);
 
-  int index = FLAG_cache_optimized_code
-      ? function_info->SearchOptimizedCodeMap(context->global_context())
-      : -1;
-  if (!function_info->bound()) {
-    if (index > 0) {
-      FixedArray* code_map =
-          FixedArray::cast(function_info->optimized_code_map());
-      FixedArray* cached_literals = FixedArray::cast(code_map->get(index + 1));
-      ASSERT(cached_literals != NULL);
-      ASSERT(function_info->num_literals() == 0 ||
-             (code_map->get(index - 1) ==
-              cached_literals->get(JSFunction::kLiteralGlobalContextIndex)));
-      result->set_literals(cached_literals);
-    } else {
-      int number_of_literals = function_info->num_literals();
-      Handle<FixedArray> literals =
-          NewFixedArray(number_of_literals, pretenure);
-      if (number_of_literals > 0) {
-        // Store the object, regexp and array functions in the literals
-        // array prefix.  These functions will be used when creating
-        // object, regexp and array literals in this function.
-        literals->set(JSFunction::kLiteralGlobalContextIndex,
-                      context->global_context());
-      }
-      result->set_literals(*literals);
+  int index = function_info->SearchOptimizedCodeMap(context->global_context());
+  if (!function_info->bound() && index < 0) {
+    int number_of_literals = function_info->num_literals();
+    Handle<FixedArray> literals = NewFixedArray(number_of_literals, pretenure);
+    if (number_of_literals > 0) {
+      // Store the global context in the literals array prefix. This
+      // context will be used when creating object, regexp and array
+      // literals in this function.
+      literals->set(JSFunction::kLiteralGlobalContextIndex,
+                    context->global_context());
     }
+    result->set_literals(*literals);
   }
 
   if (index > 0) {
     // Caching of optimized code enabled and optimized code found.
-    Code* code = Code::cast(
-        FixedArray::cast(function_info->optimized_code_map())->get(index));
-    ASSERT(code != NULL);
-    result->ReplaceCode(code);
+    function_info->InstallFromOptimizedCodeMap(*result, index);
     return result;
   }