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

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

Issue 1469833005: [runtime] Pass closure to %CreateArrayLiteral and %CreateObjectLiteral. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years 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/crankshaft/hydrogen.h ('k') | src/full-codegen/arm/full-codegen-arm.cc » ('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 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-numbering.h" 10 #include "src/ast-numbering.h"
(...skipping 5872 matching lines...) Expand 10 before | Expand all | Expand 10 after
5883 } 5883 }
5884 5884
5885 if (!boilerplate.is_null() && 5885 if (!boilerplate.is_null() &&
5886 IsFastLiteral(boilerplate, kMaxFastLiteralDepth, &max_properties)) { 5886 IsFastLiteral(boilerplate, kMaxFastLiteralDepth, &max_properties)) {
5887 AllocationSiteUsageContext site_context(isolate(), site, false); 5887 AllocationSiteUsageContext site_context(isolate(), site, false);
5888 site_context.EnterNewScope(); 5888 site_context.EnterNewScope();
5889 literal = BuildFastLiteral(boilerplate, &site_context); 5889 literal = BuildFastLiteral(boilerplate, &site_context);
5890 site_context.ExitScope(site, boilerplate); 5890 site_context.ExitScope(site, boilerplate);
5891 } else { 5891 } else {
5892 NoObservableSideEffectsScope no_effects(this); 5892 NoObservableSideEffectsScope no_effects(this);
5893 Handle<LiteralsArray> closure_literals(closure->literals(), isolate());
5894 Handle<FixedArray> constant_properties = expr->constant_properties(); 5893 Handle<FixedArray> constant_properties = expr->constant_properties();
5895 int literal_index = expr->literal_index(); 5894 int literal_index = expr->literal_index();
5896 int flags = expr->ComputeFlags(true); 5895 int flags = expr->ComputeFlags(true);
5897 5896
5898 Add<HPushArguments>(Add<HConstant>(closure_literals), 5897 Add<HPushArguments>(AddThisFunction(), Add<HConstant>(literal_index),
5899 Add<HConstant>(literal_index),
5900 Add<HConstant>(constant_properties), 5898 Add<HConstant>(constant_properties),
5901 Add<HConstant>(flags)); 5899 Add<HConstant>(flags));
5902 5900
5903 Runtime::FunctionId function_id = Runtime::kCreateObjectLiteral; 5901 Runtime::FunctionId function_id = Runtime::kCreateObjectLiteral;
5904 literal = Add<HCallRuntime>(Runtime::FunctionForId(function_id), 4); 5902 literal = Add<HCallRuntime>(Runtime::FunctionForId(function_id), 4);
5905 } 5903 }
5906 5904
5907 // The object is expected in the bailout environment during computation 5905 // The object is expected in the bailout environment during computation
5908 // of the property values and is the value of the entire expression. 5906 // of the property values and is the value of the entire expression.
5909 Push(literal); 5907 Push(literal);
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
6052 literal = BuildFastLiteral(boilerplate_object, &site_context); 6050 literal = BuildFastLiteral(boilerplate_object, &site_context);
6053 site_context.ExitScope(site, boilerplate_object); 6051 site_context.ExitScope(site, boilerplate_object);
6054 } else { 6052 } else {
6055 NoObservableSideEffectsScope no_effects(this); 6053 NoObservableSideEffectsScope no_effects(this);
6056 // Boilerplate already exists and constant elements are never accessed, 6054 // Boilerplate already exists and constant elements are never accessed,
6057 // pass an empty fixed array to the runtime function instead. 6055 // pass an empty fixed array to the runtime function instead.
6058 Handle<FixedArray> constants = isolate()->factory()->empty_fixed_array(); 6056 Handle<FixedArray> constants = isolate()->factory()->empty_fixed_array();
6059 int literal_index = expr->literal_index(); 6057 int literal_index = expr->literal_index();
6060 int flags = expr->ComputeFlags(true); 6058 int flags = expr->ComputeFlags(true);
6061 6059
6062 Add<HPushArguments>(Add<HConstant>(literals), 6060 Add<HPushArguments>(AddThisFunction(), Add<HConstant>(literal_index),
6063 Add<HConstant>(literal_index), 6061 Add<HConstant>(constants), Add<HConstant>(flags));
6064 Add<HConstant>(constants),
6065 Add<HConstant>(flags));
6066 6062
6067 Runtime::FunctionId function_id = Runtime::kCreateArrayLiteral; 6063 Runtime::FunctionId function_id = Runtime::kCreateArrayLiteral;
6068 literal = Add<HCallRuntime>(Runtime::FunctionForId(function_id), 4); 6064 literal = Add<HCallRuntime>(Runtime::FunctionForId(function_id), 4);
6069 6065
6070 // Register to deopt if the boilerplate ElementsKind changes. 6066 // Register to deopt if the boilerplate ElementsKind changes.
6071 top_info()->dependencies()->AssumeTransitionStable(site); 6067 top_info()->dependencies()->AssumeTransitionStable(site);
6072 } 6068 }
6073 6069
6074 // The array is expected in the bailout environment during computation 6070 // The array is expected in the bailout environment during computation
6075 // of the property values and is the value of the entire expression. 6071 // of the property values and is the value of the entire expression.
(...skipping 5637 matching lines...) Expand 10 before | Expand all | Expand 10 after
11713 11709
11714 11710
11715 void HOptimizedGraphBuilder::VisitSpread(Spread* expr) { UNREACHABLE(); } 11711 void HOptimizedGraphBuilder::VisitSpread(Spread* expr) { UNREACHABLE(); }
11716 11712
11717 11713
11718 void HOptimizedGraphBuilder::VisitEmptyParentheses(EmptyParentheses* expr) { 11714 void HOptimizedGraphBuilder::VisitEmptyParentheses(EmptyParentheses* expr) {
11719 UNREACHABLE(); 11715 UNREACHABLE();
11720 } 11716 }
11721 11717
11722 11718
11719 HValue* HOptimizedGraphBuilder::AddThisFunction() {
11720 return AddInstruction(BuildThisFunction());
11721 }
11722
11723
11723 HInstruction* HOptimizedGraphBuilder::BuildThisFunction() { 11724 HInstruction* HOptimizedGraphBuilder::BuildThisFunction() {
11724 // If we share optimized code between different closures, the 11725 // If we share optimized code between different closures, the
11725 // this-function is not a constant, except inside an inlined body. 11726 // this-function is not a constant, except inside an inlined body.
11726 if (function_state()->outer() != NULL) { 11727 if (function_state()->outer() != NULL) {
11727 return New<HConstant>( 11728 return New<HConstant>(
11728 function_state()->compilation_info()->closure()); 11729 function_state()->compilation_info()->closure());
11729 } else { 11730 } else {
11730 return New<HThisFunction>(); 11731 return New<HThisFunction>();
11731 } 11732 }
11732 } 11733 }
(...skipping 1901 matching lines...) Expand 10 before | Expand all | Expand 10 after
13634 isolate()->GetHTracer()->TraceHydrogen(name(), graph_); 13635 isolate()->GetHTracer()->TraceHydrogen(name(), graph_);
13635 } 13636 }
13636 13637
13637 #ifdef DEBUG 13638 #ifdef DEBUG
13638 graph_->Verify(false); // No full verify. 13639 graph_->Verify(false); // No full verify.
13639 #endif 13640 #endif
13640 } 13641 }
13641 13642
13642 } // namespace internal 13643 } // namespace internal
13643 } // namespace v8 13644 } // namespace v8
OLDNEW
« no previous file with comments | « src/crankshaft/hydrogen.h ('k') | src/full-codegen/arm/full-codegen-arm.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698