| Index: test/mjsunit/elements-kind.js
|
| diff --git a/test/mjsunit/elements-kind.js b/test/mjsunit/elements-kind.js
|
| index 0ae2e692f430dfad1697b05a1665a9c52f41a559..26fd73cfb2709a604d451540506c49c2bb647c5e 100644
|
| --- a/test/mjsunit/elements-kind.js
|
| +++ b/test/mjsunit/elements-kind.js
|
| @@ -158,36 +158,75 @@ var smi_only = [1, 2, 3];
|
| for (var i = 0; i < 3; i++) monomorphic(smi_only);
|
| %OptimizeFunctionOnNextCall(monomorphic);
|
| monomorphic(smi_only);
|
| -function polymorphic(array, expected_kind) {
|
| - array[1] = 42;
|
| - assertKind(expected_kind, array);
|
| - var a = array[1];
|
| - assertEquals(42, a);
|
| -}
|
| -var smis = [1, 2, 3];
|
| -var strings = [0, 0, 0]; strings[0] = "one";
|
| -var doubles = [0, 0, 0]; doubles[0] = 1.5;
|
| -assertKind(support_smi_only_arrays
|
| - ? elements_kind.fast_double
|
| - : elements_kind.fast,
|
| - doubles);
|
| -for (var i = 0; i < 3; i++) {
|
| - polymorphic(smis, elements_kind.fast_smi_only);
|
| -}
|
| -for (var i = 0; i < 3; i++) {
|
| - polymorphic(strings, elements_kind.fast);
|
| -}
|
| -for (var i = 0; i < 3; i++) {
|
| - polymorphic(doubles, i == 0 && support_smi_only_arrays
|
| - ? elements_kind.fast_double
|
| - : elements_kind.fast);
|
| -}
|
|
|
| -/* Element transitions have not been implemented in crankshaft yet.
|
| -%OptimizeFunctionOnNextCall(polymorphic);
|
| -polymorphic(smis, elements_kind.fast_smi_only);
|
| -polymorphic(strings, elements_kind.fast);
|
| -polymorphic(doubles, elements_kind.fast);
|
| +if (support_smi_only_arrays) {
|
| + function construct_smis() {
|
| + var a = [0, 0, 0];
|
| + a[0] = 0; // Send the COW array map to the steak house.
|
| + assertKind(elements_kind.fast_smi_only, a);
|
| + return a;
|
| + }
|
| + function construct_doubles() {
|
| + var a = construct_smis();
|
| + a[0] = 1.5;
|
| + assertKind(elements_kind.fast_double, a);
|
| + return a;
|
| + }
|
| + function construct_objects() {
|
| + var a = construct_smis();
|
| + a[0] = "one";
|
| + assertKind(elements_kind.fast, a);
|
| + return a;
|
| + }
|
| +
|
| + // Test crankshafted transition SMI->DOUBLE.
|
| + function convert_to_double(array) {
|
| + array[1] = 2.5;
|
| + assertKind(elements_kind.fast_double, array);
|
| + assertEquals(2.5, array[1]);
|
| + }
|
| + var smis = construct_smis();
|
| + for (var i = 0; i < 3; i++) convert_to_double(smis);
|
| + %OptimizeFunctionOnNextCall(convert_to_double);
|
| + smis = construct_smis();
|
| + convert_to_double(smis);
|
| + // Test crankshafted transitions SMI->FAST and DOUBLE->FAST.
|
| + function convert_to_fast(array) {
|
| + array[1] = "two";
|
| + assertKind(elements_kind.fast, array);
|
| + assertEquals("two", array[1]);
|
| + }
|
| + smis = construct_smis();
|
| + for (var i = 0; i < 3; i++) convert_to_fast(smis);
|
| + var doubles = construct_doubles();
|
| + for (var i = 0; i < 3; i++) convert_to_fast(doubles);
|
| + smis = construct_smis();
|
| + doubles = construct_doubles();
|
| + %OptimizeFunctionOnNextCall(convert_to_fast);
|
| + convert_to_fast(smis);
|
| + convert_to_fast(doubles);
|
| + // Test transition chain SMI->DOUBLE->FAST (crankshafted function will
|
| + // transition to FAST directly).
|
| + function convert_mixed(array, value, kind) {
|
| + array[1] = value;
|
| + assertKind(kind, array);
|
| + assertEquals(value, array[1]);
|
| + }
|
| + smis = construct_smis();
|
| + for (var i = 0; i < 3; i++) {
|
| + convert_mixed(smis, 1.5, elements_kind.fast_double);
|
| + }
|
| + doubles = construct_doubles();
|
| + for (var i = 0; i < 3; i++) {
|
| + convert_mixed(doubles, "three", elements_kind.fast);
|
| + }
|
| + smis = construct_smis();
|
| + doubles = construct_doubles();
|
| + %OptimizeFunctionOnNextCall(convert_mixed);
|
| + convert_mixed(smis, 1, elements_kind.fast);
|
| + convert_mixed(doubles, 1, elements_kind.fast);
|
| + assertTrue(%HaveSameMap(smis, doubles));
|
| +}
|
|
|
| // Crankshaft support for smi-only elements in dynamic array literals.
|
| function get(foo) { return foo; } // Used to generate dynamic values.
|
| @@ -212,7 +251,7 @@ for (var i = 0; i < 3; i++) {
|
| }
|
| %OptimizeFunctionOnNextCall(crankshaft_test);
|
| crankshaft_test();
|
| -*/
|
| +
|
|
|
| // Elements_kind transitions for arrays.
|
|
|
|
|