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

Side by Side Diff: src/hydrogen.cc

Issue 1129853002: Removing FLAG_vector_ics. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Comment response. Created 5 years, 7 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/heap/heap.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 5473 matching lines...) Expand 10 before | Expand all | Expand 10 after
5484 return ast_context()->ReturnInstruction(instr, expr->id()); 5484 return ast_context()->ReturnInstruction(instr, expr->id());
5485 } 5485 }
5486 } else { 5486 } else {
5487 HValue* global_object = Add<HLoadNamedField>( 5487 HValue* global_object = Add<HLoadNamedField>(
5488 context(), nullptr, 5488 context(), nullptr,
5489 HObjectAccess::ForContextSlot(Context::GLOBAL_OBJECT_INDEX)); 5489 HObjectAccess::ForContextSlot(Context::GLOBAL_OBJECT_INDEX));
5490 HLoadGlobalGeneric* instr = 5490 HLoadGlobalGeneric* instr =
5491 New<HLoadGlobalGeneric>(global_object, 5491 New<HLoadGlobalGeneric>(global_object,
5492 variable->name(), 5492 variable->name(),
5493 ast_context()->is_for_typeof()); 5493 ast_context()->is_for_typeof());
5494 if (FLAG_vector_ics) { 5494 instr->SetVectorAndSlot(handle(current_feedback_vector(), isolate()),
5495 instr->SetVectorAndSlot(handle(current_feedback_vector(), isolate()), 5495 expr->VariableFeedbackSlot());
5496 expr->VariableFeedbackSlot());
5497 }
5498 return ast_context()->ReturnInstruction(instr, expr->id()); 5496 return ast_context()->ReturnInstruction(instr, expr->id());
5499 } 5497 }
5500 } 5498 }
5501 5499
5502 case Variable::PARAMETER: 5500 case Variable::PARAMETER:
5503 case Variable::LOCAL: { 5501 case Variable::LOCAL: {
5504 HValue* value = LookupAndMakeLive(variable); 5502 HValue* value = LookupAndMakeLive(variable);
5505 if (value == graph()->GetConstantHole()) { 5503 if (value == graph()->GetConstantHole()) {
5506 DCHECK(IsDeclaredVariableMode(variable->mode()) && 5504 DCHECK(IsDeclaredVariableMode(variable->mode()) &&
5507 variable->mode() != VAR); 5505 variable->mode() != VAR);
(...skipping 1503 matching lines...) Expand 10 before | Expand all | Expand 10 after
7011 7009
7012 HInstruction* HOptimizedGraphBuilder::BuildNamedGeneric( 7010 HInstruction* HOptimizedGraphBuilder::BuildNamedGeneric(
7013 PropertyAccessType access_type, Expression* expr, HValue* object, 7011 PropertyAccessType access_type, Expression* expr, HValue* object,
7014 Handle<String> name, HValue* value, bool is_uninitialized) { 7012 Handle<String> name, HValue* value, bool is_uninitialized) {
7015 if (is_uninitialized) { 7013 if (is_uninitialized) {
7016 Add<HDeoptimize>( 7014 Add<HDeoptimize>(
7017 Deoptimizer::kInsufficientTypeFeedbackForGenericNamedAccess, 7015 Deoptimizer::kInsufficientTypeFeedbackForGenericNamedAccess,
7018 Deoptimizer::SOFT); 7016 Deoptimizer::SOFT);
7019 } 7017 }
7020 if (access_type == LOAD) { 7018 if (access_type == LOAD) {
7021 if (FLAG_vector_ics) { 7019 Handle<TypeFeedbackVector> vector =
7022 Handle<TypeFeedbackVector> vector = 7020 handle(current_feedback_vector(), isolate());
7023 handle(current_feedback_vector(), isolate()); 7021 FeedbackVectorICSlot slot = expr->AsProperty()->PropertyFeedbackSlot();
7024 FeedbackVectorICSlot slot = expr->AsProperty()->PropertyFeedbackSlot();
7025 7022
7026 if (!expr->AsProperty()->key()->IsPropertyName()) { 7023 if (!expr->AsProperty()->key()->IsPropertyName()) {
7027 // It's possible that a keyed load of a constant string was converted 7024 // It's possible that a keyed load of a constant string was converted
7028 // to a named load. Here, at the last minute, we need to make sure to 7025 // to a named load. Here, at the last minute, we need to make sure to
7029 // use a generic Keyed Load if we are using the type vector, because 7026 // use a generic Keyed Load if we are using the type vector, because
7030 // it has to share information with full code. 7027 // it has to share information with full code.
7031 HConstant* key = Add<HConstant>(name); 7028 HConstant* key = Add<HConstant>(name);
7032 HLoadKeyedGeneric* result = 7029 HLoadKeyedGeneric* result =
7033 New<HLoadKeyedGeneric>(object, key, PREMONOMORPHIC); 7030 New<HLoadKeyedGeneric>(object, key, PREMONOMORPHIC);
7034 result->SetVectorAndSlot(vector, slot);
7035 return result;
7036 }
7037
7038 HLoadNamedGeneric* result =
7039 New<HLoadNamedGeneric>(object, name, PREMONOMORPHIC);
7040 result->SetVectorAndSlot(vector, slot); 7031 result->SetVectorAndSlot(vector, slot);
7041 return result; 7032 return result;
7042 } 7033 }
7043 return New<HLoadNamedGeneric>(object, name, PREMONOMORPHIC); 7034
7035 HLoadNamedGeneric* result =
7036 New<HLoadNamedGeneric>(object, name, PREMONOMORPHIC);
7037 result->SetVectorAndSlot(vector, slot);
7038 return result;
7044 } else { 7039 } else {
7045 return New<HStoreNamedGeneric>(object, name, value, 7040 return New<HStoreNamedGeneric>(object, name, value,
7046 function_language_mode(), PREMONOMORPHIC); 7041 function_language_mode(), PREMONOMORPHIC);
7047 } 7042 }
7048 } 7043 }
7049 7044
7050 7045
7051 7046
7052 HInstruction* HOptimizedGraphBuilder::BuildKeyedGeneric( 7047 HInstruction* HOptimizedGraphBuilder::BuildKeyedGeneric(
7053 PropertyAccessType access_type, 7048 PropertyAccessType access_type,
7054 Expression* expr, 7049 Expression* expr,
7055 HValue* object, 7050 HValue* object,
7056 HValue* key, 7051 HValue* key,
7057 HValue* value) { 7052 HValue* value) {
7058 if (access_type == LOAD) { 7053 if (access_type == LOAD) {
7059 InlineCacheState initial_state = 7054 InlineCacheState initial_state = expr->AsProperty()->GetInlineCacheState();
7060 FLAG_vector_ics ? expr->AsProperty()->GetInlineCacheState()
7061 : PREMONOMORPHIC;
7062 HLoadKeyedGeneric* result = 7055 HLoadKeyedGeneric* result =
7063 New<HLoadKeyedGeneric>(object, key, initial_state); 7056 New<HLoadKeyedGeneric>(object, key, initial_state);
7064 // HLoadKeyedGeneric with vector ics benefits from being encoded as 7057 // HLoadKeyedGeneric with vector ics benefits from being encoded as
7065 // MEGAMORPHIC because the vector/slot combo becomes unnecessary. 7058 // MEGAMORPHIC because the vector/slot combo becomes unnecessary.
7066 if (FLAG_vector_ics && initial_state != MEGAMORPHIC) { 7059 if (initial_state != MEGAMORPHIC) {
7067 // We need to pass vector information. 7060 // We need to pass vector information.
7068 Handle<TypeFeedbackVector> vector = 7061 Handle<TypeFeedbackVector> vector =
7069 handle(current_feedback_vector(), isolate()); 7062 handle(current_feedback_vector(), isolate());
7070 FeedbackVectorICSlot slot = expr->AsProperty()->PropertyFeedbackSlot(); 7063 FeedbackVectorICSlot slot = expr->AsProperty()->PropertyFeedbackSlot();
7071 result->SetVectorAndSlot(vector, slot); 7064 result->SetVectorAndSlot(vector, slot);
7072 } 7065 }
7073 return result; 7066 return result;
7074 } else { 7067 } else {
7075 return New<HStoreKeyedGeneric>(object, key, value, function_language_mode(), 7068 return New<HStoreKeyedGeneric>(object, key, value, function_language_mode(),
7076 PREMONOMORPHIC); 7069 PREMONOMORPHIC);
(...skipping 6056 matching lines...) Expand 10 before | Expand all | Expand 10 after
13133 if (ShouldProduceTraceOutput()) { 13126 if (ShouldProduceTraceOutput()) {
13134 isolate()->GetHTracer()->TraceHydrogen(name(), graph_); 13127 isolate()->GetHTracer()->TraceHydrogen(name(), graph_);
13135 } 13128 }
13136 13129
13137 #ifdef DEBUG 13130 #ifdef DEBUG
13138 graph_->Verify(false); // No full verify. 13131 graph_->Verify(false); // No full verify.
13139 #endif 13132 #endif
13140 } 13133 }
13141 13134
13142 } } // namespace v8::internal 13135 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/heap/heap.cc ('k') | src/hydrogen-instructions.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698