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

Side by Side Diff: src/hydrogen.cc

Issue 767743002: Hydrogen code stubs for vector-based ICs. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Rebase. Created 6 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/code-stubs-hydrogen.cc ('k') | src/hydrogen-instructions.h » ('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/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 6889 matching lines...) Expand 10 before | Expand all | Expand 10 after
6900 bool is_uninitialized) { 6900 bool is_uninitialized) {
6901 if (is_uninitialized) { 6901 if (is_uninitialized) {
6902 Add<HDeoptimize>("Insufficient type feedback for generic named access", 6902 Add<HDeoptimize>("Insufficient type feedback for generic named access",
6903 Deoptimizer::SOFT); 6903 Deoptimizer::SOFT);
6904 } 6904 }
6905 if (access_type == LOAD) { 6905 if (access_type == LOAD) {
6906 HLoadNamedGeneric* result = New<HLoadNamedGeneric>(object, name); 6906 HLoadNamedGeneric* result = New<HLoadNamedGeneric>(object, name);
6907 if (FLAG_vector_ics) { 6907 if (FLAG_vector_ics) {
6908 Handle<SharedFunctionInfo> current_shared = 6908 Handle<SharedFunctionInfo> current_shared =
6909 function_state()->compilation_info()->shared_info(); 6909 function_state()->compilation_info()->shared_info();
6910 result->SetVectorAndSlot( 6910 Handle<TypeFeedbackVector> vector =
6911 handle(current_shared->feedback_vector(), isolate()), 6911 handle(current_shared->feedback_vector(), isolate());
6912 expr->AsProperty()->PropertyFeedbackSlot()); 6912 FeedbackVectorICSlot slot = expr->AsProperty()->PropertyFeedbackSlot();
6913 result->SetVectorAndSlot(vector, slot);
6913 } 6914 }
6914 return result; 6915 return result;
6915 } else { 6916 } else {
6916 return New<HStoreNamedGeneric>(object, name, value, function_strict_mode()); 6917 return New<HStoreNamedGeneric>(object, name, value, function_strict_mode());
6917 } 6918 }
6918 } 6919 }
6919 6920
6920 6921
6921 6922
6922 HInstruction* HOptimizedGraphBuilder::BuildKeyedGeneric( 6923 HInstruction* HOptimizedGraphBuilder::BuildKeyedGeneric(
6923 PropertyAccessType access_type, 6924 PropertyAccessType access_type,
6924 Expression* expr, 6925 Expression* expr,
6925 HValue* object, 6926 HValue* object,
6926 HValue* key, 6927 HValue* key,
6927 HValue* value) { 6928 HValue* value) {
6928 if (access_type == LOAD) { 6929 if (access_type == LOAD) {
6929 HLoadKeyedGeneric* result = New<HLoadKeyedGeneric>(object, key); 6930 HLoadKeyedGeneric* result = New<HLoadKeyedGeneric>(object, key);
6930 if (FLAG_vector_ics) { 6931 if (FLAG_vector_ics) {
6931 Handle<SharedFunctionInfo> current_shared = 6932 Handle<SharedFunctionInfo> current_shared =
6932 function_state()->compilation_info()->shared_info(); 6933 function_state()->compilation_info()->shared_info();
6933 result->SetVectorAndSlot( 6934 Handle<TypeFeedbackVector> vector =
6934 handle(current_shared->feedback_vector(), isolate()), 6935 handle(current_shared->feedback_vector(), isolate());
6935 expr->AsProperty()->PropertyFeedbackSlot()); 6936 FeedbackVectorICSlot slot = expr->AsProperty()->PropertyFeedbackSlot();
6937 result->SetVectorAndSlot(vector, slot);
6936 } 6938 }
6937 return result; 6939 return result;
6938 } else { 6940 } else {
6939 return New<HStoreKeyedGeneric>(object, key, value, function_strict_mode()); 6941 return New<HStoreKeyedGeneric>(object, key, value, function_strict_mode());
6940 } 6942 }
6941 } 6943 }
6942 6944
6943 6945
6944 LoadKeyedHoleMode HOptimizedGraphBuilder::BuildKeyedHoleMode(Handle<Map> map) { 6946 LoadKeyedHoleMode HOptimizedGraphBuilder::BuildKeyedHoleMode(Handle<Map> map) {
6945 // Loads from a "stock" fast holey double arrays can elide the hole check. 6947 // Loads from a "stock" fast holey double arrays can elide the hole check.
(...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after
7201 FinishExitWithHardDeoptimization("Unknown map in polymorphic element access"); 7203 FinishExitWithHardDeoptimization("Unknown map in polymorphic element access");
7202 set_current_block(join); 7204 set_current_block(join);
7203 return access_type == STORE ? val : Pop(); 7205 return access_type == STORE ? val : Pop();
7204 } 7206 }
7205 7207
7206 7208
7207 HValue* HOptimizedGraphBuilder::HandleKeyedElementAccess( 7209 HValue* HOptimizedGraphBuilder::HandleKeyedElementAccess(
7208 HValue* obj, HValue* key, HValue* val, Expression* expr, BailoutId ast_id, 7210 HValue* obj, HValue* key, HValue* val, Expression* expr, BailoutId ast_id,
7209 BailoutId return_id, PropertyAccessType access_type, 7211 BailoutId return_id, PropertyAccessType access_type,
7210 bool* has_side_effects) { 7212 bool* has_side_effects) {
7211 if (key->ActualValue()->IsConstant()) { 7213 // TODO(mvstanton): This optimization causes trouble for vector-based
7214 // KeyedLoadICs, turn it off for now.
7215 if (!FLAG_vector_ics && key->ActualValue()->IsConstant()) {
7212 Handle<Object> constant = 7216 Handle<Object> constant =
7213 HConstant::cast(key->ActualValue())->handle(isolate()); 7217 HConstant::cast(key->ActualValue())->handle(isolate());
7214 uint32_t array_index; 7218 uint32_t array_index;
7215 if (constant->IsString() && 7219 if (constant->IsString() &&
7216 !Handle<String>::cast(constant)->AsArrayIndex(&array_index)) { 7220 !Handle<String>::cast(constant)->AsArrayIndex(&array_index)) {
7217 if (!constant->IsUniqueName()) { 7221 if (!constant->IsUniqueName()) {
7218 constant = isolate()->factory()->InternalizeString( 7222 constant = isolate()->factory()->InternalizeString(
7219 Handle<String>::cast(constant)); 7223 Handle<String>::cast(constant));
7220 } 7224 }
7221 HInstruction* instr = 7225 HInstruction* instr =
(...skipping 6265 matching lines...) Expand 10 before | Expand all | Expand 10 after
13487 if (ShouldProduceTraceOutput()) { 13491 if (ShouldProduceTraceOutput()) {
13488 isolate()->GetHTracer()->TraceHydrogen(name(), graph_); 13492 isolate()->GetHTracer()->TraceHydrogen(name(), graph_);
13489 } 13493 }
13490 13494
13491 #ifdef DEBUG 13495 #ifdef DEBUG
13492 graph_->Verify(false); // No full verify. 13496 graph_->Verify(false); // No full verify.
13493 #endif 13497 #endif
13494 } 13498 }
13495 13499
13496 } } // namespace v8::internal 13500 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/code-stubs-hydrogen.cc ('k') | src/hydrogen-instructions.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698