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

Unified Diff: src/type-feedback-vector.cc

Issue 683883002: Revert "Introduce FeedbackNexus for vector-based ics." (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 2 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/type-feedback-vector.h ('k') | test/cctest/test-feedback-vector.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/type-feedback-vector.cc
diff --git a/src/type-feedback-vector.cc b/src/type-feedback-vector.cc
index 676290c83d021fff88102a40c4d65c478fb56c31..c0078c5001653cdf1eb41592b498b6f884af06c8 100644
--- a/src/type-feedback-vector.cc
+++ b/src/type-feedback-vector.cc
@@ -4,7 +4,6 @@
#include "src/v8.h"
-#include "src/ic/ic.h"
#include "src/ic/ic-state.h"
#include "src/objects.h"
#include "src/type-feedback-vector-inl.h"
@@ -152,142 +151,9 @@ void TypeFeedbackVector::ClearSlots(SharedFunctionInfo* shared) {
FeedbackVectorICSlot slot(i);
Object* obj = Get(slot);
if (obj != uninitialized_sentinel) {
- // TODO(mvstanton): To make this code work with --vector-ics,
- // additional Nexus types must be created.
- DCHECK(!FLAG_vector_ics);
- DCHECK(GetKind(slot) == Code::CALL_IC);
- CallICNexus nexus(this, slot);
- ICUtility::Clear(isolate, Code::CALL_IC, host, &nexus);
+ ICUtility::Clear(isolate, Code::CALL_IC, host, this, slot);
}
}
}
-
-
-Handle<FixedArray> FeedbackNexus::EnsureArrayOfSize(int length) {
- Isolate* isolate = GetIsolate();
- Handle<Object> feedback = handle(GetFeedback(), isolate);
- if (!feedback->IsFixedArray() ||
- FixedArray::cast(*feedback)->length() != length) {
- Handle<FixedArray> array = isolate->factory()->NewFixedArray(length);
- SetFeedback(*array);
- return array;
- }
- return Handle<FixedArray>::cast(feedback);
-}
-
-
-void FeedbackNexus::InstallHandlers(int start_index, TypeHandleList* types,
- CodeHandleList* handlers) {
- Isolate* isolate = GetIsolate();
- FixedArray* array = FixedArray::cast(GetFeedback());
- int receiver_count = types->length();
- for (int current = 0; current < receiver_count; ++current) {
- Handle<HeapType> type = types->at(current);
- Handle<Map> map = IC::TypeToMap(*type, isolate);
- array->set(start_index + (current * 2), *map);
- array->set(start_index + (current * 2 + 1), *handlers->at(current));
- }
-}
-
-
-InlineCacheState CallICNexus::StateFromFeedback() const {
- Isolate* isolate = GetIsolate();
- InlineCacheState state = UNINITIALIZED;
- Object* feedback = GetFeedback();
-
- if (feedback == *vector()->MegamorphicSentinel(isolate)) {
- state = GENERIC;
- } else if (feedback->IsAllocationSite() || feedback->IsJSFunction()) {
- state = MONOMORPHIC;
- } else {
- CHECK(feedback == *vector()->UninitializedSentinel(isolate));
- }
-
- return state;
-}
-
-
-void CallICNexus::ConfigureGeneric() {
- SetFeedback(*vector()->MegamorphicSentinel(GetIsolate()), SKIP_WRITE_BARRIER);
-}
-
-
-void CallICNexus::ConfigureMonomorphicArray() {
- Object* feedback = GetFeedback();
- if (!feedback->IsAllocationSite()) {
- Handle<AllocationSite> new_site =
- GetIsolate()->factory()->NewAllocationSite();
- SetFeedback(*new_site);
- }
-}
-
-
-void CallICNexus::ConfigureUninitialized() {
- SetFeedback(*vector()->UninitializedSentinel(GetIsolate()),
- SKIP_WRITE_BARRIER);
-}
-
-
-void CallICNexus::ConfigureMonomorphic(Handle<JSFunction> function) {
- SetFeedback(*function);
-}
-
-
-int FeedbackNexus::ExtractMaps(int start_index, MapHandleList* maps) const {
- Isolate* isolate = GetIsolate();
- Object* feedback = GetFeedback();
- if (feedback->IsFixedArray()) {
- FixedArray* array = FixedArray::cast(feedback);
- // The array should be of the form [<optional name>], then
- // [map, handler, map, handler, ... ]
- DCHECK(array->length() >= (2 + start_index));
- for (int i = start_index; i < array->length(); i += 2) {
- Map* map = Map::cast(array->get(i));
- maps->Add(handle(map, isolate));
- }
- return (array->length() - start_index) / 2;
- }
-
- return 0;
-}
-
-
-MaybeHandle<Code> FeedbackNexus::FindHandlerForMap(int start_index,
- Handle<Map> map) const {
- Object* feedback = GetFeedback();
- if (feedback->IsFixedArray()) {
- FixedArray* array = FixedArray::cast(feedback);
- for (int i = start_index; i < array->length(); i += 2) {
- Map* array_map = Map::cast(array->get(i));
- if (array_map == *map) {
- Code* code = Code::cast(array->get(i + 1));
- DCHECK(code->kind() == Code::HANDLER);
- return handle(code);
- }
- }
- }
-
- return MaybeHandle<Code>();
-}
-
-
-bool FeedbackNexus::FindHandlers(int start_index, CodeHandleList* code_list,
- int length) const {
- Object* feedback = GetFeedback();
- int count = 0;
- if (feedback->IsFixedArray()) {
- FixedArray* array = FixedArray::cast(feedback);
- // The array should be of the form [<optional name>], then
- // [map, handler, map, handler, ... ]
- DCHECK(array->length() >= (2 + start_index));
- for (int i = start_index; i < array->length(); i += 2) {
- Code* code = Code::cast(array->get(i + 1));
- DCHECK(code->kind() == Code::HANDLER);
- code_list->Add(handle(code));
- count++;
- }
- }
- return count == length;
-}
}
} // namespace v8::internal
« no previous file with comments | « src/type-feedback-vector.h ('k') | test/cctest/test-feedback-vector.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698