Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(6)

Side by Side Diff: src/serialize.cc

Issue 737373003: When optimizing deserialized code, make sure IC state is preserved. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/objects-inl.h ('k') | test/mjsunit/deserialize-optimize-inner.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/v8.h" 5 #include "src/v8.h"
6 6
7 #include "src/accessors.h" 7 #include "src/accessors.h"
8 #include "src/api.h" 8 #include "src/api.h"
9 #include "src/base/platform/platform.h" 9 #include "src/base/platform/platform.h"
10 #include "src/bootstrapper.h" 10 #include "src/bootstrapper.h"
(...skipping 2024 matching lines...) Expand 10 before | Expand all | Expand 10 after
2035 return; 2035 return;
2036 case Code::STUB: 2036 case Code::STUB:
2037 SerializeCodeStub(code_object->stub_key(), how_to_code, where_to_point); 2037 SerializeCodeStub(code_object->stub_key(), how_to_code, where_to_point);
2038 return; 2038 return;
2039 #define IC_KIND_CASE(KIND) case Code::KIND: 2039 #define IC_KIND_CASE(KIND) case Code::KIND:
2040 IC_KIND_LIST(IC_KIND_CASE) 2040 IC_KIND_LIST(IC_KIND_CASE)
2041 #undef IC_KIND_CASE 2041 #undef IC_KIND_CASE
2042 SerializeIC(code_object, how_to_code, where_to_point); 2042 SerializeIC(code_object, how_to_code, where_to_point);
2043 return; 2043 return;
2044 case Code::FUNCTION: 2044 case Code::FUNCTION:
2045 // Only serialize the code for the toplevel function. Replace code 2045 DCHECK(code_object->has_reloc_info_for_serialization());
2046 // of included function literals by the lazy compile builtin. 2046 // Only serialize the code for the toplevel function unless specified
2047 // by flag. Replace code of inner functions by the lazy compile builtin.
2047 // This is safe, as checked in Compiler::BuildFunctionInfo. 2048 // This is safe, as checked in Compiler::BuildFunctionInfo.
2048 if (code_object != main_code_) { 2049 if (code_object != main_code_ && !FLAG_serialize_inner) {
2049 SerializeBuiltin(Builtins::kCompileLazy, how_to_code, where_to_point); 2050 SerializeBuiltin(Builtins::kCompileLazy, how_to_code, where_to_point);
2050 } else { 2051 } else {
2051 code_object->MakeYoung(); 2052 code_object->MakeYoung();
2052 SerializeGeneric(code_object, how_to_code, where_to_point); 2053 SerializeGeneric(code_object, how_to_code, where_to_point);
2053 } 2054 }
2054 return; 2055 return;
2055 } 2056 }
2056 UNREACHABLE(); 2057 UNREACHABLE();
2057 } 2058 }
2058 2059
2059 // Past this point we should not see any (context-specific) maps anymore. 2060 // Past this point we should not see any (context-specific) maps anymore.
2060 CHECK(!obj->IsMap()); 2061 CHECK(!obj->IsMap());
2061 // There should be no references to the global object embedded. 2062 // There should be no references to the global object embedded.
2062 CHECK(!obj->IsJSGlobalProxy() && !obj->IsGlobalObject()); 2063 CHECK(!obj->IsJSGlobalProxy() && !obj->IsGlobalObject());
2063 // There should be no hash table embedded. They would require rehashing. 2064 // There should be no hash table embedded. They would require rehashing.
2064 CHECK(!obj->IsHashTable()); 2065 CHECK(!obj->IsHashTable());
2066 // We expect no instantiated function objects or contexts.
2067 CHECK(!obj->IsJSFunction() && !obj->IsContext());
2065 2068
2066 SerializeGeneric(obj, how_to_code, where_to_point); 2069 SerializeGeneric(obj, how_to_code, where_to_point);
2067 } 2070 }
2068 2071
2069 2072
2070 void CodeSerializer::SerializeGeneric(HeapObject* heap_object, 2073 void CodeSerializer::SerializeGeneric(HeapObject* heap_object,
2071 HowToCode how_to_code, 2074 HowToCode how_to_code,
2072 WhereToPoint where_to_point) { 2075 WhereToPoint where_to_point) {
2073 if (FLAG_trace_code_serializer) { 2076 if (FLAG_trace_code_serializer) {
2074 PrintF(" Encoding heap object: "); 2077 PrintF(" Encoding heap object: ");
(...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after
2317 bool SerializedCodeData::IsSane(String* source) { 2320 bool SerializedCodeData::IsSane(String* source) {
2318 return GetHeaderValue(kCheckSumOffset) == CheckSum(source) && 2321 return GetHeaderValue(kCheckSumOffset) == CheckSum(source) &&
2319 PayloadLength() >= SharedFunctionInfo::kSize; 2322 PayloadLength() >= SharedFunctionInfo::kSize;
2320 } 2323 }
2321 2324
2322 2325
2323 int SerializedCodeData::CheckSum(String* string) { 2326 int SerializedCodeData::CheckSum(String* string) {
2324 return Version::Hash() ^ string->length(); 2327 return Version::Hash() ^ string->length();
2325 } 2328 }
2326 } } // namespace v8::internal 2329 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/objects-inl.h ('k') | test/mjsunit/deserialize-optimize-inner.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698