| Index: test/mjsunit/array-feedback.js
|
| diff --git a/test/mjsunit/array-feedback.js b/test/mjsunit/array-feedback.js
|
| index 4129be1f880cb7974ec15d784707b1e2412fea0f..cb91995230215f291c96437886c4d182969d084e 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();
|
| - // 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));
|
| - // })();
|
| + (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));
|
| + })();
|
|
|
|
|
| // 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 the IC can't be spoofed by patching
|
| + (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() {
|
| return Array();
|
| @@ -156,41 +156,40 @@ if (support_smi_only_arrays) {
|
| create0();
|
| create0();
|
| a = create0();
|
| - assertKind(elements_kind.fast_smi_only, a);
|
| - var oldArray = this.Array;
|
| - this.Array = function() { return ["hi"]; };
|
| + a[0] = 3.5;
|
| + %OptimizeFunctionOnNextCall(create0);
|
| + create0();
|
| + create0();
|
| b = create0();
|
| - assertEquals(["hi"], b);
|
| - this.Array = oldArray;
|
| - })();
|
| + assertKind(elements_kind.fast_double, b);
|
| + assertOptimized(create0);
|
|
|
| - // 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);
|
| - // }
|
| - // })();
|
| + function create1(arg) {
|
| + return Array(arg);
|
| + }
|
| +
|
| + 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);
|
| + }
|
|
|
| + 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 (){
|
|
|