| Index: test/cctest/test-heap.cc
|
| diff --git a/test/cctest/test-heap.cc b/test/cctest/test-heap.cc
|
| index 8abe98dc563f5958da73bc9142a39245a3b39c72..a0bb8450972132150800bd5e132aadbdd83bb907 100644
|
| --- a/test/cctest/test-heap.cc
|
| +++ b/test/cctest/test-heap.cc
|
| @@ -4596,17 +4596,33 @@ Handle<JSFunction> GetFunctionByName(Isolate* isolate, const char* name) {
|
| }
|
|
|
|
|
| -void CheckIC(Code* code, Code::Kind kind, InlineCacheState state) {
|
| - Code* ic = FindFirstIC(code, kind);
|
| - CHECK(ic->is_inline_cache_stub());
|
| - CHECK(ic->ic_state() == state);
|
| +void CheckIC(Code* code, Code::Kind kind, SharedFunctionInfo* shared,
|
| + int ic_slot, InlineCacheState state) {
|
| + if (FLAG_vector_ics &&
|
| + (kind == Code::LOAD_IC || kind == Code::KEYED_LOAD_IC ||
|
| + kind == Code::CALL_IC)) {
|
| + TypeFeedbackVector* vector = shared->feedback_vector();
|
| + FeedbackVectorICSlot slot(ic_slot);
|
| + if (kind == Code::LOAD_IC) {
|
| + LoadICNexus nexus(vector, slot);
|
| + CHECK_EQ(nexus.StateFromFeedback(), state);
|
| + } else if (kind == Code::KEYED_LOAD_IC) {
|
| + KeyedLoadICNexus nexus(vector, slot);
|
| + CHECK_EQ(nexus.StateFromFeedback(), state);
|
| + } else if (kind == Code::CALL_IC) {
|
| + CallICNexus nexus(vector, slot);
|
| + CHECK_EQ(nexus.StateFromFeedback(), state);
|
| + }
|
| + } else {
|
| + Code* ic = FindFirstIC(code, kind);
|
| + CHECK(ic->is_inline_cache_stub());
|
| + CHECK(ic->ic_state() == state);
|
| + }
|
| }
|
|
|
|
|
| TEST(MonomorphicStaysMonomorphicAfterGC) {
|
| if (FLAG_always_opt) return;
|
| - // TODO(mvstanton): vector ics need weak support!
|
| - if (FLAG_vector_ics) return;
|
| CcTest::InitializeVM();
|
| Isolate* isolate = CcTest::i_isolate();
|
| Heap* heap = isolate->heap();
|
| @@ -4629,19 +4645,17 @@ TEST(MonomorphicStaysMonomorphicAfterGC) {
|
| CompileRun("(testIC())");
|
| }
|
| heap->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask);
|
| - CheckIC(loadIC->code(), Code::LOAD_IC, MONOMORPHIC);
|
| + CheckIC(loadIC->code(), Code::LOAD_IC, loadIC->shared(), 0, MONOMORPHIC);
|
| {
|
| v8::HandleScope scope(CcTest::isolate());
|
| CompileRun("(testIC())");
|
| }
|
| - CheckIC(loadIC->code(), Code::LOAD_IC, MONOMORPHIC);
|
| + CheckIC(loadIC->code(), Code::LOAD_IC, loadIC->shared(), 0, MONOMORPHIC);
|
| }
|
|
|
|
|
| TEST(PolymorphicStaysPolymorphicAfterGC) {
|
| if (FLAG_always_opt) return;
|
| - // TODO(mvstanton): vector ics need weak support!
|
| - if (FLAG_vector_ics) return;
|
| CcTest::InitializeVM();
|
| Isolate* isolate = CcTest::i_isolate();
|
| Heap* heap = isolate->heap();
|
| @@ -4667,12 +4681,12 @@ TEST(PolymorphicStaysPolymorphicAfterGC) {
|
| CompileRun("(testIC())");
|
| }
|
| heap->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask);
|
| - CheckIC(loadIC->code(), Code::LOAD_IC, POLYMORPHIC);
|
| + CheckIC(loadIC->code(), Code::LOAD_IC, loadIC->shared(), 0, POLYMORPHIC);
|
| {
|
| v8::HandleScope scope(CcTest::isolate());
|
| CompileRun("(testIC())");
|
| }
|
| - CheckIC(loadIC->code(), Code::LOAD_IC, POLYMORPHIC);
|
| + CheckIC(loadIC->code(), Code::LOAD_IC, loadIC->shared(), 0, POLYMORPHIC);
|
| }
|
|
|
|
|
|
|