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

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

Issue 2676583002: [ic] Encode [Keyed]StoreIC's language mode in slot kind instead of code object's flags. (Closed)
Patch Set: Rebasing Created 3 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
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 <memory> 7 #include <memory>
8 #include <sstream> 8 #include <sstream>
9 9
10 #include "src/allocation-site-scopes.h" 10 #include "src/allocation-site-scopes.h"
(...skipping 6505 matching lines...) Expand 10 before | Expand all | Expand 10 after
6516 } 6516 }
6517 } else { 6517 } else {
6518 HValue* global_object = Add<HLoadNamedField>( 6518 HValue* global_object = Add<HLoadNamedField>(
6519 BuildGetNativeContext(), nullptr, 6519 BuildGetNativeContext(), nullptr,
6520 HObjectAccess::ForContextSlot(Context::EXTENSION_INDEX)); 6520 HObjectAccess::ForContextSlot(Context::EXTENSION_INDEX));
6521 Handle<TypeFeedbackVector> vector = 6521 Handle<TypeFeedbackVector> vector =
6522 handle(current_feedback_vector(), isolate()); 6522 handle(current_feedback_vector(), isolate());
6523 HValue* name = Add<HConstant>(var->name()); 6523 HValue* name = Add<HConstant>(var->name());
6524 HValue* vector_value = Add<HConstant>(vector); 6524 HValue* vector_value = Add<HConstant>(vector);
6525 HValue* slot_value = Add<HConstant>(vector->GetIndex(slot)); 6525 HValue* slot_value = Add<HConstant>(vector->GetIndex(slot));
6526 DCHECK_EQ(vector->GetLanguageMode(slot), function_language_mode());
6526 Callable callable = CodeFactory::StoreICInOptimizedCode( 6527 Callable callable = CodeFactory::StoreICInOptimizedCode(
6527 isolate(), function_language_mode()); 6528 isolate(), function_language_mode());
6528 HValue* stub = Add<HConstant>(callable.code()); 6529 HValue* stub = Add<HConstant>(callable.code());
6529 HValue* values[] = {global_object, name, value, slot_value, vector_value}; 6530 HValue* values[] = {global_object, name, value, slot_value, vector_value};
6530 HCallWithDescriptor* instr = Add<HCallWithDescriptor>( 6531 HCallWithDescriptor* instr = Add<HCallWithDescriptor>(
6531 Code::STORE_IC, stub, 0, callable.descriptor(), ArrayVector(values)); 6532 Code::STORE_IC, stub, 0, callable.descriptor(), ArrayVector(values));
6532 USE(instr); 6533 USE(instr);
6533 DCHECK(instr->HasObservableSideEffects()); 6534 DCHECK(instr->HasObservableSideEffects());
6534 Add<HSimulate>(ast_id, REMOVABLE_SIMULATE); 6535 Add<HSimulate>(ast_id, REMOVABLE_SIMULATE);
6535 } 6536 }
(...skipping 313 matching lines...) Expand 10 before | Expand all | Expand 10 after
6849 return result; 6850 return result;
6850 } 6851 }
6851 DCHECK(vector->IsLoadIC(slot)); 6852 DCHECK(vector->IsLoadIC(slot));
6852 Callable callable = CodeFactory::LoadICInOptimizedCode(isolate()); 6853 Callable callable = CodeFactory::LoadICInOptimizedCode(isolate());
6853 HValue* stub = Add<HConstant>(callable.code()); 6854 HValue* stub = Add<HConstant>(callable.code());
6854 HCallWithDescriptor* result = New<HCallWithDescriptor>( 6855 HCallWithDescriptor* result = New<HCallWithDescriptor>(
6855 Code::LOAD_IC, stub, 0, callable.descriptor(), ArrayVector(values)); 6856 Code::LOAD_IC, stub, 0, callable.descriptor(), ArrayVector(values));
6856 return result; 6857 return result;
6857 6858
6858 } else { 6859 } else {
6860 DCHECK_EQ(vector->GetLanguageMode(slot), function_language_mode());
6859 HValue* values[] = {object, key, value, slot_value, vector_value}; 6861 HValue* values[] = {object, key, value, slot_value, vector_value};
6860 if (vector->IsKeyedStoreIC(slot)) { 6862 if (vector->IsKeyedStoreIC(slot)) {
6861 // It's possible that a keyed store of a constant string was converted 6863 // It's possible that a keyed store of a constant string was converted
6862 // to a named store. Here, at the last minute, we need to make sure to 6864 // to a named store. Here, at the last minute, we need to make sure to
6863 // use a generic Keyed Store if we are using the type vector, because 6865 // use a generic Keyed Store if we are using the type vector, because
6864 // it has to share information with full code. 6866 // it has to share information with full code.
6865 Callable callable = CodeFactory::KeyedStoreICInOptimizedCode( 6867 Callable callable = CodeFactory::KeyedStoreICInOptimizedCode(
6866 isolate(), function_language_mode()); 6868 isolate(), function_language_mode());
6867 HValue* stub = Add<HConstant>(callable.code()); 6869 HValue* stub = Add<HConstant>(callable.code());
6868 HCallWithDescriptor* result = 6870 HCallWithDescriptor* result =
(...skipping 6156 matching lines...) Expand 10 before | Expand all | Expand 10 after
13025 isolate()->GetHTracer()->TraceHydrogen(name(), graph_); 13027 isolate()->GetHTracer()->TraceHydrogen(name(), graph_);
13026 } 13028 }
13027 13029
13028 #ifdef DEBUG 13030 #ifdef DEBUG
13029 graph_->Verify(false); // No full verify. 13031 graph_->Verify(false); // No full verify.
13030 #endif 13032 #endif
13031 } 13033 }
13032 13034
13033 } // namespace internal 13035 } // namespace internal
13034 } // namespace v8 13036 } // namespace v8
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698