[Test] Add %PrepareForOptimization in tests

With bytecode flushing and lazy feedback allocation, we need to call
%PrepareForOptimization before we call %OptimizeFunctionOnNextCall

Bug: v8:8801, v8:8394
Change-Id: I1f84477a8cef27b4cff61b54daf6fe1a9e5f8e76
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1591775
Commit-Queue: Ross McIlroy <rmcilroy@chromium.org>
Reviewed-by: Ross McIlroy <rmcilroy@chromium.org>
Cr-Commit-Position: refs/heads/master@{#61148}
This commit is contained in:
Mythri A 2019-05-01 17:49:49 +01:00 committed by Commit Bot
parent 6b9af6b7cf
commit 55e8d61391
36 changed files with 156 additions and 20 deletions

View File

@ -10,6 +10,7 @@ function push(array, value) {
array.push(value); array.push(value);
} }
%PrepareFunctionForOptimization(push);
push(array, 0); push(array, 0);
push(array, 1); push(array, 1);
push(array, 2); push(array, 2);

View File

@ -26,6 +26,8 @@
} }
assertPromiseResult((async () => { assertPromiseResult((async () => {
%PrepareFunctionForOptimization(one);
%PrepareFunctionForOptimization(two);
await test(one); await test(one);
await test(one); await test(one);
%OptimizeFunctionOnNextCall(two); %OptimizeFunctionOnNextCall(two);
@ -57,6 +59,8 @@
} }
assertPromiseResult((async() => { assertPromiseResult((async() => {
%PrepareFunctionForOptimization(one);
%PrepareFunctionForOptimization(two);
await test(one); await test(one);
await test(one); await test(one);
%OptimizeFunctionOnNextCall(two); %OptimizeFunctionOnNextCall(two);
@ -92,6 +96,8 @@
} }
assertPromiseResult((async() => { assertPromiseResult((async() => {
%PrepareFunctionForOptimization(one);
%PrepareFunctionForOptimization(two);
await test(one); await test(one);
await test(one); await test(one);
%OptimizeFunctionOnNextCall(two); %OptimizeFunctionOnNextCall(two);
@ -131,6 +137,8 @@
} }
assertPromiseResult((async() => { assertPromiseResult((async() => {
%PrepareFunctionForOptimization(callOne);
%PrepareFunctionForOptimization(callTwo);
await test(callOne); await test(callOne);
await test(callOne); await test(callOne);
%OptimizeFunctionOnNextCall(callTwo); %OptimizeFunctionOnNextCall(callTwo);
@ -164,6 +172,8 @@
} }
assertPromiseResult((async() => { assertPromiseResult((async() => {
%PrepareFunctionForOptimization(one);
%PrepareFunctionForOptimization(two);
await test(one); await test(one);
await test(one); await test(one);
%OptimizeFunctionOnNextCall(two); %OptimizeFunctionOnNextCall(two);
@ -196,6 +206,8 @@
} }
assertPromiseResult((async () => { assertPromiseResult((async () => {
%PrepareFunctionForOptimization(one);
%PrepareFunctionForOptimization(two);
await test(one); await test(one);
await test(one); await test(one);
%OptimizeFunctionOnNextCall(two); %OptimizeFunctionOnNextCall(two);
@ -228,6 +240,8 @@
} }
assertPromiseResult((async () => { assertPromiseResult((async () => {
%PrepareFunctionForOptimization(one);
%PrepareFunctionForOptimization(two);
await test(one); await test(one);
await test(one); await test(one);
%OptimizeFunctionOnNextCall(two); %OptimizeFunctionOnNextCall(two);
@ -260,6 +274,8 @@
} }
assertPromiseResult((async () => { assertPromiseResult((async () => {
%PrepareFunctionForOptimization(one);
%PrepareFunctionForOptimization(two);
await test(one); await test(one);
await test(one); await test(one);
%OptimizeFunctionOnNextCall(two); %OptimizeFunctionOnNextCall(two);
@ -291,6 +307,8 @@
} }
assertPromiseResult((async () => { assertPromiseResult((async () => {
%PrepareFunctionForOptimization(one);
%PrepareFunctionForOptimization(two);
await test(one); await test(one);
await test(one); await test(one);
%OptimizeFunctionOnNextCall(two); %OptimizeFunctionOnNextCall(two);

View File

@ -34,6 +34,7 @@ function aoo(i) {
return a[i + 1]; return a[i + 1];
} }
%PrepareFunctionForOptimization(aoo);
aoo(1); aoo(1);
aoo(-1); aoo(-1);
%OptimizeFunctionOnNextCall(aoo); %OptimizeFunctionOnNextCall(aoo);
@ -51,6 +52,7 @@ function boo(i) {
return ret; return ret;
} }
%PrepareFunctionForOptimization(boo);
boo(1); boo(1);
boo(-1); boo(-1);
%OptimizeFunctionOnNextCall(boo); %OptimizeFunctionOnNextCall(boo);
@ -67,6 +69,7 @@ function coo() {
return ret; return ret;
} }
%PrepareFunctionForOptimization(coo);
coo(); coo();
coo(); coo();
%OptimizeFunctionOnNextCall(coo); %OptimizeFunctionOnNextCall(coo);
@ -81,6 +84,7 @@ function doo() {
} }
return ret; return ret;
} }
%PrepareFunctionForOptimization(doo);
doo(); doo();
doo(); doo();
%OptimizeFunctionOnNextCall(doo); %OptimizeFunctionOnNextCall(doo);
@ -97,6 +101,7 @@ function eoo() {
return ret; return ret;
} }
%PrepareFunctionForOptimization(eoo);
eoo(); eoo();
eoo(); eoo();
%OptimizeFunctionOnNextCall(eoo); %OptimizeFunctionOnNextCall(eoo);
@ -118,6 +123,7 @@ function foo() {
return ret; return ret;
} }
%PrepareFunctionForOptimization(foo);
foo(); foo();
foo(); foo();
%OptimizeFunctionOnNextCall(foo); %OptimizeFunctionOnNextCall(foo);
@ -133,6 +139,7 @@ function goo(i) {
return a[i + 3]; return a[i + 3];
} }
%PrepareFunctionForOptimization(goo);
goo(-1); goo(-1);
goo(-1); goo(-1);
%OptimizeFunctionOnNextCall(goo); %OptimizeFunctionOnNextCall(goo);
@ -147,6 +154,7 @@ function hoo() {
return a[index() + 3]; return a[index() + 3];
} }
%PrepareFunctionForOptimization(hoo);
hoo(); hoo();
hoo(); hoo();
%OptimizeFunctionOnNextCall(hoo); %OptimizeFunctionOnNextCall(hoo);
@ -157,6 +165,7 @@ function ioo(i) {
return a[i] + a[i + 1]; return a[i] + a[i + 1];
} }
%PrepareFunctionForOptimization(ioo);
ioo(1); ioo(1);
ioo(1); ioo(1);
%OptimizeFunctionOnNextCall(ioo); %OptimizeFunctionOnNextCall(ioo);

View File

@ -15,8 +15,8 @@ function foo(i, deopt = false) {
} }
} }
%PrepareFunctionForOptimization(foo);
assertEquals(0, %GetDeoptCount(foo)); assertEquals(0, %GetDeoptCount(foo));
foo(10); foo(10);
foo(10); foo(10);
%OptimizeFunctionOnNextCall(foo); %OptimizeFunctionOnNextCall(foo);

View File

@ -8,6 +8,7 @@ function f1(a, i) {
return a[i] + 0.5; return a[i] + 0.5;
} }
var arr = [,0.0,2.5]; var arr = [,0.0,2.5];
%PrepareFunctionForOptimization(f1);
assertEquals(0.5, f1(arr, 1)); assertEquals(0.5, f1(arr, 1));
assertEquals(0.5, f1(arr, 1)); assertEquals(0.5, f1(arr, 1));
%OptimizeFunctionOnNextCall(f1); %OptimizeFunctionOnNextCall(f1);

View File

@ -30,6 +30,7 @@
function f1(a, i) { function f1(a, i) {
return a[i] + 0.5; return a[i] + 0.5;
} }
%PrepareFunctionForOptimization(f1);
var arr = [0.0,,2.5]; var arr = [0.0,,2.5];
assertEquals(0.5, f1(arr, 0)); assertEquals(0.5, f1(arr, 0));
assertEquals(0.5, f1(arr, 0)); assertEquals(0.5, f1(arr, 0));

View File

@ -39,6 +39,7 @@ function Turbo(count = 10000) {
return sum; return sum;
} }
%PrepareFunctionForOptimization(Turbo);
Turbo(10); Turbo(10);
Turbo(10); Turbo(10);
%OptimizeFunctionOnNextCall(Turbo); %OptimizeFunctionOnNextCall(Turbo);

View File

@ -36,6 +36,7 @@ var functions = [ f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14,
for (var i = 0; i < functions.length; ++i) { for (var i = 0; i < functions.length; ++i) {
var func = functions[i]; var func = functions[i];
%PrepareFunctionForOptimization(func);
print("Testing:"); print("Testing:");
print(func); print(func);
for (var j = 0; j < 10; ++j) { for (var j = 0; j < 10; ++j) {
@ -317,6 +318,7 @@ function TestThrow() {
throw x; throw x;
} }
} }
%PrepareFunctionForOptimization(f);
for (var i = 0; i < 5; i++) { for (var i = 0; i < 5; i++) {
try { try {
f(); f();
@ -341,6 +343,7 @@ TestThrow();
function TestFunctionLocal(s) { function TestFunctionLocal(s) {
'use strict'; 'use strict';
var func = eval("(function baz(){" + s + "; })"); var func = eval("(function baz(){" + s + "; })");
%PrepareFunctionForOptimization(func);
print("Testing:"); print("Testing:");
print(func); print(func);
for (var i = 0; i < 5; ++i) { for (var i = 0; i < 5; ++i) {
@ -363,6 +366,7 @@ function TestFunctionLocal(s) {
function TestFunctionContext(s) { function TestFunctionContext(s) {
'use strict'; 'use strict';
var func = eval("(function baz(){ " + s + "; (function() { x; }); })"); var func = eval("(function baz(){ " + s + "; (function() { x; }); })");
%PrepareFunctionForOptimization(func);
print("Testing:"); print("Testing:");
print(func); print(func);
for (var i = 0; i < 5; ++i) { for (var i = 0; i < 5; ++i) {
@ -389,6 +393,7 @@ function TestFunctionContext(s) {
function TestBlockLocal(s) { function TestBlockLocal(s) {
'use strict'; 'use strict';
var func = eval("(function baz(){ { " + s + "; } })"); var func = eval("(function baz(){ { " + s + "; } })");
%PrepareFunctionForOptimization(func);
print("Testing:"); print("Testing:");
print(func); print(func);
for (var i = 0; i < 5; ++i) { for (var i = 0; i < 5; ++i) {
@ -411,6 +416,7 @@ function TestBlockLocal(s) {
function TestBlockContext(s) { function TestBlockContext(s) {
'use strict'; 'use strict';
var func = eval("(function baz(){ { " + s + "; (function() { x; }); } })"); var func = eval("(function baz(){ { " + s + "; (function() { x; }); } })");
%PrepareFunctionForOptimization(func);
print("Testing:"); print("Testing:");
print(func); print(func);
for (var i = 0; i < 5; ++i) { for (var i = 0; i < 5; ++i) {
@ -469,6 +475,9 @@ function g(x) {
} }
} }
%PrepareFunctionForOptimization(f);
%PrepareFunctionForOptimization(g);
for (var i=0; i<10; i++) { for (var i=0; i<10; i++) {
f(i); f(i);
g(i); g(i);

View File

@ -37,6 +37,7 @@ function f1() {
assertEquals(1, x) assertEquals(1, x)
assertEquals(undefined, y) assertEquals(undefined, y)
} }
%PrepareFunctionForOptimization(f1);
for (var j = 0; j < 5; ++j) f1(); for (var j = 0; j < 5; ++j) f1();
%OptimizeFunctionOnNextCall(f1); %OptimizeFunctionOnNextCall(f1);
f1(); f1();
@ -85,6 +86,7 @@ function f3(one) {
assertEquals(8, b.foo()); assertEquals(8, b.foo());
} }
} }
%PrepareFunctionForOptimization(f3);
for (var j = 0; j < 5; ++j) f3(1); for (var j = 0; j < 5; ++j) f3(1);
%OptimizeFunctionOnNextCall(f3); %OptimizeFunctionOnNextCall(f3);
f3(1); f3(1);

View File

@ -39,6 +39,7 @@ function f1() {
assertEquals(1, x) assertEquals(1, x)
assertEquals(undefined, y) assertEquals(undefined, y)
} }
%PrepareFunctionForOptimization(f1);
for (var j = 0; j < 5; ++j) f1(); for (var j = 0; j < 5; ++j) f1();
%OptimizeFunctionOnNextCall(f1); %OptimizeFunctionOnNextCall(f1);
f1(); f1();
@ -87,6 +88,7 @@ function f3(one) {
assertEquals(8, b.foo()); assertEquals(8, b.foo());
} }
} }
%PrepareFunctionForOptimization(f3);
for (var j = 0; j < 5; ++j) f3(1); for (var j = 0; j < 5; ++j) f3(1);
%OptimizeFunctionOnNextCall(f3); %OptimizeFunctionOnNextCall(f3);
f3(1); f3(1);

View File

@ -20,6 +20,7 @@
return maxWithZero(x, y); return maxWithZero(x, y);
} }
%PrepareFunctionForOptimization(testMax);
testMax(1, 2); testMax(1, 2);
testMax(1, 2); testMax(1, 2);
%OptimizeFunctionOnNextCall(testMax); %OptimizeFunctionOnNextCall(testMax);

View File

@ -8,6 +8,7 @@
'use strict'; 'use strict';
function testBaselineAndOpt(func) { function testBaselineAndOpt(func) {
%PrepareFunctionForOptimization(func);
func(-1, -2); func(-1, -2);
func(-1, -2); func(-1, -2);
%OptimizeFunctionOnNextCall(func); %OptimizeFunctionOnNextCall(func);
@ -76,6 +77,7 @@
(function() { (function() {
function testBaselineAndOpt(func) { function testBaselineAndOpt(func) {
%PrepareFunctionForOptimization(func);
func(-1, -2); func(-1, -2);
func(-1, -2); func(-1, -2);
%OptimizeFunctionOnNextCall(func); %OptimizeFunctionOnNextCall(func);

View File

@ -25,6 +25,7 @@ function TestSetWithCustomIterator(ctor) {
// code which causes the code to deopt. // code which causes the code to deopt.
global = entries; global = entries;
} }
%PrepareFunctionForOptimization(TestSetWithCustomIterator);
TestSetWithCustomIterator(Set); TestSetWithCustomIterator(Set);
TestSetWithCustomIterator(Set); TestSetWithCustomIterator(Set);
TestSetWithCustomIterator(Set); TestSetWithCustomIterator(Set);
@ -33,6 +34,7 @@ TestSetWithCustomIterator(Set);
assertOptimized(TestSetWithCustomIterator); assertOptimized(TestSetWithCustomIterator);
TestSetWithCustomIterator(WeakSet); TestSetWithCustomIterator(WeakSet);
%PrepareFunctionForOptimization(TestSetWithCustomIterator);
TestSetWithCustomIterator(WeakSet); TestSetWithCustomIterator(WeakSet);
TestSetWithCustomIterator(WeakSet); TestSetWithCustomIterator(WeakSet);
%OptimizeFunctionOnNextCall(TestSetWithCustomIterator); %OptimizeFunctionOnNextCall(TestSetWithCustomIterator);
@ -58,6 +60,7 @@ function TestMapWithCustomIterator(ctor) {
// code which causes the code to deopt. // code which causes the code to deopt.
global = entries; global = entries;
} }
%PrepareFunctionForOptimization(TestMapWithCustomIterator);
TestMapWithCustomIterator(Map); TestMapWithCustomIterator(Map);
TestMapWithCustomIterator(Map); TestMapWithCustomIterator(Map);
TestMapWithCustomIterator(Map); TestMapWithCustomIterator(Map);
@ -66,6 +69,7 @@ TestMapWithCustomIterator(Map);
assertOptimized(TestMapWithCustomIterator); assertOptimized(TestMapWithCustomIterator);
TestMapWithCustomIterator(WeakMap); TestMapWithCustomIterator(WeakMap);
%PrepareFunctionForOptimization(TestMapWithCustomIterator);
TestMapWithCustomIterator(WeakMap); TestMapWithCustomIterator(WeakMap);
TestMapWithCustomIterator(WeakMap); TestMapWithCustomIterator(WeakMap);
%OptimizeFunctionOnNextCall(TestMapWithCustomIterator); %OptimizeFunctionOnNextCall(TestMapWithCustomIterator);

View File

@ -20,6 +20,7 @@ function g({x = {a:10,b:20}},
assertSame(0, n.length); assertSame(0, n.length);
assertTrue(p.test("abc")); assertTrue(p.test("abc"));
} }
%PrepareFunctionForOptimization(g);
g({},{}); g({},{});
%OptimizeFunctionOnNextCall(g); %OptimizeFunctionOnNextCall(g);
g({},{}); g({},{});
@ -35,6 +36,7 @@ var h = ({x = {a:10,b:20}},
assertSame(0, n.length); assertSame(0, n.length);
assertTrue(p.test("abc")); assertTrue(p.test("abc"));
}; };
%PrepareFunctionForOptimization(h);
h({},{}); h({},{});
%OptimizeFunctionOnNextCall(h); %OptimizeFunctionOnNextCall(h);
h({},{}); h({},{});

View File

@ -11,6 +11,7 @@
function foo(x) { function foo(x) {
return x instanceof Array; return x instanceof Array;
} }
%PrepareFunctionForOptimization(foo);
assertTrue(foo([])); assertTrue(foo([]));
assertFalse(foo({})); assertFalse(foo({}));
%OptimizeFunctionOnNextCall(foo); %OptimizeFunctionOnNextCall(foo);
@ -42,6 +43,7 @@
} }
return false; return false;
} }
%PrepareFunctionForOptimization(foo_catch);
assertTrue(foo_catch(o)); assertTrue(foo_catch(o));
%OptimizeFunctionOnNextCall(foo_catch); %OptimizeFunctionOnNextCall(foo_catch);
assertTrue(foo_catch(o)); assertTrue(foo_catch(o));

View File

@ -33,6 +33,7 @@ function TestMapConstructorEntrySideEffect(ctor) {
assertFalse(col.has(k3)); assertFalse(col.has(k3));
} }
%PrepareFunctionForOptimization(TestMapConstructorEntrySideEffect);
TestMapConstructorEntrySideEffect(Map); TestMapConstructorEntrySideEffect(Map);
TestMapConstructorEntrySideEffect(Map); TestMapConstructorEntrySideEffect(Map);
TestMapConstructorEntrySideEffect(Map); TestMapConstructorEntrySideEffect(Map);
@ -41,6 +42,7 @@ TestMapConstructorEntrySideEffect(Map);
assertOptimized(TestMapConstructorEntrySideEffect); assertOptimized(TestMapConstructorEntrySideEffect);
TestMapConstructorEntrySideEffect(WeakMap); TestMapConstructorEntrySideEffect(WeakMap);
%PrepareFunctionForOptimization(TestMapConstructorEntrySideEffect);
TestMapConstructorEntrySideEffect(WeakMap); TestMapConstructorEntrySideEffect(WeakMap);
TestMapConstructorEntrySideEffect(WeakMap); TestMapConstructorEntrySideEffect(WeakMap);
%OptimizeFunctionOnNextCall(TestMapConstructorEntrySideEffect); %OptimizeFunctionOnNextCall(TestMapConstructorEntrySideEffect);

View File

@ -28,6 +28,7 @@ function TestMapConstructorEntrySideEffect(ctor) {
assertTrue(col.has(k3)); assertTrue(col.has(k3));
} }
%PrepareFunctionForOptimization(TestMapConstructorEntrySideEffect);
TestMapConstructorEntrySideEffect(Map); TestMapConstructorEntrySideEffect(Map);
TestMapConstructorEntrySideEffect(Map); TestMapConstructorEntrySideEffect(Map);
TestMapConstructorEntrySideEffect(Map); TestMapConstructorEntrySideEffect(Map);
@ -36,6 +37,7 @@ TestMapConstructorEntrySideEffect(Map);
assertOptimized(TestMapConstructorEntrySideEffect); assertOptimized(TestMapConstructorEntrySideEffect);
TestMapConstructorEntrySideEffect(WeakMap); TestMapConstructorEntrySideEffect(WeakMap);
%PrepareFunctionForOptimization(TestMapConstructorEntrySideEffect);
TestMapConstructorEntrySideEffect(WeakMap); TestMapConstructorEntrySideEffect(WeakMap);
TestMapConstructorEntrySideEffect(WeakMap); TestMapConstructorEntrySideEffect(WeakMap);
%OptimizeFunctionOnNextCall(TestMapConstructorEntrySideEffect); %OptimizeFunctionOnNextCall(TestMapConstructorEntrySideEffect);

View File

@ -20,6 +20,7 @@ assertFalse(Realm.eval(realm, "1; Realm.global(0) instanceof Object"));
// Test that the instannceof check works in optimized code. // Test that the instannceof check works in optimized code.
var test = Realm.eval(realm, var test = Realm.eval(realm,
"()=>{1.1; return Realm.global(0) instanceof Object; }"); "()=>{1.1; return Realm.global(0) instanceof Object; }");
%PrepareFunctionForOptimization(test);
assertFalse(test()); assertFalse(test());
test(); test();
test(); test();

View File

@ -1510,6 +1510,7 @@ function TestConstructorWithProxyPrototype2(create, handler) {
function f() { function f() {
return o.x; return o.x;
} }
%PrepareFunctionForOptimization(f);
assertEquals(10, f()); assertEquals(10, f());
assertEquals(10, f()); assertEquals(10, f());
%OptimizeFunctionOnNextCall(f); %OptimizeFunctionOnNextCall(f);

View File

@ -45,6 +45,7 @@ assertEquals([1, 1, 1], f1(1));
function f1_(x) { function f1_(x) {
return [...[x, x, x]]; return [...[x, x, x]];
} }
%PrepareFunctionForOptimization(f1_);
assertEquals([1, 1, 1], f1_(1)); assertEquals([1, 1, 1], f1_(1));
%OptimizeFunctionOnNextCall(f1_); %OptimizeFunctionOnNextCall(f1_);
assertEquals([1, 1, 1], f1_(1)); assertEquals([1, 1, 1], f1_(1));
@ -64,6 +65,7 @@ assertEquals([1, 1, 1, ,], f2(1));
function f2_(x) { function f2_(x) {
return [...[x, x, x], ,]; return [...[x, x, x], ,];
} }
%PrepareFunctionForOptimization(f2_);
assertEquals([1, 1, 1, ,], f2_(1)); assertEquals([1, 1, 1, ,], f2_(1));
%OptimizeFunctionOnNextCall(f2_); %OptimizeFunctionOnNextCall(f2_);
assertEquals([1, 1, 1, ,], f2_(1)); assertEquals([1, 1, 1, ,], f2_(1));
@ -83,6 +85,7 @@ assertEquals([1, 0.1, "1", , ], f3(g(1, 0.1, "1")));
function f3_(it) { function f3_(it) {
return [...it, ,]; return [...it, ,];
} }
%PrepareFunctionForOptimization(f3_);
assertEquals([1, 0.1, "1", , ], f3_(g(1, 0.1, "1"))); assertEquals([1, 0.1, "1", , ], f3_(g(1, 0.1, "1")));
%OptimizeFunctionOnNextCall(f3_); %OptimizeFunctionOnNextCall(f3_);
assertEquals([1, 0.1, "1", , ], f3_(g(1, 0.1, "1"))); assertEquals([1, 0.1, "1", , ], f3_(g(1, 0.1, "1")));
@ -102,6 +105,7 @@ assertEquals([1, 1, 1], f4(1));
function f4_(x) { function f4_(x) {
return [...[x, x, x]]; return [...[x, x, x]];
} }
%PrepareFunctionForOptimization(f4_);
assertEquals([1, 1, 1], f4_(1)); assertEquals([1, 1, 1], f4_(1));
%OptimizeFunctionOnNextCall(f4_); %OptimizeFunctionOnNextCall(f4_);
assertEquals([1, 1, 1], f4_(1)); assertEquals([1, 1, 1], f4_(1));
@ -121,6 +125,7 @@ assertEquals([1, 1, 1, ,], f5(1));
function f5_(x) { function f5_(x) {
return [...[x, x, x], ,]; return [...[x, x, x], ,];
} }
%PrepareFunctionForOptimization(f5_);
assertEquals([1, 1, 1, ,], f5_(1)); assertEquals([1, 1, 1, ,], f5_(1));
%OptimizeFunctionOnNextCall(f5_); %OptimizeFunctionOnNextCall(f5_);
assertEquals([1, 1, 1, ,], f5_(1)); assertEquals([1, 1, 1, ,], f5_(1));
@ -140,6 +145,7 @@ assertEquals([1, 0.1, "1", , ], f6(g(1, 0.1, "1")));
function f6_(it) { function f6_(it) {
return [...it, ,]; return [...it, ,];
} }
%PrepareFunctionForOptimization(f6_);
assertEquals([1, 0.1, "1", , ], f6_(g(1, 0.1, "1"))); assertEquals([1, 0.1, "1", , ], f6_(g(1, 0.1, "1")));
%OptimizeFunctionOnNextCall(f6_); %OptimizeFunctionOnNextCall(f6_);
assertEquals([1, 0.1, "1", , ], f6_(g(1, 0.1, "1"))); assertEquals([1, 0.1, "1", , ], f6_(g(1, 0.1, "1")));
@ -159,6 +165,7 @@ assertEquals([1, 0.1, "1"], f7(G(1, 0.1, "1")));
function f7_(it) { function f7_(it) {
return [...it]; return [...it];
} }
%PrepareFunctionForOptimization(f7_);
assertEquals([1, 0.1, "1"], f7_(G(1, 0.1, "1"))); assertEquals([1, 0.1, "1"], f7_(G(1, 0.1, "1")));
%OptimizeFunctionOnNextCall(f7_); %OptimizeFunctionOnNextCall(f7_);
assertEquals([1, 0.1, "1"], f7_(G(1, 0.1, "1"))); assertEquals([1, 0.1, "1"], f7_(G(1, 0.1, "1")));
@ -178,6 +185,7 @@ assertEquals([1, 0.1, "1", , ], f8(G(1, 0.1, "1")));
function f8_(it) { function f8_(it) {
return [...it, ,]; return [...it, ,];
} }
%PrepareFunctionForOptimization(f8_);
assertEquals([1, 0.1, "1", , ], f8_(G(1, 0.1, "1"))); assertEquals([1, 0.1, "1", , ], f8_(G(1, 0.1, "1")));
%OptimizeFunctionOnNextCall(f8_); %OptimizeFunctionOnNextCall(f8_);
assertEquals([1, 0.1, "1", , ], f8_(G(1, 0.1, "1"))); assertEquals([1, 0.1, "1", , ], f8_(G(1, 0.1, "1")));
@ -190,6 +198,7 @@ assertEquals([1, 0.1, "1", , ], f8_(G(1, 0.1, "1")));
function* f9() { function* f9() {
for (let i = 0; i < 160000; ++i) yield i; for (let i = 0; i < 160000; ++i) yield i;
} }
%PrepareFunctionForOptimization(f9);
let a = [...f9()]; let a = [...f9()];
assertEquals(160000, a.length); assertEquals(160000, a.length);
assertEquals(0, a[0]); assertEquals(0, a[0]);
@ -263,6 +272,7 @@ function f10(b) {
...b]; ...b];
return x.length; return x.length;
} }
%PrepareFunctionForOptimization(f10);
assertEquals(4335, f10([3.3, 3.3, 3.3])); assertEquals(4335, f10([3.3, 3.3, 3.3]));
assertEquals(4335, f10([{}, "", 3.3])); assertEquals(4335, f10([{}, "", 3.3]));
%OptimizeFunctionOnNextCall(f10); %OptimizeFunctionOnNextCall(f10);

View File

@ -23,6 +23,7 @@
function testRestPoint(x, y) { function testRestPoint(x, y) {
return new RestPoint(x, y); return new RestPoint(x, y);
} }
%PrepareFunctionForOptimization(testRestPoint);
testRestPoint(1, 2); testRestPoint(1, 2);
testRestPoint(1, 2); testRestPoint(1, 2);
%OptimizeFunctionOnNextCall(testRestPoint); %OptimizeFunctionOnNextCall(testRestPoint);

View File

@ -28,6 +28,7 @@
function testArgumentsPoint(x, y) { function testArgumentsPoint(x, y) {
return new ArgumentsPoint(x, y); return new ArgumentsPoint(x, y);
} }
%PrepareFunctionForOptimization(testArgumentsPoint);
testArgumentsPoint(1, 2); testArgumentsPoint(1, 2);
testArgumentsPoint(1, 2); testArgumentsPoint(1, 2);
%OptimizeFunctionOnNextCall(testArgumentsPoint); %OptimizeFunctionOnNextCall(testArgumentsPoint);

View File

@ -15,6 +15,7 @@
} }
function testBaselineAndOpt(func) { function testBaselineAndOpt(func) {
%PrepareFunctionForOptimization(func);
func(1, 2); func(1, 2);
func(1, 2); func(1, 2);
%OptimizeFunctionOnNextCall(func); %OptimizeFunctionOnNextCall(func);

View File

@ -52,6 +52,7 @@ if (standalone) {
assertUnoptimized = empty_func; assertUnoptimized = empty_func;
assertOptimized = empty_func; assertOptimized = empty_func;
prepareForOptimize = emtpy_func;
optimize = empty_func; optimize = empty_func;
clearFunctionTypeFeedback = empty_func; clearFunctionTypeFeedback = empty_func;
deoptimizeFunction = empty_func; deoptimizeFunction = empty_func;
@ -59,6 +60,9 @@ if (standalone) {
optimize = function(name) { optimize = function(name) {
%OptimizeFunctionOnNextCall(name); %OptimizeFunctionOnNextCall(name);
} }
prepareForOptimize = function(name) {
%PrepareFunctionForOptimization(name);
}
clearFunctionTypeFeedback = function(name) { clearFunctionTypeFeedback = function(name) {
%ClearFunctionFeedback(name); %ClearFunctionFeedback(name);
} }
@ -76,6 +80,7 @@ function base_getter_test(create_func) {
var ap = []; var ap = [];
ap.__defineGetter__(0, function() { calls++; return 0; }); ap.__defineGetter__(0, function() { calls++; return 0; });
prepareForOptimize(foo);
foo(a); foo(a);
assertUnoptimized(foo); assertUnoptimized(foo);
// Smi and Double elements transition the KeyedLoadIC to Generic state // Smi and Double elements transition the KeyedLoadIC to Generic state
@ -145,6 +150,7 @@ function base_getter_test(create_func) {
a = create_func(); a = create_func();
ap2 = []; ap2 = [];
a.__proto__ = ap2; a.__proto__ = ap2;
prepareForOptimize(foo);
foo(a); foo(a);
foo(a); foo(a);
foo(a); foo(a);
@ -165,6 +171,7 @@ function base_getter_test(create_func) {
a = create_func(); a = create_func();
a.__proto__ = ap2; a.__proto__ = ap2;
bar = function(a) { return a[3] + 600; } bar = function(a) { return a[3] + 600; }
prepareForOptimize(bar);
bar(a); bar(a);
bar(a); bar(a);
bar(a); bar(a);
@ -207,6 +214,7 @@ for(var c = 0; c < cf.length; c++) {
var a = [3.5,,,3.5]; var a = [3.5,,,3.5];
fun = function(a) { return a[0] + 5.5; } fun = function(a) { return a[0] + 5.5; }
prepareForOptimize(fun);
fun(a); fun(a);
fun(a); fun(a);
fun(a); // should have a monomorphic KeyedLoadIC. fun(a); // should have a monomorphic KeyedLoadIC.
@ -229,6 +237,7 @@ var a = [3.5,,,,3.5];
var ap = [,,3.5]; var ap = [,,3.5];
ap.__proto__ = a.__proto__; ap.__proto__ = a.__proto__;
a.__proto__ = ap; a.__proto__ = ap;
prepareForOptimize(fun);
fun(a); fun(a);
optimize(fun); optimize(fun);
fun(a); fun(a);

View File

@ -6,6 +6,7 @@
"use strict"; "use strict";
function test(expected, f) { function test(expected, f) {
%PrepareFunctionForOptimization(f);
assertEquals(expected, f()); assertEquals(expected, f());
assertEquals(expected, f()); assertEquals(expected, f());
%OptimizeFunctionOnNextCall(f); %OptimizeFunctionOnNextCall(f);
@ -14,6 +15,7 @@ function test(expected, f) {
} }
function testThrows(f) { function testThrows(f) {
%PrepareFunctionForOptimization(f);
assertThrows(f); assertThrows(f);
assertThrows(f); assertThrows(f);
%OptimizeFunctionOnNextCall(f); %OptimizeFunctionOnNextCall(f);

View File

@ -5,6 +5,7 @@
// Flags: --allow-natives-syntax // Flags: --allow-natives-syntax
function test(expected, f) { function test(expected, f) {
%PrepareFunctionForOptimization(f);
assertEquals(expected, f()); assertEquals(expected, f());
assertEquals(expected, f()); assertEquals(expected, f());
%OptimizeFunctionOnNextCall(f); %OptimizeFunctionOnNextCall(f);
@ -13,6 +14,7 @@ function test(expected, f) {
} }
function testThrows(f) { function testThrows(f) {
%PrepareFunctionForOptimization(f);
assertThrows(f); assertThrows(f);
assertThrows(f); assertThrows(f);
%OptimizeFunctionOnNextCall(f); %OptimizeFunctionOnNextCall(f);

View File

@ -85,6 +85,7 @@ function variable_bound() {
} }
function test(f) { function test(f) {
%PrepareFunctionForOptimization(f);
f(); f();
assertTrue(f()); assertTrue(f());
%OptimizeFunctionOnNextCall(f); %OptimizeFunctionOnNextCall(f);

View File

@ -180,6 +180,7 @@ function test_div() {
} }
} }
%PrepareFunctionForOptimization(test_div);
test_div(); test_div();
%OptimizeFunctionOnNextCall(test_div); %OptimizeFunctionOnNextCall(test_div);
test_div(); test_div();
@ -201,6 +202,7 @@ function test_div2() {
} }
} }
%PrepareFunctionForOptimization(test_div2);
test_div2(); test_div2();
%OptimizeFunctionOnNextCall(test_div2); %OptimizeFunctionOnNextCall(test_div2);
test_div2(); test_div2();
@ -244,6 +246,9 @@ function test_div_deopt_div_by_zero() {
} }
} }
%PrepareFunctionForOptimization(test_div_deopt_minus_zero);
%PrepareFunctionForOptimization(test_div_deopt_overflow);
%PrepareFunctionForOptimization(test_div_deopt_div_by_zero);
test_div_deopt_minus_zero(); test_div_deopt_minus_zero();
test_div_deopt_overflow(); test_div_deopt_overflow();
test_div_deopt_div_by_zero(); test_div_deopt_div_by_zero();
@ -277,6 +282,9 @@ function test_div_deopt_div_by_zero_v() {
} }
} }
%PrepareFunctionForOptimization(test_div_deopt_minus_zero_v);
%PrepareFunctionForOptimization(test_div_deopt_overflow_v);
%PrepareFunctionForOptimization(test_div_deopt_div_by_zero_v);
test_div_deopt_minus_zero_v(); test_div_deopt_minus_zero_v();
test_div_deopt_overflow_v(); test_div_deopt_overflow_v();
test_div_deopt_div_by_zero_v(); test_div_deopt_div_by_zero_v();

View File

@ -117,6 +117,7 @@ assertEquals(Infinity, 1/Math.max(ZERO, -0));
assertEquals(Infinity, 1/Math.max(-0, ZERO)); assertEquals(Infinity, 1/Math.max(-0, ZERO));
function run(crankshaft_test) { function run(crankshaft_test) {
%PrepareFunctionForOptimization(crankshaft_test);
crankshaft_test(1); crankshaft_test(1);
crankshaft_test(1); crankshaft_test(1);
%OptimizeFunctionOnNextCall(crankshaft_test); %OptimizeFunctionOnNextCall(crankshaft_test);
@ -184,6 +185,7 @@ function f(o) {
return Math.min(o.a, o.b); return Math.min(o.a, o.b);
} }
%PrepareFunctionForOptimization(f);
assertEquals(1, f(o)); assertEquals(1, f(o));
assertEquals(1, f(o)); assertEquals(1, f(o));
%OptimizeFunctionOnNextCall(f); %OptimizeFunctionOnNextCall(f);

View File

@ -7,6 +7,7 @@
export let x = 0; export let x = 0;
function foo() { x++ }; function foo() { x++ };
%PrepareFunctionForOptimization(foo);
foo(); foo();
%OptimizeFunctionOnNextCall(foo); %OptimizeFunctionOnNextCall(foo);
foo(); foo();

View File

@ -22,7 +22,8 @@ var c = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25];
return v; return v;
} }
a.map(callback); a.map(callback);
} };
%PrepareFunctionForOptimization(eagerDeoptInCalled);
eagerDeoptInCalled(); eagerDeoptInCalled();
eagerDeoptInCalled(); eagerDeoptInCalled();
%OptimizeFunctionOnNextCall(eagerDeoptInCalled); %OptimizeFunctionOnNextCall(eagerDeoptInCalled);
@ -42,7 +43,8 @@ var c = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25];
return v; return v;
} }
a.map(callback); a.map(callback);
} };
%PrepareFunctionForOptimization(eagerDeoptInCalled);
eagerDeoptInCalled(); eagerDeoptInCalled();
eagerDeoptInCalled(); eagerDeoptInCalled();
%OptimizeFunctionOnNextCall(eagerDeoptInCalled); %OptimizeFunctionOnNextCall(eagerDeoptInCalled);
@ -65,7 +67,8 @@ var c = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25];
return v; return v;
} }
a_noescape.map(callback); a_noescape.map(callback);
} };
%PrepareFunctionForOptimization(eagerDeoptInCalled);
eagerDeoptInCalled(); eagerDeoptInCalled();
eagerDeoptInCalled(); eagerDeoptInCalled();
%OptimizeFunctionOnNextCall(eagerDeoptInCalled); %OptimizeFunctionOnNextCall(eagerDeoptInCalled);
@ -92,7 +95,8 @@ var c = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25];
}; };
%NeverOptimizeFunction(callback); %NeverOptimizeFunction(callback);
b.map(callback); b.map(callback);
} };
%PrepareFunctionForOptimization(lazyDeopt);
lazyDeopt(); lazyDeopt();
lazyDeopt(); lazyDeopt();
%OptimizeFunctionOnNextCall(lazyDeopt); %OptimizeFunctionOnNextCall(lazyDeopt);
@ -115,7 +119,8 @@ var c = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25];
}; };
%NeverOptimizeFunction(callback); %NeverOptimizeFunction(callback);
return b.map(callback); return b.map(callback);
} };
%PrepareFunctionForOptimization(lazyDeopt);
assertEquals([2,4,6], lazyDeopt()); assertEquals([2,4,6], lazyDeopt());
assertEquals([2,4,6], lazyDeopt()); assertEquals([2,4,6], lazyDeopt());
%OptimizeFunctionOnNextCall(lazyDeopt); %OptimizeFunctionOnNextCall(lazyDeopt);
@ -134,7 +139,8 @@ var c = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25];
return v; return v;
} }
b.map(callback); b.map(callback);
} };
%PrepareFunctionForOptimization(lazyDeopt);
lazyDeopt(); lazyDeopt();
lazyDeopt(); lazyDeopt();
%OptimizeFunctionOnNextCall(lazyDeopt); %OptimizeFunctionOnNextCall(lazyDeopt);
@ -157,7 +163,8 @@ var c = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25];
}; };
%NeverOptimizeFunction(callback); %NeverOptimizeFunction(callback);
b.map(callback); b.map(callback);
} };
%PrepareFunctionForOptimization(lazyDeopt);
lazyDeopt(); lazyDeopt();
lazyDeopt(); lazyDeopt();
%OptimizeFunctionOnNextCall(lazyDeopt); %OptimizeFunctionOnNextCall(lazyDeopt);
@ -181,7 +188,8 @@ var c = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25];
return v; return v;
} }
c.map(callback); c.map(callback);
} };
%PrepareFunctionForOptimization(lazyDeopt);
lazyDeopt(); lazyDeopt();
lazyDeopt(); lazyDeopt();
%OptimizeFunctionOnNextCall(lazyDeopt); %OptimizeFunctionOnNextCall(lazyDeopt);
@ -209,7 +217,8 @@ var c = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25];
} catch (e) { } catch (e) {
caught = true; caught = true;
} }
} };
%PrepareFunctionForOptimization(lazyDeopt);
lazyDeopt(); lazyDeopt();
lazyDeopt(); lazyDeopt();
%OptimizeFunctionOnNextCall(lazyDeopt); %OptimizeFunctionOnNextCall(lazyDeopt);
@ -238,7 +247,8 @@ var c = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25];
} catch (e) { } catch (e) {
caught = true; caught = true;
} }
} };
%PrepareFunctionForOptimization(lazyDeopt);
lazyDeopt(); lazyDeopt();
lazyDeopt(); lazyDeopt();
%OptimizeFunctionOnNextCall(lazyDeopt); %OptimizeFunctionOnNextCall(lazyDeopt);
@ -269,7 +279,8 @@ var c = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25];
result = "nope"; result = "nope";
} }
return result; return result;
} };
%PrepareFunctionForOptimization(lazyDeopt);
assertEquals([2,4,6,8], lazyDeopt(false)); assertEquals([2,4,6,8], lazyDeopt(false));
assertEquals([2,4,6,8], lazyDeopt(false)); assertEquals([2,4,6,8], lazyDeopt(false));
assertEquals("nope", lazyDeopt(true)); assertEquals("nope", lazyDeopt(true));
@ -294,7 +305,8 @@ var c = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25];
}; };
var o = [1,2,3]; var o = [1,2,3];
b.map(callback); b.map(callback);
} };
%PrepareFunctionForOptimization(lazyDeopt);
lazyDeopt(); lazyDeopt();
lazyDeopt(); lazyDeopt();
%OptimizeFunctionOnNextCall(lazyDeopt); %OptimizeFunctionOnNextCall(lazyDeopt);
@ -317,7 +329,8 @@ var c = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25];
%NeverOptimizeFunction(callback); %NeverOptimizeFunction(callback);
var o = [1,2,3]; var o = [1,2,3];
b.map(callback); b.map(callback);
} };
%PrepareFunctionForOptimization(lazyDeopt);
lazyDeopt(); lazyDeopt();
lazyDeopt(); lazyDeopt();
%OptimizeFunctionOnNextCall(lazyDeopt); %OptimizeFunctionOnNextCall(lazyDeopt);
@ -341,7 +354,8 @@ var c = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25];
}; };
var o = [1,2,3]; var o = [1,2,3];
b.map(callback); b.map(callback);
} };
%PrepareFunctionForOptimization(lazyDeopt);
lazyDeopt(); lazyDeopt();
lazyDeopt(); lazyDeopt();
%OptimizeFunctionOnNextCall(lazyDeopt); %OptimizeFunctionOnNextCall(lazyDeopt);
@ -362,7 +376,8 @@ var c = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25];
return v; return v;
}; };
a.map(callback); a.map(callback);
} };
%PrepareFunctionForOptimization(lazyDeopt);
assertThrows(() => lazyDeopt()); assertThrows(() => lazyDeopt());
assertThrows(() => lazyDeopt()); assertThrows(() => lazyDeopt());
try { try {
@ -395,7 +410,8 @@ var c = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25];
} }
} }
return c.map(callback); return c.map(callback);
} };
%PrepareFunctionForOptimization(to_double);
to_double(); to_double();
to_double(); to_double();
%OptimizeFunctionOnNextCall(to_double); %OptimizeFunctionOnNextCall(to_double);
@ -425,7 +441,8 @@ var c = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25];
} }
} }
return c.map(callback); return c.map(callback);
} };
%PrepareFunctionForOptimization(to_fast);
to_fast(); to_fast();
to_fast(); to_fast();
%OptimizeFunctionOnNextCall(to_fast); %OptimizeFunctionOnNextCall(to_fast);
@ -445,6 +462,7 @@ var c = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25];
var callback = v => v + 0.5; var callback = v => v + 0.5;
return a.map(callback); return a.map(callback);
} }
%PrepareFunctionForOptimization(double_results);
double_results(); double_results();
double_results(); double_results();
%OptimizeFunctionOnNextCall(double_results); %OptimizeFunctionOnNextCall(double_results);
@ -461,6 +479,7 @@ var c = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25];
var callback = v => "hello" + v.toString(); var callback = v => "hello" + v.toString();
return a.map(callback); return a.map(callback);
} }
%PrepareFunctionForOptimization(string_results);
string_results(); string_results();
string_results(); string_results();
%OptimizeFunctionOnNextCall(string_results); %OptimizeFunctionOnNextCall(string_results);
@ -479,6 +498,7 @@ var c = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25];
return v; return v;
}); });
} }
%PrepareFunctionForOptimization(withHoles);
withHoles(); withHoles();
withHoles(); withHoles();
%OptimizeFunctionOnNextCall(withHoles); %OptimizeFunctionOnNextCall(withHoles);
@ -496,6 +516,7 @@ var c = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25];
return v; return v;
}); });
} }
%PrepareFunctionForOptimization(withHoles);
withHoles(); withHoles();
withHoles(); withHoles();
%OptimizeFunctionOnNextCall(withHoles); %OptimizeFunctionOnNextCall(withHoles);
@ -513,6 +534,7 @@ var c = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25];
} }
let a = [1, 2, 3]; let a = [1, 2, 3];
%PrepareFunctionForOptimization(unreliable);
unreliable(a, false); unreliable(a, false);
unreliable(a, false); unreliable(a, false);
%OptimizeFunctionOnNextCall(unreliable); %OptimizeFunctionOnNextCall(unreliable);
@ -531,7 +553,8 @@ var c = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25];
return v; return v;
} }
a.map(callback); a.map(callback);
} };
%PrepareFunctionForOptimization(species_breakage);
species_breakage(); species_breakage();
species_breakage(); species_breakage();
%OptimizeFunctionOnNextCall(species_breakage); %OptimizeFunctionOnNextCall(species_breakage);

View File

@ -22,6 +22,7 @@
return r + "S"; return r + "S";
}, "H"); }, "H");
} }
%PrepareFunctionForOptimization(eagerDeoptInCalled);
eagerDeoptInCalled(); eagerDeoptInCalled();
eagerDeoptInCalled(); eagerDeoptInCalled();
%OptimizeFunctionOnNextCall(eagerDeoptInCalled); %OptimizeFunctionOnNextCall(eagerDeoptInCalled);
@ -38,7 +39,8 @@
a = [,,,]; // also a holey smi array. a = [,,,]; // also a holey smi array.
} }
return a.reduce((r,v,i,o)=>r+v); return a.reduce((r,v,i,o)=>r+v);
} };
%PrepareFunctionForOptimization(nothingThere);
nothingThere(); nothingThere();
nothingThere(); nothingThere();
%OptimizeFunctionOnNextCall(nothingThere); %OptimizeFunctionOnNextCall(nothingThere);
@ -62,6 +64,7 @@
} catch (e) { } catch (e) {
assertTrue(re.exec(e.stack) !== null); assertTrue(re.exec(e.stack) !== null);
} }
%PrepareFunctionForOptimization(alwaysThrows);
try { alwaysThrows(); } catch (e) {} try { alwaysThrows(); } catch (e) {}
try { alwaysThrows(); } catch (e) {} try { alwaysThrows(); } catch (e) {}
%OptimizeFunctionOnNextCall(alwaysThrows); %OptimizeFunctionOnNextCall(alwaysThrows);

View File

@ -13,6 +13,7 @@ function f() {
r.test("ABcd"); r.test("ABcd");
} }
%PrepareFunctionForOptimization(f);
f(); f();
assertEquals(1, counter); assertEquals(1, counter);
%OptimizeFunctionOnNextCall(f); %OptimizeFunctionOnNextCall(f);

View File

@ -15,6 +15,7 @@ function add(a, b) {
return a.x + b.x; return a.x + b.x;
} }
%PrepareFunctionForOptimization(add);
assertEquals(3, add(f, g)); assertEquals(3, add(f, g));
assertEquals(3, add(g, f)); assertEquals(3, add(g, f));
%OptimizeFunctionOnNextCall(add); %OptimizeFunctionOnNextCall(add);

View File

@ -76,6 +76,11 @@ function testCall() {
obj(); obj();
} }
%PrepareFunctionForOptimization(testCompares);
%PrepareFunctionForOptimization(testIfs);
%PrepareFunctionForOptimization(testWhiles);
%PrepareFunctionForOptimization(testFors);
%PrepareFunctionForOptimization(testCall);
for (var j = 0; j < 5; j++) { for (var j = 0; j < 5; j++) {
testCompares(); testCompares();
testIfs(); testIfs();

View File

@ -49,6 +49,7 @@ function test(object, prototype) {
return s.strict; return s.strict;
} }
%PrepareFunctionForOptimization(nonstrict);
nonstrict(object); nonstrict(object);
nonstrict(object); nonstrict(object);
%OptimizeFunctionOnNextCall(nonstrict); %OptimizeFunctionOnNextCall(nonstrict);
@ -56,6 +57,7 @@ function test(object, prototype) {
nonstrict(object); nonstrict(object);
assertEquals("object", typeof result); assertEquals("object", typeof result);
%PrepareFunctionForOptimization(strict);
strict(object); strict(object);
strict(object); strict(object);
%OptimizeFunctionOnNextCall(strict); %OptimizeFunctionOnNextCall(strict);
@ -72,6 +74,7 @@ function test(object, prototype) {
return s.strict = 10; return s.strict = 10;
} }
%PrepareFunctionForOptimization(nonstrict);
nonstrict(object); nonstrict(object);
nonstrict(object); nonstrict(object);
%OptimizeFunctionOnNextCall(nonstrict); %OptimizeFunctionOnNextCall(nonstrict);
@ -79,6 +82,7 @@ function test(object, prototype) {
nonstrict(object); nonstrict(object);
assertEquals("object", typeof result); assertEquals("object", typeof result);
%PrepareFunctionForOptimization(strict);
strict(object); strict(object);
strict(object); strict(object);
%OptimizeFunctionOnNextCall(strict); %OptimizeFunctionOnNextCall(strict);