Revision: 19412
Author: [email protected]
Date: Mon Feb 17 14:22:18 2014 UTC
Log: Revert "Add a premonomorphic state to the call target cache."
This reverts commit r19402
[email protected]
Review URL: https://codereview.chromium.org/169713002
http://code.google.com/p/v8/source/detail?r=19412
Modified:
/branches/bleeding_edge/src/a64/code-stubs-a64.cc
/branches/bleeding_edge/src/arm/code-stubs-arm.cc
/branches/bleeding_edge/src/ia32/code-stubs-ia32.cc
/branches/bleeding_edge/src/objects-inl.h
/branches/bleeding_edge/src/objects.h
/branches/bleeding_edge/src/runtime.cc
/branches/bleeding_edge/src/x64/code-stubs-x64.cc
/branches/bleeding_edge/test/cctest/test-heap.cc
/branches/bleeding_edge/test/mjsunit/allocation-site-info.js
/branches/bleeding_edge/test/mjsunit/array-constructor-feedback.js
=======================================
--- /branches/bleeding_edge/src/a64/code-stubs-a64.cc Mon Feb 17 12:08:06
2014 UTC
+++ /branches/bleeding_edge/src/a64/code-stubs-a64.cc Mon Feb 17 14:22:18
2014 UTC
@@ -3195,8 +3195,6 @@
masm->isolate()->heap()->undefined_value());
ASSERT_EQ(*TypeFeedbackInfo::UninitializedSentinel(masm->isolate()),
masm->isolate()->heap()->the_hole_value());
- ASSERT_EQ(*TypeFeedbackInfo::PremonomorphicSentinel(masm->isolate()),
- masm->isolate()->heap()->null_value());
// Load the cache state.
__ Add(x4, x2, Operand::UntagSmiAndScale(x3, kPointerSizeLog2));
@@ -3224,22 +3222,7 @@
// A monomorphic miss (i.e, here the cache is not uninitialized) goes
// megamorphic.
- Label not_uninitialized;
- __ JumpIfNotRoot(x4, Heap::kTheHoleValueRootIndex, ¬_uninitialized);
-
- // PremonomorphicSentinel is an immortal immovable object (null) so no
- // write-barrier is needed.
- __ Add(x4, x2, Operand::UntagSmiAndScale(x3, kPointerSizeLog2));
- __ LoadRoot(x10, Heap::kNullValueRootIndex);
- __ Str(x10, FieldMemOperand(x4, FixedArray::kHeaderSize));
- __ B(&done);
-
- // If the cache isn't uninitialized, it is either premonomorphic or
- // monomorphic. If it is premonomorphic, we initialize it thus making
- // it monomorphic. Otherwise, we go megamorphic.
- __ Bind(¬_uninitialized);
- __ JumpIfRoot(x4, Heap::kNullValueRootIndex, &initialize);
-
+ __ JumpIfRoot(x4, Heap::kTheHoleValueRootIndex, &initialize);
// MegamorphicSentinel is an immortal immovable object (undefined) so no
// write-barrier is needed.
__ Bind(&megamorphic);
=======================================
--- /branches/bleeding_edge/src/arm/code-stubs-arm.cc Mon Feb 17 11:59:45
2014 UTC
+++ /branches/bleeding_edge/src/arm/code-stubs-arm.cc Mon Feb 17 14:22:18
2014 UTC
@@ -3017,8 +3017,6 @@
masm->isolate()->heap()->undefined_value());
ASSERT_EQ(*TypeFeedbackInfo::UninitializedSentinel(masm->isolate()),
masm->isolate()->heap()->the_hole_value());
- ASSERT_EQ(*TypeFeedbackInfo::PremonomorphicSentinel(masm->isolate()),
- masm->isolate()->heap()->null_value());
// Load the cache state into r4.
__ add(r4, r2, Operand::PointerOffsetFromSmiKey(r3));
@@ -3045,26 +3043,10 @@
__ bind(&miss);
- // A monomorphic miss (i.e, here the cache is not uninitialized or
- // pre-monomorphic) goes megamorphic.
- Label not_uninitialized;
+ // A monomorphic miss (i.e, here the cache is not uninitialized) goes
+ // megamorphic.
__ CompareRoot(r4, Heap::kTheHoleValueRootIndex);
- __ b(ne, ¬_uninitialized);
-
- // PremonomorphicSentinel is an immortal immovable object (null) so no
- // write-barrier is needed.
- __ add(r4, r2, Operand::PointerOffsetFromSmiKey(r3));
- __ LoadRoot(ip, Heap::kNullValueRootIndex);
- __ str(ip, FieldMemOperand(r4, FixedArray::kHeaderSize));
- __ jmp(&done);
-
- // If the cache isn't uninitialized, it is either premonomorphic or
- // monomorphic. If it is premonomorphic, we initialize it thus making
- // it monomorphic. Otherwise, we go megamorphic.
- __ bind(¬_uninitialized);
- __ CompareRoot(r4, Heap::kNullValueRootIndex);
__ b(eq, &initialize);
-
// MegamorphicSentinel is an immortal immovable object (undefined) so no
// write-barrier is needed.
__ bind(&megamorphic);
=======================================
--- /branches/bleeding_edge/src/ia32/code-stubs-ia32.cc Mon Feb 17 11:59:45
2014 UTC
+++ /branches/bleeding_edge/src/ia32/code-stubs-ia32.cc Mon Feb 17 14:22:18
2014 UTC
@@ -2362,26 +2362,10 @@
__ bind(&miss);
- // A monomorphic miss (i.e, here the cache is not uninitialized or
- // pre-monomorphic) goes megamorphic.
- Label not_uninitialized;
+ // A monomorphic miss (i.e, here the cache is not uninitialized) goes
+ // megamorphic.
__ cmp(ecx, Immediate(TypeFeedbackInfo::UninitializedSentinel(isolate)));
- __ j(not_equal, ¬_uninitialized);
-
- // PremonomorphicSentinel is an immortal immovable object (null) so no
- // write-barrier is needed.
- __ mov(FieldOperand(ebx, edx, times_half_pointer_size,
- FixedArray::kHeaderSize),
- Immediate(TypeFeedbackInfo::PremonomorphicSentinel(isolate)));
- __ jmp(&done, Label::kFar);
-
- // If the cache isn't uninitialized, it is either premonomorphic or
- // monomorphic. If it is premonomorphic, we initialize it thus making
- // it monomorphic. Otherwise, we go megamorphic.
- __ bind(¬_uninitialized);
- __ cmp(ecx,
Immediate(TypeFeedbackInfo::PremonomorphicSentinel(isolate)));
__ j(equal, &initialize);
-
// MegamorphicSentinel is an immortal immovable object (undefined) so no
// write-barrier is needed.
__ bind(&megamorphic);
=======================================
--- /branches/bleeding_edge/src/objects-inl.h Mon Feb 17 13:12:56 2014 UTC
+++ /branches/bleeding_edge/src/objects-inl.h Mon Feb 17 14:22:18 2014 UTC
@@ -6535,11 +6535,6 @@
Handle<Object> TypeFeedbackInfo::UninitializedSentinel(Isolate* isolate) {
return isolate->factory()->the_hole_value();
}
-
-
-Handle<Object> TypeFeedbackInfo::PremonomorphicSentinel(Isolate* isolate) {
- return isolate->factory()->null_value();
-}
Handle<Object> TypeFeedbackInfo::MegamorphicSentinel(Isolate* isolate) {
=======================================
--- /branches/bleeding_edge/src/objects.h Mon Feb 17 13:22:34 2014 UTC
+++ /branches/bleeding_edge/src/objects.h Mon Feb 17 14:22:18 2014 UTC
@@ -8172,9 +8172,6 @@
// The object that indicates an uninitialized cache.
static inline Handle<Object> UninitializedSentinel(Isolate* isolate);
- // The object that indicates a cache in pre-monomorphic state.
- static inline Handle<Object> PremonomorphicSentinel(Isolate* isolate);
-
// The object that indicates a megamorphic state.
static inline Handle<Object> MegamorphicSentinel(Isolate* isolate);
=======================================
--- /branches/bleeding_edge/src/runtime.cc Mon Feb 17 13:12:56 2014 UTC
+++ /branches/bleeding_edge/src/runtime.cc Mon Feb 17 14:22:18 2014 UTC
@@ -14762,7 +14762,6 @@
Handle<AllocationSite> site;
if (!type_info.is_null() &&
- *type_info != isolate->heap()->null_value() &&
*type_info != isolate->heap()->undefined_value()) {
site = Handle<AllocationSite>::cast(type_info);
ASSERT(!site->SitePointsToLiteral());
=======================================
--- /branches/bleeding_edge/src/x64/code-stubs-x64.cc Mon Feb 17 11:59:45
2014 UTC
+++ /branches/bleeding_edge/src/x64/code-stubs-x64.cc Mon Feb 17 14:22:18
2014 UTC
@@ -2201,25 +2201,10 @@
__ bind(&miss);
- // A monomorphic miss (i.e, here the cache is not uninitialized or
- // pre-monomorphic) goes megamorphic.
- Label not_uninitialized;
+ // A monomorphic miss (i.e, here the cache is not uninitialized) goes
+ // megamorphic.
__ Cmp(rcx, TypeFeedbackInfo::UninitializedSentinel(isolate));
- __ j(not_equal, ¬_uninitialized);
-
- // PremonomorphicSentinel is an immortal immovable object (null) so no
- // write-barrier is needed.
- __ Move(FieldOperand(rbx, rdx, times_pointer_size,
FixedArray::kHeaderSize),
- TypeFeedbackInfo::PremonomorphicSentinel(isolate));
- __ jmp(&done);
-
- // If the cache isn't uninitialized, it is either premonomorphic or
- // monomorphic. If it is premonomorphic, we initialize it thus making
- // it monomorphic. Otherwise, we go megamorphic.
- __ bind(¬_uninitialized);
- __ Cmp(rcx, TypeFeedbackInfo::PremonomorphicSentinel(isolate));
__ j(equal, &initialize);
-
// MegamorphicSentinel is an immortal immovable object (undefined) so no
// write-barrier is needed.
__ bind(&megamorphic);
=======================================
--- /branches/bleeding_edge/test/cctest/test-heap.cc Mon Feb 17 11:59:45
2014 UTC
+++ /branches/bleeding_edge/test/cctest/test-heap.cc Mon Feb 17 14:22:18
2014 UTC
@@ -2848,9 +2848,7 @@
// originating from two different native contexts.
CcTest::global()->Set(v8_str("fun1"), fun1);
CcTest::global()->Set(v8_str("fun2"), fun2);
- CompileRun("function f(a, b) { a(); b(); }"
- "f(fun1, fun2);" // Run twice to skip premonomorphic state.
- "f(fun1, fun2)");
+ CompileRun("function f(a, b) { a(); b(); } f(fun1, fun2);");
Handle<JSFunction> f =
v8::Utils::OpenHandle(
=======================================
--- /branches/bleeding_edge/test/mjsunit/allocation-site-info.js Mon Feb 17
11:59:45 2014 UTC
+++ /branches/bleeding_edge/test/mjsunit/allocation-site-info.js Mon Feb 17
14:22:18 2014 UTC
@@ -128,7 +128,6 @@
}
// Case: [1,2,3] as allocation site
- get_standard_literal(); // Skip premonomorphic state.
obj = fastliteralcase(get_standard_literal(), 1);
assertKind(elements_kind.fast_smi_only, obj);
obj = fastliteralcase(get_standard_literal(), 1.5);
@@ -170,7 +169,6 @@
return literal;
}
- fastliteralcase_smifast(1); // Skip premonomorphic state.
obj = fastliteralcase_smifast(1);
assertKind(elements_kind.fast_smi_only, obj);
obj = fastliteralcase_smifast("carter");
@@ -185,7 +183,6 @@
return literal;
}
- fastliteralcase_smiholey(5, 1); // Skip premonomorphic state.
obj = fastliteralcase_smiholey(5, 1);
assertKind(elements_kind.fast_smi_only, obj);
assertHoley(obj);
@@ -200,7 +197,6 @@
}
// Case: new Array() as allocation site, smi->double
- newarraycase_smidouble(1); // Skip premonomorphic state.
obj = newarraycase_smidouble(1);
assertKind(elements_kind.fast_smi_only, obj);
obj = newarraycase_smidouble(1.5);
@@ -215,7 +211,6 @@
}
// Case: new Array() as allocation site, smi->fast
- newarraycase_smiobj(1); // Skip premonomorphic state.
obj = newarraycase_smiobj(1);
assertKind(elements_kind.fast_smi_only, obj);
obj = newarraycase_smiobj("gloria");
@@ -230,7 +225,6 @@
}
// Case: new Array(length) as allocation site
- newarraycase_length_smidouble(1); // Skip premonomorphic state.
obj = newarraycase_length_smidouble(1);
assertKind(elements_kind.fast_smi_only, obj);
obj = newarraycase_length_smidouble(1.5);
@@ -254,7 +248,6 @@
}
// Case: new Array(<length>) as allocation site, smi->fast
- newarraycase_length_smiobj(1); // Skip premonomorphic state.
obj = newarraycase_length_smiobj(1);
assertKind(elements_kind.fast_smi_only, obj);
obj = newarraycase_length_smiobj("gloria");
@@ -268,7 +261,6 @@
return a;
}
- newarraycase_list_smidouble(1); // Skip premonomorphic state.
obj = newarraycase_list_smidouble(1);
assertKind(elements_kind.fast_smi_only, obj);
obj = newarraycase_list_smidouble(1.5);
@@ -282,7 +274,6 @@
return a;
}
- newarraycase_list_smiobj(1); // Skip premonomorphic state.
obj = newarraycase_list_smiobj(1);
assertKind(elements_kind.fast_smi_only, obj);
obj = newarraycase_list_smiobj("coates");
@@ -302,7 +293,6 @@
return a;
}
- foo(0); foo(1); // Skip premonomorphic state.
for (i = 0; i < 2; i++) {
a = foo(i);
b = foo(i);
@@ -323,7 +313,6 @@
return a;
}
- newarraycase_onearg(5, 3.5); // Skip premonomorphic state.
obj = newarraycase_onearg(5, 3.5);
assertKind(elements_kind.fast_double, obj);
obj = newarraycase_onearg(10, 5);
@@ -399,7 +388,6 @@
return literal;
}
- get_nested_literal(); // Skip premonomorphic state.
obj = get_nested_literal();
assertKind(elements_kind.fast, obj);
obj[0][0] = 3.5;
@@ -415,7 +403,6 @@
return literal;
}
- get_deep_nested_literal(); // Skip premonomorphic state.
obj = get_deep_nested_literal();
assertKind(elements_kind.fast_smi_only, obj[1][0]);
obj[0][0] = 3.5;
@@ -441,7 +428,6 @@
return literal;
}
- get_object_literal(); // Skip premonomorphic state.
obj = get_object_literal();
assertKind(elements_kind.fast_smi_only, obj.array);
obj.array[1] = 3.5;
@@ -457,7 +443,6 @@
return literal;
}
- get_nested_object_literal(); // Skip premonomorphic state.
obj = get_nested_object_literal();
assertKind(elements_kind.fast, obj.array);
assertKind(elements_kind.fast_smi_only, obj.array[1]);
@@ -477,7 +462,6 @@
return literal;
}
- get_nested_literal(); // Skip premonomorphic state.
obj = get_nested_literal();
assertKind(elements_kind.fast, obj);
obj[0][0] = 3.5;
@@ -493,7 +477,6 @@
return literal;
}
- get_deep_nested_literal(); // Skip premonomorphic state.
obj = get_deep_nested_literal();
assertKind(elements_kind.fast_smi_only, obj[1][0]);
obj[0][0] = 3.5;
=======================================
--- /branches/bleeding_edge/test/mjsunit/array-constructor-feedback.js Mon
Feb 17 11:59:45 2014 UTC
+++ /branches/bleeding_edge/test/mjsunit/array-constructor-feedback.js Mon
Feb 17 14:22:18 2014 UTC
@@ -89,7 +89,6 @@
return new t(len);
}
- bar(Array, 10); // Skip premonomorphic state.
a = bar(Array, 10);
a[0] = 3.5;
b = bar(Array, 1);
@@ -109,8 +108,6 @@
function bar0(t) {
return new t();
}
-
- bar0(Array); // Skip premonomorphic state.
a = bar0(Array);
a[0] = 3.5;
b = bar0(Array);
@@ -142,8 +139,6 @@
function bar(len) {
return new Array(len);
}
-
- bar(10); // Skip premonomorphic state.
a = bar(10);
a[0] = "a string";
a = bar(10);
@@ -195,8 +190,6 @@
function bar() {
return new Array();
}
-
- bar(); // Skip premonomorphic state.
a = bar();
bar();
%OptimizeFunctionOnNextCall(bar);
--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
---
You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.