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

Side by Side Diff: src/hydrogen.cc

Issue 892383003: emit premonomorphic ics for loads/stores in optimized code (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 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/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 6575 matching lines...) Expand 10 before | Expand all | Expand 10 after
6586 } 6586 }
6587 HInstruction* instr = 6587 HInstruction* instr =
6588 Add<HStoreGlobalCell>(value, cell, it.property_details()); 6588 Add<HStoreGlobalCell>(value, cell, it.property_details());
6589 if (instr->HasObservableSideEffects()) { 6589 if (instr->HasObservableSideEffects()) {
6590 Add<HSimulate>(ast_id, REMOVABLE_SIMULATE); 6590 Add<HSimulate>(ast_id, REMOVABLE_SIMULATE);
6591 } 6591 }
6592 } else { 6592 } else {
6593 HValue* global_object = Add<HLoadNamedField>( 6593 HValue* global_object = Add<HLoadNamedField>(
6594 context(), nullptr, 6594 context(), nullptr,
6595 HObjectAccess::ForContextSlot(Context::GLOBAL_OBJECT_INDEX)); 6595 HObjectAccess::ForContextSlot(Context::GLOBAL_OBJECT_INDEX));
6596 HStoreNamedGeneric* instr = Add<HStoreNamedGeneric>( 6596 HStoreNamedGeneric* instr =
6597 global_object, var->name(), value, function_language_mode()); 6597 Add<HStoreNamedGeneric>(global_object, var->name(), value,
6598 function_language_mode(), UNINITIALIZED);
Toon Verwaest 2015/02/09 14:27:59 PREMONOMORPHIC
6598 USE(instr); 6599 USE(instr);
6599 DCHECK(instr->HasObservableSideEffects()); 6600 DCHECK(instr->HasObservableSideEffects());
6600 Add<HSimulate>(ast_id, REMOVABLE_SIMULATE); 6601 Add<HSimulate>(ast_id, REMOVABLE_SIMULATE);
6601 } 6602 }
6602 } 6603 }
6603 6604
6604 6605
6605 void HOptimizedGraphBuilder::HandleCompoundAssignment(Assignment* expr) { 6606 void HOptimizedGraphBuilder::HandleCompoundAssignment(Assignment* expr) {
6606 Expression* target = expr->target(); 6607 Expression* target = expr->target();
6607 VariableProxy* proxy = target->AsVariableProxy(); 6608 VariableProxy* proxy = target->AsVariableProxy();
(...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after
6885 if (c_string->HasStringValue()) { 6886 if (c_string->HasStringValue()) {
6886 return Add<HConstant>(c_string->StringValue()->length()); 6887 return Add<HConstant>(c_string->StringValue()->length());
6887 } 6888 }
6888 } 6889 }
6889 return Add<HLoadNamedField>(string, nullptr, 6890 return Add<HLoadNamedField>(string, nullptr,
6890 HObjectAccess::ForStringLength()); 6891 HObjectAccess::ForStringLength());
6891 } 6892 }
6892 6893
6893 6894
6894 HInstruction* HOptimizedGraphBuilder::BuildNamedGeneric( 6895 HInstruction* HOptimizedGraphBuilder::BuildNamedGeneric(
6895 PropertyAccessType access_type, 6896 PropertyAccessType access_type, Expression* expr, HValue* object,
6896 Expression* expr, 6897 Handle<String> name, HValue* value, bool is_uninitialized) {
6897 HValue* object,
6898 Handle<String> name,
6899 HValue* value,
6900 bool is_uninitialized) {
6901 if (is_uninitialized) { 6898 if (is_uninitialized) {
6902 Add<HDeoptimize>( 6899 Add<HDeoptimize>(
6903 Deoptimizer::kInsufficientTypeFeedbackForGenericNamedAccess, 6900 Deoptimizer::kInsufficientTypeFeedbackForGenericNamedAccess,
6904 Deoptimizer::SOFT); 6901 Deoptimizer::SOFT);
6905 } 6902 }
6906 if (access_type == LOAD) { 6903 if (access_type == LOAD) {
6907 HLoadNamedGeneric* result = New<HLoadNamedGeneric>(object, name); 6904 HLoadNamedGeneric* result =
6905 New<HLoadNamedGeneric>(object, name, MEGAMORPHIC);
6908 if (FLAG_vector_ics) { 6906 if (FLAG_vector_ics) {
6909 Handle<SharedFunctionInfo> current_shared = 6907 Handle<SharedFunctionInfo> current_shared =
6910 function_state()->compilation_info()->shared_info(); 6908 function_state()->compilation_info()->shared_info();
6911 Handle<TypeFeedbackVector> vector = 6909 Handle<TypeFeedbackVector> vector =
6912 handle(current_shared->feedback_vector(), isolate()); 6910 handle(current_shared->feedback_vector(), isolate());
6913 FeedbackVectorICSlot slot = expr->AsProperty()->PropertyFeedbackSlot(); 6911 FeedbackVectorICSlot slot = expr->AsProperty()->PropertyFeedbackSlot();
6914 result->SetVectorAndSlot(vector, slot); 6912 result->SetVectorAndSlot(vector, slot);
6915 } 6913 }
6916 return result; 6914 return result;
6917 } else { 6915 } else {
6918 return New<HStoreNamedGeneric>(object, name, value, 6916 return New<HStoreNamedGeneric>(object, name, value,
6919 function_language_mode()); 6917 function_language_mode(), MEGAMORPHIC);
6920 } 6918 }
6921 } 6919 }
6922 6920
6923 6921
6924 6922
6925 HInstruction* HOptimizedGraphBuilder::BuildKeyedGeneric( 6923 HInstruction* HOptimizedGraphBuilder::BuildKeyedGeneric(
6926 PropertyAccessType access_type, 6924 PropertyAccessType access_type,
6927 Expression* expr, 6925 Expression* expr,
6928 HValue* object, 6926 HValue* object,
6929 HValue* key, 6927 HValue* key,
(...skipping 6566 matching lines...) Expand 10 before | Expand all | Expand 10 after
13496 if (ShouldProduceTraceOutput()) { 13494 if (ShouldProduceTraceOutput()) {
13497 isolate()->GetHTracer()->TraceHydrogen(name(), graph_); 13495 isolate()->GetHTracer()->TraceHydrogen(name(), graph_);
13498 } 13496 }
13499 13497
13500 #ifdef DEBUG 13498 #ifdef DEBUG
13501 graph_->Verify(false); // No full verify. 13499 graph_->Verify(false); // No full verify.
13502 #endif 13500 #endif
13503 } 13501 }
13504 13502
13505 } } // namespace v8::internal 13503 } } // namespace v8::internal
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698