Reviewers: Toon Verwaest, Michael Starzinger,

Message:
@mstarzinger please review the TF part of the change.

Description:
Do not include code objects for functions in the start-up snapshot.

Please review this at https://codereview.chromium.org/981213002/

Base URL: https://chromium.googlesource.com/v8/v8.git@master

Affected files (+14, -45 lines):
  M src/bootstrapper.cc
  M src/compiler/pipeline.cc
  M src/objects.h
  M src/objects-inl.h
  M src/serialize.cc


Index: src/bootstrapper.cc
diff --git a/src/bootstrapper.cc b/src/bootstrapper.cc
index 9d2fc4368a60b2e4b5cd194007bfb8b93fda727d..87cd0d4a0cca13da51dd2134e55dd7b1fd9b81b7 100644
--- a/src/bootstrapper.cc
+++ b/src/bootstrapper.cc
@@ -2107,14 +2107,12 @@ bool Genesis::InstallNatives() {
   }

   // Install natives.
-  for (int i = Natives::GetDebuggerCount();
-       i < Natives::GetBuiltinsCount();
-       i++) {
+  int i = Natives::GetDebuggerCount();
+  if (!CompileBuiltin(isolate(), i)) return false;
+  if (!InstallJSBuiltins(builtins)) return false;
+
+  for (++i; i < Natives::GetBuiltinsCount(); ++i) {
     if (!CompileBuiltin(isolate(), i)) return false;
-    // TODO(ager): We really only need to install the JS builtin
-    // functions on the builtins object after compiling and running
-    // runtime.js.
-    if (!InstallJSBuiltins(builtins)) return false;
   }

   InstallNativeFunctions();
@@ -2610,15 +2608,7 @@ bool Genesis::InstallJSBuiltins(Handle<JSBuiltinsObject> builtins) {
     Handle<Object> function_object = Object::GetProperty(
         isolate(), builtins, Builtins::GetName(id)).ToHandleChecked();
Handle<JSFunction> function = Handle<JSFunction>::cast(function_object); - // TODO(mstarzinger): This is just a temporary hack to make TurboFan work, - // the correct solution is to restore the context register after invoking
-    // builtins from full-codegen.
- function->shared()->DisableOptimization(kBuiltinFunctionCannotBeOptimized);
     builtins->set_javascript_builtin(id, *function);
-    if (!Compiler::EnsureCompiled(function, CLEAR_EXCEPTION)) {
-      return false;
-    }
-    builtins->set_javascript_builtin_code(id, function->shared()->code());
   }
   return true;
 }
Index: src/compiler/pipeline.cc
diff --git a/src/compiler/pipeline.cc b/src/compiler/pipeline.cc
index 80b19809d338eece87ad6280c1e026e183857df0..3936af0d0c4e8e1ee21b62064cebbe8ca273f829 100644
--- a/src/compiler/pipeline.cc
+++ b/src/compiler/pipeline.cc
@@ -837,11 +837,10 @@ Handle<Code> Pipeline::GenerateCode() {
   // the correct solution is to restore the context register after invoking
   // builtins from full-codegen.
   Handle<SharedFunctionInfo> shared = info()->shared_info();
-  if (isolate()->bootstrapper()->IsActive() ||
-      shared->disable_optimization_reason() ==
-          kBuiltinFunctionCannotBeOptimized) {
-    shared->DisableOptimization(kBuiltinFunctionCannotBeOptimized);
-    return Handle<Code>::null();
+  for (int i = 0; i < Builtins::NumberOfJavaScriptBuiltins(); i++) {
+    Builtins::JavaScript id = static_cast<Builtins::JavaScript>(i);
+ Object* builtin = isolate()->js_builtins_object()->javascript_builtin(id);
+    if (*info()->closure() == builtin) return Handle<Code>::null();
   }

   // TODO(dslomov): support turbo optimization of subclass constructors.
Index: src/objects-inl.h
diff --git a/src/objects-inl.h b/src/objects-inl.h
index 2ce845adfce09bb2c07b075c90d7d49f55aee80b..72fbe45a88018c53cef105b9f8349932d77f051f 100644
--- a/src/objects-inl.h
+++ b/src/objects-inl.h
@@ -6311,20 +6311,6 @@ void JSBuiltinsObject::set_javascript_builtin(Builtins::JavaScript id,
 }


-Code* JSBuiltinsObject::javascript_builtin_code(Builtins::JavaScript id) {
-  DCHECK(id < kJSBuiltinsCount);  // id is unsigned.
-  return Code::cast(READ_FIELD(this, OffsetOfCodeWithId(id)));
-}
-
-
-void JSBuiltinsObject::set_javascript_builtin_code(Builtins::JavaScript id,
-                                                   Code* value) {
-  DCHECK(id < kJSBuiltinsCount);  // id is unsigned.
-  WRITE_FIELD(this, OffsetOfCodeWithId(id), value);
-  DCHECK(!GetHeap()->InNewSpace(value));
-}
-
-
 ACCESSORS(JSProxy, handler, Object, kHandlerOffset)
 ACCESSORS(JSProxy, hash, Object, kHashOffset)
 ACCESSORS(JSFunctionProxy, call_trap, Object, kCallTrapOffset)
Index: src/objects.h
diff --git a/src/objects.h b/src/objects.h
index c3344ec98759a28b767e29f5ba440065f210fe21..8d3326826bc4f0f53c40c1269dc90d019a118519 100644
--- a/src/objects.h
+++ b/src/objects.h
@@ -7703,10 +7703,6 @@ class JSBuiltinsObject: public GlobalObject {
   inline Object* javascript_builtin(Builtins::JavaScript id);
inline void set_javascript_builtin(Builtins::JavaScript id, Object* value);

-  // Accessors for code of the runtime routines written in JavaScript.
-  inline Code* javascript_builtin_code(Builtins::JavaScript id);
- inline void set_javascript_builtin_code(Builtins::JavaScript id, Code* value);
-
   DECLARE_CAST(JSBuiltinsObject)

   // Dispatched behavior.
@@ -7718,19 +7714,13 @@ class JSBuiltinsObject: public GlobalObject {
   // (function and code object).
   static const int kJSBuiltinsCount = Builtins::id_count;
   static const int kJSBuiltinsOffset = GlobalObject::kHeaderSize;
-  static const int kJSBuiltinsCodeOffset =
-      GlobalObject::kHeaderSize + (kJSBuiltinsCount * kPointerSize);
   static const int kSize =
-      kJSBuiltinsCodeOffset + (kJSBuiltinsCount * kPointerSize);
+      GlobalObject::kHeaderSize + (kJSBuiltinsCount * kPointerSize);

   static int OffsetOfFunctionWithId(Builtins::JavaScript id) {
     return kJSBuiltinsOffset + id * kPointerSize;
   }

-  static int OffsetOfCodeWithId(Builtins::JavaScript id) {
-    return kJSBuiltinsCodeOffset + id * kPointerSize;
-  }
-
  private:
   DISALLOW_IMPLICIT_CONSTRUCTORS(JSBuiltinsObject);
 };
Index: src/serialize.cc
diff --git a/src/serialize.cc b/src/serialize.cc
index 86bbfce3c78bf051b1c6067189aa8021d2763cb2..3a3a94144730e2c3c3c51ae3846242e74b7c114e 100644
--- a/src/serialize.cc
+++ b/src/serialize.cc
@@ -1532,6 +1532,10 @@ void StartupSerializer::SerializeObject(HeapObject* obj, HowToCode how_to_code,
     return;
   }

+  if (obj->IsCode() && Code::cast(obj)->kind() == Code::FUNCTION) {
+    obj = isolate()->builtins()->builtin(Builtins::kCompileLazy);
+  }
+
   if (SerializeKnownObject(obj, how_to_code, where_to_point, skip)) return;

   FlushSkip(skip);


--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
--- You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to