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.