Index: test/mjsunit/allocation-site-info.js |
diff --git a/test/mjsunit/allocation-site-info.js b/test/mjsunit/allocation-site-info.js |
index 69ee83ec765cda0b35119ac7b068744232a3c4e3..542f874f334c7a5bf70cc067662c4d2b595a7641 100644 |
--- a/test/mjsunit/allocation-site-info.js |
+++ b/test/mjsunit/allocation-site-info.js |
@@ -37,7 +37,6 @@ |
// support_smi_only_arrays = %HasFastSmiElements(new Array(1,2,3,4,5,6,7,8)); |
support_smi_only_arrays = true; |
-optimize_constructed_arrays = true; |
if (support_smi_only_arrays) { |
print("Tests include smi-only arrays."); |
@@ -45,12 +44,6 @@ if (support_smi_only_arrays) { |
print("Tests do NOT include smi-only arrays."); |
} |
-if (optimize_constructed_arrays) { |
- print("Tests include constructed array optimizations."); |
-} else { |
- print("Tests do NOT include constructed array optimizations."); |
-} |
- |
var elements_kind = { |
fast_smi_only : 'fast smi only elements', |
fast : 'fast elements', |
@@ -187,136 +180,134 @@ if (support_smi_only_arrays) { |
// sites work again for fast literals |
//assertKind(elements_kind.fast, obj); |
- if (optimize_constructed_arrays) { |
- function newarraycase_smidouble(value) { |
- var a = new Array(); |
- a[0] = value; |
- return a; |
- } |
+ function newarraycase_smidouble(value) { |
+ var a = new Array(); |
+ a[0] = value; |
+ return a; |
+ } |
- // Case: new Array() as allocation site, smi->double |
- obj = newarraycase_smidouble(1); |
- assertKind(elements_kind.fast_smi_only, obj); |
- obj = newarraycase_smidouble(1.5); |
- assertKind(elements_kind.fast_double, obj); |
- obj = newarraycase_smidouble(2); |
- assertKind(elements_kind.fast_double, obj); |
+ // Case: new Array() as allocation site, smi->double |
+ obj = newarraycase_smidouble(1); |
+ assertKind(elements_kind.fast_smi_only, obj); |
+ obj = newarraycase_smidouble(1.5); |
+ assertKind(elements_kind.fast_double, obj); |
+ obj = newarraycase_smidouble(2); |
+ assertKind(elements_kind.fast_double, obj); |
- function newarraycase_smiobj(value) { |
- var a = new Array(); |
- a[0] = value; |
- return a; |
- } |
+ function newarraycase_smiobj(value) { |
+ var a = new Array(); |
+ a[0] = value; |
+ return a; |
+ } |
- // Case: new Array() as allocation site, smi->fast |
- obj = newarraycase_smiobj(1); |
- assertKind(elements_kind.fast_smi_only, obj); |
- obj = newarraycase_smiobj("gloria"); |
- assertKind(elements_kind.fast, obj); |
- obj = newarraycase_smiobj(2); |
- assertKind(elements_kind.fast, obj); |
- |
- function newarraycase_length_smidouble(value) { |
- var a = new Array(3); |
- a[0] = value; |
- return a; |
- } |
- |
- // Case: new Array(length) as allocation site |
- obj = newarraycase_length_smidouble(1); |
- assertKind(elements_kind.fast_smi_only, obj); |
- obj = newarraycase_length_smidouble(1.5); |
- assertKind(elements_kind.fast_double, obj); |
- obj = newarraycase_length_smidouble(2); |
- assertKind(elements_kind.fast_double, obj); |
+ // Case: new Array() as allocation site, smi->fast |
+ obj = newarraycase_smiobj(1); |
+ assertKind(elements_kind.fast_smi_only, obj); |
+ obj = newarraycase_smiobj("gloria"); |
+ assertKind(elements_kind.fast, obj); |
+ obj = newarraycase_smiobj(2); |
+ assertKind(elements_kind.fast, obj); |
- // Try to continue the transition to fast object, but |
- // we will not pretransition from double->fast, because |
- // it may hurt performance ("poisoning"). |
- obj = newarraycase_length_smidouble("coates"); |
- assertKind(elements_kind.fast, obj); |
- obj = newarraycase_length_smidouble(2.5); |
- // However, because of optimistic transitions, we will |
- // transition to the most general kind of elements kind found, |
- // therefore I can't count on this assert yet. |
- // assertKind(elements_kind.fast_double, obj); |
- |
- function newarraycase_length_smiobj(value) { |
- var a = new Array(3); |
- a[0] = value; |
- return a; |
- } |
- |
- // Case: new Array(<length>) as allocation site, smi->fast |
- obj = newarraycase_length_smiobj(1); |
- assertKind(elements_kind.fast_smi_only, obj); |
- obj = newarraycase_length_smiobj("gloria"); |
- assertKind(elements_kind.fast, obj); |
- obj = newarraycase_length_smiobj(2); |
- assertKind(elements_kind.fast, obj); |
- |
- function newarraycase_list_smidouble(value) { |
- var a = new Array(1, 2, 3); |
- a[0] = value; |
- return a; |
- } |
- |
- obj = newarraycase_list_smidouble(1); |
- assertKind(elements_kind.fast_smi_only, obj); |
- obj = newarraycase_list_smidouble(1.5); |
- assertKind(elements_kind.fast_double, obj); |
- obj = newarraycase_list_smidouble(2); |
- assertKind(elements_kind.fast_double, obj); |
+ function newarraycase_length_smidouble(value) { |
+ var a = new Array(3); |
+ a[0] = value; |
+ return a; |
+ } |
- function newarraycase_list_smiobj(value) { |
- var a = new Array(4, 5, 6); |
- a[0] = value; |
- return a; |
- } |
+ // Case: new Array(length) as allocation site |
+ obj = newarraycase_length_smidouble(1); |
+ assertKind(elements_kind.fast_smi_only, obj); |
+ obj = newarraycase_length_smidouble(1.5); |
+ assertKind(elements_kind.fast_double, obj); |
+ obj = newarraycase_length_smidouble(2); |
+ assertKind(elements_kind.fast_double, obj); |
- obj = newarraycase_list_smiobj(1); |
- assertKind(elements_kind.fast_smi_only, obj); |
- obj = newarraycase_list_smiobj("coates"); |
- assertKind(elements_kind.fast, obj); |
- obj = newarraycase_list_smiobj(2); |
- assertKind(elements_kind.fast, obj); |
- |
- function newarraycase_onearg(len, value) { |
- var a = new Array(len); |
- a[0] = value; |
- return a; |
- } |
- |
- obj = newarraycase_onearg(5, 3.5); |
- assertKind(elements_kind.fast_double, obj); |
- obj = newarraycase_onearg(10, 5); |
- assertKind(elements_kind.fast_double, obj); |
- obj = newarraycase_onearg(0, 5); |
- assertKind(elements_kind.fast_double, obj); |
- // Now pass a length that forces the dictionary path. |
- obj = newarraycase_onearg(100000, 5); |
- assertKind(elements_kind.dictionary, obj); |
- assertTrue(obj.length == 100000); |
- |
- // Verify that cross context calls work |
- var realmA = Realm.current(); |
- var realmB = Realm.create(); |
- assertEquals(0, realmA); |
- assertEquals(1, realmB); |
- |
- function instanceof_check(type) { |
- assertTrue(new type() instanceof type); |
- assertTrue(new type(5) instanceof type); |
- assertTrue(new type(1,2,3) instanceof type); |
- } |
- |
- var realmBArray = Realm.eval(realmB, "Array"); |
- instanceof_check(Array); |
- instanceof_check(realmBArray); |
- %OptimizeFunctionOnNextCall(instanceof_check); |
- instanceof_check(Array); |
- assertTrue(2 != %GetOptimizationStatus(instanceof_check)); |
- instanceof_check(realmBArray); |
- assertTrue(1 != %GetOptimizationStatus(instanceof_check)); |
+ // Try to continue the transition to fast object, but |
+ // we will not pretransition from double->fast, because |
+ // it may hurt performance ("poisoning"). |
+ obj = newarraycase_length_smidouble("coates"); |
+ assertKind(elements_kind.fast, obj); |
+ obj = newarraycase_length_smidouble(2.5); |
+ // However, because of optimistic transitions, we will |
+ // transition to the most general kind of elements kind found, |
+ // therefore I can't count on this assert yet. |
+ // assertKind(elements_kind.fast_double, obj); |
+ |
+ function newarraycase_length_smiobj(value) { |
+ var a = new Array(3); |
+ a[0] = value; |
+ return a; |
} |
+ |
+ // Case: new Array(<length>) as allocation site, smi->fast |
+ obj = newarraycase_length_smiobj(1); |
+ assertKind(elements_kind.fast_smi_only, obj); |
+ obj = newarraycase_length_smiobj("gloria"); |
+ assertKind(elements_kind.fast, obj); |
+ obj = newarraycase_length_smiobj(2); |
+ assertKind(elements_kind.fast, obj); |
+ |
+ function newarraycase_list_smidouble(value) { |
+ var a = new Array(1, 2, 3); |
+ a[0] = value; |
+ return a; |
+ } |
+ |
+ obj = newarraycase_list_smidouble(1); |
+ assertKind(elements_kind.fast_smi_only, obj); |
+ obj = newarraycase_list_smidouble(1.5); |
+ assertKind(elements_kind.fast_double, obj); |
+ obj = newarraycase_list_smidouble(2); |
+ assertKind(elements_kind.fast_double, obj); |
+ |
+ function newarraycase_list_smiobj(value) { |
+ var a = new Array(4, 5, 6); |
+ a[0] = value; |
+ return a; |
+ } |
+ |
+ obj = newarraycase_list_smiobj(1); |
+ assertKind(elements_kind.fast_smi_only, obj); |
+ obj = newarraycase_list_smiobj("coates"); |
+ assertKind(elements_kind.fast, obj); |
+ obj = newarraycase_list_smiobj(2); |
+ assertKind(elements_kind.fast, obj); |
+ |
+ function newarraycase_onearg(len, value) { |
+ var a = new Array(len); |
+ a[0] = value; |
+ return a; |
+ } |
+ |
+ obj = newarraycase_onearg(5, 3.5); |
+ assertKind(elements_kind.fast_double, obj); |
+ obj = newarraycase_onearg(10, 5); |
+ assertKind(elements_kind.fast_double, obj); |
+ obj = newarraycase_onearg(0, 5); |
+ assertKind(elements_kind.fast_double, obj); |
+ // Now pass a length that forces the dictionary path. |
+ obj = newarraycase_onearg(100000, 5); |
+ assertKind(elements_kind.dictionary, obj); |
+ assertTrue(obj.length == 100000); |
+ |
+ // Verify that cross context calls work |
+ var realmA = Realm.current(); |
+ var realmB = Realm.create(); |
+ assertEquals(0, realmA); |
+ assertEquals(1, realmB); |
+ |
+ function instanceof_check(type) { |
+ assertTrue(new type() instanceof type); |
+ assertTrue(new type(5) instanceof type); |
+ assertTrue(new type(1,2,3) instanceof type); |
+ } |
+ |
+ var realmBArray = Realm.eval(realmB, "Array"); |
+ instanceof_check(Array); |
+ instanceof_check(realmBArray); |
+ %OptimizeFunctionOnNextCall(instanceof_check); |
+ instanceof_check(Array); |
+ assertTrue(2 != %GetOptimizationStatus(instanceof_check)); |
+ instanceof_check(realmBArray); |
+ assertTrue(1 != %GetOptimizationStatus(instanceof_check)); |
} |