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

Side by Side Diff: src/crankshaft/hydrogen.cc

Issue 1673163002: [crankshaft] Allow inlining of base constructors (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 10 months 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 | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 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/crankshaft/hydrogen.h" 5 #include "src/crankshaft/hydrogen.h"
6 6
7 #include <sstream> 7 #include <sstream>
8 8
9 #include "src/allocation-site-scopes.h" 9 #include "src/allocation-site-scopes.h"
10 #include "src/ast/ast-numbering.h" 10 #include "src/ast/ast-numbering.h"
(...skipping 8370 matching lines...) Expand 10 before | Expand all | Expand 10 after
8381 // Use the same AstValueFactory for creating strings in the sub-compilation 8381 // Use the same AstValueFactory for creating strings in the sub-compilation
8382 // step, but don't transfer ownership to target_info. 8382 // step, but don't transfer ownership to target_info.
8383 ParseInfo parse_info(zone(), target); 8383 ParseInfo parse_info(zone(), target);
8384 parse_info.set_ast_value_factory( 8384 parse_info.set_ast_value_factory(
8385 top_info()->parse_info()->ast_value_factory()); 8385 top_info()->parse_info()->ast_value_factory());
8386 parse_info.set_ast_value_factory_owned(false); 8386 parse_info.set_ast_value_factory_owned(false);
8387 8387
8388 CompilationInfo target_info(&parse_info); 8388 CompilationInfo target_info(&parse_info);
8389 Handle<SharedFunctionInfo> target_shared(target->shared()); 8389 Handle<SharedFunctionInfo> target_shared(target->shared());
8390 8390
8391 if (IsClassConstructor(target_shared->kind())) { 8391 if (inlining_kind != CONSTRUCT_CALL_RETURN &&
8392 IsClassConstructor(target_shared->kind())) {
8392 TraceInline(target, caller, "target is classConstructor"); 8393 TraceInline(target, caller, "target is classConstructor");
8393 return false; 8394 return false;
8394 } 8395 }
8396
8395 if (target_shared->HasDebugInfo()) { 8397 if (target_shared->HasDebugInfo()) {
8396 TraceInline(target, caller, "target is being debugged"); 8398 TraceInline(target, caller, "target is being debugged");
8397 return false; 8399 return false;
8398 } 8400 }
8399 if (!Compiler::ParseAndAnalyze(target_info.parse_info())) { 8401 if (!Compiler::ParseAndAnalyze(target_info.parse_info())) {
8400 if (target_info.isolate()->has_pending_exception()) { 8402 if (target_info.isolate()->has_pending_exception()) {
8401 // Parse or scope error, never optimize this function. 8403 // Parse or scope error, never optimize this function.
8402 SetStackOverflow(); 8404 SetStackOverflow();
8403 target_shared->DisableOptimization(kParseScopeError); 8405 target_shared->DisableOptimization(kParseScopeError);
8404 } 8406 }
(...skipping 1491 matching lines...) Expand 10 before | Expand all | Expand 10 after
9896 9898
9897 int args_to_drop = argument_count + (expression->IsCall() ? 2 : 1); 9899 int args_to_drop = argument_count + (expression->IsCall() ? 2 : 1);
9898 Drop(args_to_drop); 9900 Drop(args_to_drop);
9899 ast_context()->ReturnValue(new_object); 9901 ast_context()->ReturnValue(new_object);
9900 } 9902 }
9901 9903
9902 9904
9903 // Checks whether allocation using the given constructor can be inlined. 9905 // Checks whether allocation using the given constructor can be inlined.
9904 static bool IsAllocationInlineable(Handle<JSFunction> constructor) { 9906 static bool IsAllocationInlineable(Handle<JSFunction> constructor) {
9905 return constructor->has_initial_map() && 9907 return constructor->has_initial_map() &&
9906 !IsClassConstructor(constructor->shared()->kind()) && 9908 !IsSubclassConstructor(constructor->shared()->kind()) &&
9907 constructor->initial_map()->instance_type() == JS_OBJECT_TYPE && 9909 constructor->initial_map()->instance_type() == JS_OBJECT_TYPE &&
9908 constructor->initial_map()->instance_size() < 9910 constructor->initial_map()->instance_size() <
9909 HAllocate::kMaxInlineSize; 9911 HAllocate::kMaxInlineSize;
9910 } 9912 }
9911 9913
9912 9914
9913 bool HOptimizedGraphBuilder::IsCallArrayInlineable( 9915 bool HOptimizedGraphBuilder::IsCallArrayInlineable(
9914 int argument_count, 9916 int argument_count,
9915 Handle<AllocationSite> site) { 9917 Handle<AllocationSite> site) {
9916 Handle<JSFunction> caller = current_info()->closure(); 9918 Handle<JSFunction> caller = current_info()->closure();
(...skipping 3738 matching lines...) Expand 10 before | Expand all | Expand 10 after
13655 isolate()->GetHTracer()->TraceHydrogen(name(), graph_); 13657 isolate()->GetHTracer()->TraceHydrogen(name(), graph_);
13656 } 13658 }
13657 13659
13658 #ifdef DEBUG 13660 #ifdef DEBUG
13659 graph_->Verify(false); // No full verify. 13661 graph_->Verify(false); // No full verify.
13660 #endif 13662 #endif
13661 } 13663 }
13662 13664
13663 } // namespace internal 13665 } // namespace internal
13664 } // namespace v8 13666 } // namespace v8
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698