From d1478f4e4f7c001d1e2b2846bc5d27a3f20d4cd7 Mon Sep 17 00:00:00 2001 From: mvstanton Date: Wed, 25 Mar 2015 04:15:14 -0700 Subject: [PATCH] VectorICs: Address test-heap TODOS Tests for non-clearing of weak cells in LoadICs weren't running when vector ICs are enabled. R=ulan@chromium.org BUG= Review URL: https://codereview.chromium.org/1032843002 Cr-Commit-Position: refs/heads/master@{#27435} --- test/cctest/test-heap.cc | 38 ++++++++++++++++++++++++++------------ 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/test/cctest/test-heap.cc b/test/cctest/test-heap.cc index 8abe98d..a0bb845 100644 --- a/test/cctest/test-heap.cc +++ b/test/cctest/test-heap.cc @@ -4596,17 +4596,33 @@ Handle 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); } -- 2.7.4