Index: test/mjsunit/elements-kind.js |
diff --git a/test/mjsunit/elements-kind.js b/test/mjsunit/elements-kind.js |
index 857637c6b1c5c3f4749a4205bb21c315c494ad44..442d756ae96d72c995147ce0fb64ffdbf0f89752 100644 |
--- a/test/mjsunit/elements-kind.js |
+++ b/test/mjsunit/elements-kind.js |
@@ -26,7 +26,12 @@ |
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
// Flags: --allow-natives-syntax --smi-only-arrays --expose-gc |
-// Flags: --nostress-opt |
+// Flags: --notrack_allocation_sites |
+ |
+// Limit the number of stress runs to reduce polymorphism it defeats some of the |
+// assumptions made about how elements transitions work because transition stubs |
+// end up going generic. |
+// Flags: --stress-runs=2 |
// Test element kind of objects. |
// Since --smi-only-arrays affects builtins, its default setting at compile |
@@ -118,75 +123,56 @@ if (support_smi_only_arrays) { |
} |
// Make sure the element kind transitions from smi when a non-smi is stored. |
-function test_wrapper() { |
- var you = new Array(); |
- assertKind(elements_kind.fast_smi_only, you); |
- for (var i = 0; i < 1337; i++) { |
- var val = i; |
- if (i == 1336) { |
- assertKind(elements_kind.fast_smi_only, you); |
- val = new Object(); |
- } |
- you[i] = val; |
+var you = new Array(); |
+assertKind(elements_kind.fast_smi_only, you); |
+for (var i = 0; i < 1337; i++) { |
+ var val = i; |
+ if (i == 1336) { |
+ assertKind(elements_kind.fast_smi_only, you); |
+ val = new Object(); |
} |
- assertKind(elements_kind.fast, you); |
+ you[i] = val; |
+} |
+assertKind(elements_kind.fast, you); |
- assertKind(elements_kind.dictionary, new Array(0xDECAF)); |
+assertKind(elements_kind.dictionary, new Array(0xDECAF)); |
- var fast_double_array = new Array(0xDECAF); |
- for (var i = 0; i < 0xDECAF; i++) fast_double_array[i] = i / 2; |
- assertKind(elements_kind.fast_double, fast_double_array); |
+var fast_double_array = new Array(0xDECAF); |
+for (var i = 0; i < 0xDECAF; i++) fast_double_array[i] = i / 2; |
+assertKind(elements_kind.fast_double, fast_double_array); |
- assertKind(elements_kind.external_byte, new Int8Array(9001)); |
- assertKind(elements_kind.external_unsigned_byte, new Uint8Array(007)); |
- assertKind(elements_kind.external_short, new Int16Array(666)); |
- assertKind(elements_kind.external_unsigned_short, new Uint16Array(42)); |
- assertKind(elements_kind.external_int, new Int32Array(0xF)); |
- assertKind(elements_kind.external_unsigned_int, new Uint32Array(23)); |
- assertKind(elements_kind.external_float, new Float32Array(7)); |
- assertKind(elements_kind.external_double, new Float64Array(0)); |
- assertKind(elements_kind.external_pixel, new Uint8ClampedArray(512)); |
+assertKind(elements_kind.external_byte, new Int8Array(9001)); |
+assertKind(elements_kind.external_unsigned_byte, new Uint8Array(007)); |
+assertKind(elements_kind.external_short, new Int16Array(666)); |
+assertKind(elements_kind.external_unsigned_short, new Uint16Array(42)); |
+assertKind(elements_kind.external_int, new Int32Array(0xF)); |
+assertKind(elements_kind.external_unsigned_int, new Uint32Array(23)); |
+assertKind(elements_kind.external_float, new Float32Array(7)); |
+assertKind(elements_kind.external_double, new Float64Array(0)); |
+assertKind(elements_kind.external_pixel, new Uint8ClampedArray(512)); |
- // Crankshaft support for smi-only array elements. |
- function monomorphic(array) { |
- assertKind(elements_kind.fast_smi_only, array); |
- for (var i = 0; i < 3; i++) { |
- array[i] = i + 10; |
- } |
- assertKind(elements_kind.fast_smi_only, array); |
- for (var i = 0; i < 3; i++) { |
- var a = array[i]; |
- assertEquals(i + 10, a); |
- } |
+// Crankshaft support for smi-only array elements. |
+function monomorphic(array) { |
+ assertKind(elements_kind.fast_smi_only, array); |
+ for (var i = 0; i < 3; i++) { |
+ array[i] = i + 10; |
+ } |
+ assertKind(elements_kind.fast_smi_only, array); |
+ for (var i = 0; i < 3; i++) { |
+ var a = array[i]; |
+ assertEquals(i + 10, a); |
} |
- var smi_only = new Array(1, 2, 3); |
- assertKind(elements_kind.fast_smi_only, smi_only); |
- for (var i = 0; i < 3; i++) monomorphic(smi_only); |
- %OptimizeFunctionOnNextCall(monomorphic); |
- monomorphic(smi_only); |
} |
- |
-// The test is called in a wrapper function to eliminate the transition learning |
-// feedback of AllocationSites. |
-test_wrapper(); |
-%ClearFunctionTypeFeedback(test_wrapper); |
+var smi_only = new Array(1, 2, 3); |
+assertKind(elements_kind.fast_smi_only, smi_only); |
+for (var i = 0; i < 3; i++) monomorphic(smi_only); |
+%OptimizeFunctionOnNextCall(monomorphic); |
+monomorphic(smi_only); |
if (support_smi_only_arrays) { |
%NeverOptimizeFunction(construct_smis); |
- |
- // This code exists to eliminate the learning influence of AllocationSites |
- // on the following tests. |
- var __sequence = 0; |
- function make_array_string() { |
- this.__sequence = this.__sequence + 1; |
- return "/* " + this.__sequence + " */ [0, 0, 0];" |
- } |
- function make_array() { |
- return eval(make_array_string()); |
- } |
- |
function construct_smis() { |
- var a = make_array(); |
+ 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; |