Index: test/cctest/test-feedback-vector.cc |
diff --git a/test/cctest/test-feedback-vector.cc b/test/cctest/test-feedback-vector.cc |
index 927fcdb05d06f1eeebc70d965251acdfc3b06418..c52896da94a3867db93b066f2c17961ce4448f88 100644 |
--- a/test/cctest/test-feedback-vector.cc |
+++ b/test/cctest/test-feedback-vector.cc |
@@ -486,15 +486,16 @@ TEST(ReferenceContextAllocatesNoSlots) { |
handle(f->feedback_vector(), isolate); |
FeedbackVectorHelper helper(feedback_vector); |
CHECK_EQ(4, helper.slot_count()); |
- CHECK_SLOT_KIND(helper, 0, FeedbackVectorSlotKind::STORE_IC); |
+ CHECK_SLOT_KIND(helper, 0, FeedbackVectorSlotKind::STORE_SLOPPY_IC); |
CHECK_SLOT_KIND(helper, 1, FeedbackVectorSlotKind::LOAD_GLOBAL_IC); |
- CHECK_SLOT_KIND(helper, 2, FeedbackVectorSlotKind::STORE_IC); |
+ CHECK_SLOT_KIND(helper, 2, FeedbackVectorSlotKind::STORE_SLOPPY_IC); |
CHECK_SLOT_KIND(helper, 3, FeedbackVectorSlotKind::LOAD_GLOBAL_IC); |
} |
{ |
CompileRun( |
"function testprop(x) {" |
+ " 'use strict';" |
" x.blue = a;" |
"}" |
"testprop({ blue: 3 });"); |
@@ -506,7 +507,7 @@ TEST(ReferenceContextAllocatesNoSlots) { |
FeedbackVectorHelper helper(feedback_vector); |
CHECK_EQ(2, helper.slot_count()); |
CHECK_SLOT_KIND(helper, 0, FeedbackVectorSlotKind::LOAD_GLOBAL_IC); |
- CHECK_SLOT_KIND(helper, 1, FeedbackVectorSlotKind::STORE_IC); |
+ CHECK_SLOT_KIND(helper, 1, FeedbackVectorSlotKind::STORE_STRICT_IC); |
} |
{ |
@@ -527,7 +528,7 @@ TEST(ReferenceContextAllocatesNoSlots) { |
CHECK_EQ(5, helper.slot_count()); |
CHECK_SLOT_KIND(helper, 0, FeedbackVectorSlotKind::CALL_IC); |
CHECK_SLOT_KIND(helper, 1, FeedbackVectorSlotKind::LOAD_GLOBAL_IC); |
- CHECK_SLOT_KIND(helper, 2, FeedbackVectorSlotKind::STORE_IC); |
+ CHECK_SLOT_KIND(helper, 2, FeedbackVectorSlotKind::STORE_SLOPPY_IC); |
CHECK_SLOT_KIND(helper, 3, FeedbackVectorSlotKind::CALL_IC); |
CHECK_SLOT_KIND(helper, 4, FeedbackVectorSlotKind::LOAD_IC); |
} |
@@ -548,13 +549,35 @@ TEST(ReferenceContextAllocatesNoSlots) { |
FeedbackVectorHelper helper(feedback_vector); |
CHECK_EQ(3, helper.slot_count()); |
CHECK_SLOT_KIND(helper, 0, FeedbackVectorSlotKind::LOAD_GLOBAL_IC); |
- CHECK_SLOT_KIND(helper, 1, FeedbackVectorSlotKind::KEYED_STORE_IC); |
+ CHECK_SLOT_KIND(helper, 1, FeedbackVectorSlotKind::KEYED_STORE_SLOPPY_IC); |
+ CHECK_SLOT_KIND(helper, 2, FeedbackVectorSlotKind::KEYED_LOAD_IC); |
+ } |
+ |
+ { |
+ CompileRun( |
+ "function testkeyedprop(x) {" |
+ " 'use strict';" |
+ " x[0] = a;" |
+ " return x[0];" |
+ "}" |
+ "testkeyedprop([0, 1, 2]);"); |
+ |
+ Handle<JSFunction> f = GetFunction("testkeyedprop"); |
+ |
+ // There should be 1 LOAD_GLOBAL_ICs for the load of a, and one |
+ // KEYED_LOAD_IC for the load of x[0] in the return statement. |
+ Handle<TypeFeedbackVector> feedback_vector(f->feedback_vector()); |
+ FeedbackVectorHelper helper(feedback_vector); |
+ CHECK_EQ(3, helper.slot_count()); |
+ CHECK_SLOT_KIND(helper, 0, FeedbackVectorSlotKind::LOAD_GLOBAL_IC); |
+ CHECK_SLOT_KIND(helper, 1, FeedbackVectorSlotKind::KEYED_STORE_STRICT_IC); |
CHECK_SLOT_KIND(helper, 2, FeedbackVectorSlotKind::KEYED_LOAD_IC); |
} |
{ |
CompileRun( |
"function testcompound(x) {" |
+ " 'use strict';" |
" x.old = x.young = x.in_between = a;" |
" return x.old + x.young;" |
"}" |
@@ -568,9 +591,9 @@ TEST(ReferenceContextAllocatesNoSlots) { |
FeedbackVectorHelper helper(feedback_vector); |
CHECK_EQ(7, helper.slot_count()); |
CHECK_SLOT_KIND(helper, 0, FeedbackVectorSlotKind::LOAD_GLOBAL_IC); |
- CHECK_SLOT_KIND(helper, 1, FeedbackVectorSlotKind::STORE_IC); |
- CHECK_SLOT_KIND(helper, 2, FeedbackVectorSlotKind::STORE_IC); |
- CHECK_SLOT_KIND(helper, 3, FeedbackVectorSlotKind::STORE_IC); |
+ CHECK_SLOT_KIND(helper, 1, FeedbackVectorSlotKind::STORE_STRICT_IC); |
+ CHECK_SLOT_KIND(helper, 2, FeedbackVectorSlotKind::STORE_STRICT_IC); |
+ CHECK_SLOT_KIND(helper, 3, FeedbackVectorSlotKind::STORE_STRICT_IC); |
CHECK_SLOT_KIND(helper, 4, FeedbackVectorSlotKind::LOAD_IC); |
CHECK_SLOT_KIND(helper, 5, FeedbackVectorSlotKind::LOAD_IC); |
CHECK_SLOT_KIND(helper, 6, FeedbackVectorSlotKind::INTERPRETER_BINARYOP_IC); |