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

Side by Side Diff: src/type-info.cc

Issue 1083933002: Pass load ic state through the Oracle. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Adjust defaults. 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/type-info.h ('k') | src/typing.cc » ('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 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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/v8.h" 5 #include "src/v8.h"
6 6
7 #include "src/ast.h" 7 #include "src/ast.h"
8 #include "src/code-stubs.h" 8 #include "src/code-stubs.h"
9 #include "src/compiler.h" 9 #include "src/compiler.h"
10 #include "src/ic/ic.h" 10 #include "src/ic/ic.h"
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
83 } 83 }
84 84
85 if (obj->IsJSFunction() || obj->IsAllocationSite() || obj->IsSymbol()) { 85 if (obj->IsJSFunction() || obj->IsAllocationSite() || obj->IsSymbol()) {
86 return Handle<Object>(obj, isolate()); 86 return Handle<Object>(obj, isolate());
87 } 87 }
88 88
89 return undefined; 89 return undefined;
90 } 90 }
91 91
92 92
93 bool TypeFeedbackOracle::LoadIsUninitialized(TypeFeedbackId id) { 93 InlineCacheState TypeFeedbackOracle::LoadInlineCacheState(TypeFeedbackId id) {
94 Handle<Object> maybe_code = GetInfo(id); 94 Handle<Object> maybe_code = GetInfo(id);
95 if (maybe_code->IsCode()) { 95 if (maybe_code->IsCode()) {
96 Handle<Code> code = Handle<Code>::cast(maybe_code); 96 Handle<Code> code = Handle<Code>::cast(maybe_code);
97 return code->is_inline_cache_stub() && code->ic_state() == UNINITIALIZED; 97 if (code->is_inline_cache_stub()) return code->ic_state();
98 } 98 }
99 return false; 99
100 // If we can't find an IC, assume we've seen *something*, but we don't know
101 // what. PREMONOMORPHIC roughly encodes this meaning.
102 return PREMONOMORPHIC;
100 } 103 }
101 104
102 105
103 bool TypeFeedbackOracle::LoadIsUninitialized(FeedbackVectorICSlot slot) { 106 InlineCacheState TypeFeedbackOracle::LoadInlineCacheState(
107 FeedbackVectorICSlot slot) {
104 Code::Kind kind = feedback_vector_->GetKind(slot); 108 Code::Kind kind = feedback_vector_->GetKind(slot);
105 if (kind == Code::LOAD_IC) { 109 if (kind == Code::LOAD_IC) {
106 LoadICNexus nexus(feedback_vector_, slot); 110 LoadICNexus nexus(feedback_vector_, slot);
107 return nexus.StateFromFeedback() == UNINITIALIZED; 111 return nexus.StateFromFeedback();
108 } else if (kind == Code::KEYED_LOAD_IC) { 112 } else if (kind == Code::KEYED_LOAD_IC) {
109 KeyedLoadICNexus nexus(feedback_vector_, slot); 113 KeyedLoadICNexus nexus(feedback_vector_, slot);
110 return nexus.StateFromFeedback() == UNINITIALIZED; 114 return nexus.StateFromFeedback();
111 } else if (kind == Code::NUMBER_OF_KINDS) {
112 // Code::NUMBER_OF_KINDS indicates a slot that was never even compiled
113 // in full code.
114 return true;
115 } 115 }
116 116
117 return false; 117 // If we can't find an IC, assume we've seen *something*, but we don't know
118 // what. PREMONOMORPHIC roughly encodes this meaning.
119 return PREMONOMORPHIC;
118 } 120 }
119 121
120 122
121 bool TypeFeedbackOracle::StoreIsUninitialized(TypeFeedbackId ast_id) { 123 bool TypeFeedbackOracle::StoreIsUninitialized(TypeFeedbackId ast_id) {
122 Handle<Object> maybe_code = GetInfo(ast_id); 124 Handle<Object> maybe_code = GetInfo(ast_id);
123 if (!maybe_code->IsCode()) return false; 125 if (!maybe_code->IsCode()) return false;
124 Handle<Code> code = Handle<Code>::cast(maybe_code); 126 Handle<Code> code = Handle<Code>::cast(maybe_code);
125 return code->ic_state() == UNINITIALIZED; 127 return code->ic_state() == UNINITIALIZED;
126 } 128 }
127 129
(...skipping 404 matching lines...) Expand 10 before | Expand all | Expand 10 after
532 UnseededNumberDictionary::kNotFound); 534 UnseededNumberDictionary::kNotFound);
533 // Dictionary has been allocated with sufficient size for all elements. 535 // Dictionary has been allocated with sufficient size for all elements.
534 DisallowHeapAllocation no_need_to_resize_dictionary; 536 DisallowHeapAllocation no_need_to_resize_dictionary;
535 HandleScope scope(isolate()); 537 HandleScope scope(isolate());
536 USE(UnseededNumberDictionary::AtNumberPut( 538 USE(UnseededNumberDictionary::AtNumberPut(
537 dictionary_, IdToKey(ast_id), handle(target, isolate()))); 539 dictionary_, IdToKey(ast_id), handle(target, isolate())));
538 } 540 }
539 541
540 542
541 } } // namespace v8::internal 543 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/type-info.h ('k') | src/typing.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698