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/hydrogen.cc

Issue 1042843002: [Crankshaft] Don't add an instruction twice for %_StringGetLength. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 8 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 | « src/hydrogen.h ('k') | 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/hydrogen.h" 5 #include "src/hydrogen.h"
6 6
7 #include <sstream> 7 #include <sstream>
8 8
9 #include "src/v8.h" 9 #include "src/v8.h"
10 10
(...skipping 6822 matching lines...) Expand 10 before | Expand all | Expand 10 after
6833 return Add<HConstant>(c_string->StringValue()->map()->instance_type()); 6833 return Add<HConstant>(c_string->StringValue()->map()->instance_type());
6834 } 6834 }
6835 } 6835 }
6836 return Add<HLoadNamedField>( 6836 return Add<HLoadNamedField>(
6837 Add<HLoadNamedField>(string, nullptr, HObjectAccess::ForMap()), nullptr, 6837 Add<HLoadNamedField>(string, nullptr, HObjectAccess::ForMap()), nullptr,
6838 HObjectAccess::ForMapInstanceType()); 6838 HObjectAccess::ForMapInstanceType());
6839 } 6839 }
6840 6840
6841 6841
6842 HInstruction* HGraphBuilder::AddLoadStringLength(HValue* string) { 6842 HInstruction* HGraphBuilder::AddLoadStringLength(HValue* string) {
6843 return AddInstruction(BuildLoadStringLength(string));
6844 }
6845
6846
6847 HInstruction* HGraphBuilder::BuildLoadStringLength(HValue* string) {
6843 if (string->IsConstant()) { 6848 if (string->IsConstant()) {
6844 HConstant* c_string = HConstant::cast(string); 6849 HConstant* c_string = HConstant::cast(string);
6845 if (c_string->HasStringValue()) { 6850 if (c_string->HasStringValue()) {
6846 return Add<HConstant>(c_string->StringValue()->length()); 6851 return New<HConstant>(c_string->StringValue()->length());
6847 } 6852 }
6848 } 6853 }
6849 return Add<HLoadNamedField>(string, nullptr, 6854 return New<HLoadNamedField>(string, nullptr,
6850 HObjectAccess::ForStringLength()); 6855 HObjectAccess::ForStringLength());
6851 } 6856 }
6852 6857
6853 6858
6854 HInstruction* HOptimizedGraphBuilder::BuildNamedGeneric( 6859 HInstruction* HOptimizedGraphBuilder::BuildNamedGeneric(
6855 PropertyAccessType access_type, Expression* expr, HValue* object, 6860 PropertyAccessType access_type, Expression* expr, HValue* object,
6856 Handle<String> name, HValue* value, bool is_uninitialized) { 6861 Handle<String> name, HValue* value, bool is_uninitialized) {
6857 if (is_uninitialized) { 6862 if (is_uninitialized) {
6858 Add<HDeoptimize>( 6863 Add<HDeoptimize>(
6859 Deoptimizer::kInsufficientTypeFeedbackForGenericNamedAccess, 6864 Deoptimizer::kInsufficientTypeFeedbackForGenericNamedAccess,
(...skipping 5012 matching lines...) Expand 10 before | Expand all | Expand 10 after
11872 PushArgumentsFromEnvironment(call->arguments()->length()); 11877 PushArgumentsFromEnvironment(call->arguments()->length());
11873 HCallStub* result = New<HCallStub>(CodeStub::StringCompare, 2); 11878 HCallStub* result = New<HCallStub>(CodeStub::StringCompare, 2);
11874 return ast_context()->ReturnInstruction(result, call->id()); 11879 return ast_context()->ReturnInstruction(result, call->id());
11875 } 11880 }
11876 11881
11877 11882
11878 void HOptimizedGraphBuilder::GenerateStringGetLength(CallRuntime* call) { 11883 void HOptimizedGraphBuilder::GenerateStringGetLength(CallRuntime* call) {
11879 DCHECK(call->arguments()->length() == 1); 11884 DCHECK(call->arguments()->length() == 1);
11880 CHECK_ALIVE(VisitForValue(call->arguments()->at(0))); 11885 CHECK_ALIVE(VisitForValue(call->arguments()->at(0)));
11881 HValue* string = Pop(); 11886 HValue* string = Pop();
11882 HInstruction* result = AddLoadStringLength(string); 11887 HInstruction* result = BuildLoadStringLength(string);
11883 return ast_context()->ReturnInstruction(result, call->id()); 11888 return ast_context()->ReturnInstruction(result, call->id());
11884 } 11889 }
11885 11890
11886 11891
11887 // Support for direct calls from JavaScript to native RegExp code. 11892 // Support for direct calls from JavaScript to native RegExp code.
11888 void HOptimizedGraphBuilder::GenerateRegExpExec(CallRuntime* call) { 11893 void HOptimizedGraphBuilder::GenerateRegExpExec(CallRuntime* call) {
11889 DCHECK_EQ(4, call->arguments()->length()); 11894 DCHECK_EQ(4, call->arguments()->length());
11890 CHECK_ALIVE(VisitExpressions(call->arguments())); 11895 CHECK_ALIVE(VisitExpressions(call->arguments()));
11891 PushArgumentsFromEnvironment(call->arguments()->length()); 11896 PushArgumentsFromEnvironment(call->arguments()->length());
11892 HCallStub* result = New<HCallStub>(CodeStub::RegExpExec, 4); 11897 HCallStub* result = New<HCallStub>(CodeStub::RegExpExec, 4);
(...skipping 1510 matching lines...) Expand 10 before | Expand all | Expand 10 after
13403 if (ShouldProduceTraceOutput()) { 13408 if (ShouldProduceTraceOutput()) {
13404 isolate()->GetHTracer()->TraceHydrogen(name(), graph_); 13409 isolate()->GetHTracer()->TraceHydrogen(name(), graph_);
13405 } 13410 }
13406 13411
13407 #ifdef DEBUG 13412 #ifdef DEBUG
13408 graph_->Verify(false); // No full verify. 13413 graph_->Verify(false); // No full verify.
13409 #endif 13414 #endif
13410 } 13415 }
13411 13416
13412 } } // namespace v8::internal 13417 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/hydrogen.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698