Index: test/mjsunit/array-feedback.js |
diff --git a/test/mjsunit/array-feedback.js b/test/mjsunit/array-feedback.js |
index cb91995230215f291c96437886c4d182969d084e..4129be1f880cb7974ec15d784707b1e2412fea0f 100644 |
--- a/test/mjsunit/array-feedback.js |
+++ b/test/mjsunit/array-feedback.js |
@@ -85,69 +85,69 @@ if (support_smi_only_arrays) { |
// Verify that basic elements kind feedback works for non-constructor |
// array calls (as long as the call is made through an IC, and not |
// a CallStub). |
- (function (){ |
- function create0() { |
- return Array(); |
- } |
- |
- // Calls through ICs need warm up through uninitialized, then |
- // premonomorphic first. |
- create0(); |
- a = create0(); |
- assertKind(elements_kind.fast_smi_only, a); |
- a[0] = 3.5; |
- b = create0(); |
- assertKind(elements_kind.fast_double, b); |
- |
- function create1(arg) { |
- return Array(arg); |
- } |
- |
- create1(0); |
- create1(0); |
- a = create1(0); |
- assertFalse(isHoley(a)); |
- assertKind(elements_kind.fast_smi_only, a); |
- a[0] = "hello"; |
- b = create1(10); |
- assertTrue(isHoley(b)); |
- assertKind(elements_kind.fast, b); |
- |
- a = create1(100000); |
- assertKind(elements_kind.dictionary, a); |
- |
- function create3(arg1, arg2, arg3) { |
- return Array(arg1, arg2, arg3); |
- } |
- |
- create3(1,2,3); |
- create3(1,2,3); |
- a = create3(1,2,3); |
- a[0] = 3.035; |
- assertKind(elements_kind.fast_double, a); |
- b = create3(1,2,3); |
- assertKind(elements_kind.fast_double, b); |
- assertFalse(isHoley(b)); |
- })(); |
+ // (function (){ |
+ // function create0() { |
+ // return Array(); |
+ // } |
+ |
+ // // Calls through ICs need warm up through uninitialized, then |
+ // // premonomorphic first. |
+ // create0(); |
+ // create0(); |
+ // a = create0(); |
+ // assertKind(elements_kind.fast_smi_only, a); |
+ // a[0] = 3.5; |
+ // b = create0(); |
+ // assertKind(elements_kind.fast_double, b); |
+ |
+ // function create1(arg) { |
+ // return Array(arg); |
+ // } |
+ |
+ // create1(0); |
+ // create1(0); |
+ // a = create1(0); |
+ // assertFalse(isHoley(a)); |
+ // assertKind(elements_kind.fast_smi_only, a); |
+ // a[0] = "hello"; |
+ // b = create1(10); |
+ // assertTrue(isHoley(b)); |
+ // assertKind(elements_kind.fast, b); |
+ |
+ // a = create1(100000); |
+ // assertKind(elements_kind.dictionary, a); |
+ |
+ // function create3(arg1, arg2, arg3) { |
+ // return Array(arg1, arg2, arg3); |
+ // } |
+ |
+ // create3(); |
+ // create3(); |
+ // a = create3(1,2,3); |
+ // a[0] = 3.5; |
+ // b = create3(1,2,3); |
+ // assertKind(elements_kind.fast_double, b); |
+ // assertFalse(isHoley(b)); |
+ // })(); |
// Verify that keyed calls work |
- (function (){ |
- function create0(name) { |
- return this[name](); |
- } |
- |
- name = "Array"; |
- create0(name); |
- create0(name); |
- a = create0(name); |
- a[0] = 3.5; |
- b = create0(name); |
- assertKind(elements_kind.fast_double, b); |
- })(); |
- |
- |
- // Verify that crankshaft consumes type feedback. |
+ // (function (){ |
+ // function create0(name) { |
+ // return this[name](); |
+ // } |
+ |
+ // name = "Array"; |
+ // create0(name); |
+ // create0(name); |
+ // a = create0(name); |
+ // a[0] = 3.5; |
+ // b = create0(name); |
+ // assertKind(elements_kind.fast_double, b); |
+ // })(); |
+ |
+ |
+ // Verify that the IC can't be spoofed by patching |
(function (){ |
function create0() { |
return Array(); |
@@ -156,40 +156,41 @@ if (support_smi_only_arrays) { |
create0(); |
create0(); |
a = create0(); |
- a[0] = 3.5; |
- %OptimizeFunctionOnNextCall(create0); |
- create0(); |
- create0(); |
+ assertKind(elements_kind.fast_smi_only, a); |
+ var oldArray = this.Array; |
+ this.Array = function() { return ["hi"]; }; |
b = create0(); |
- assertKind(elements_kind.fast_double, b); |
- assertOptimized(create0); |
- |
- function create1(arg) { |
- return Array(arg); |
- } |
+ assertEquals(["hi"], b); |
+ this.Array = oldArray; |
+ })(); |
- create1(8); |
- create1(8); |
- a = create1(8); |
- a[0] = 3.5; |
- %OptimizeFunctionOnNextCall(create1); |
- b = create1(8); |
- assertKind(elements_kind.fast_double, b); |
- assertOptimized(create1); |
- |
- function createN(arg1, arg2, arg3) { |
- return Array(arg1, arg2, arg3); |
- } |
+ // Verify that calls are still made through an IC after crankshaft, |
+ // though the type information is reset. |
+ // TODO(mvstanton): instead, consume the type feedback gathered up |
+ // until crankshaft time. |
+ // (function (){ |
+ // function create0() { |
+ // return Array(); |
+ // } |
+ |
+ // create0(); |
+ // create0(); |
+ // a = create0(); |
+ // a[0] = 3.5; |
+ // %OptimizeFunctionOnNextCall(create0); |
+ // create0(); |
+ // // This test only makes sense if crankshaft is allowed |
+ // if (4 != %GetOptimizationStatus(create0)) { |
+ // create0(); |
+ // b = create0(); |
+ // assertKind(elements_kind.fast_smi_only, b); |
+ // b[0] = 3.5; |
+ // c = create0(); |
+ // assertKind(elements_kind.fast_double, c); |
+ // assertOptimized(create0); |
+ // } |
+ // })(); |
- createN(1, 2, 3); |
- createN(1, 2, 3); |
- a = createN(1, 2, 3); |
- a[0] = 3.5; |
- %OptimizeFunctionOnNextCall(createN); |
- b = createN(1, 2, 3); |
- assertKind(elements_kind.fast_double, b); |
- assertOptimized(createN); |
- })(); |
// Verify that cross context calls work |
(function (){ |