[JSC] Clean up Object.entries implementation
[WebKit-https.git] / JSTests / microbenchmarks / ftl-polymorphic-sub.js
1 //@ runFTLNoCJIT
2 var o1 = {
3     i: 0,
4     valueOf: function() { return this.i; }
5 };
6 var o2 = {
7     i: 0,
8     valueOf: function() { return this.i; }
9 };
10
11 result = 0;
12 function foo(a, b) {
13     var result = 0;
14     for (var j = 0; j < 10; j++) {
15         if (a > b)
16             result += a - b;
17         else
18             result += b - 1;
19     }
20
21     // Busy work just to allow the DFG and FTL to optimize this out. If the above causes
22     // us to speculation fail out to the baseline, this busy work will take a lot longer
23     // to run.
24     // This loop below also gets the DFG to compile this function sooner.
25     var origResult = result;
26     for (var i = 1; i < 1000; i++)
27         result = result - i;
28     result = origResult < result ? origResult : result;
29     return result;
30 }
31 noInline(foo);
32
33 var iterations;
34 var expectedResult;
35 if (this.window) {
36     // The layout test doesn't like too many iterations and may time out.
37     iterations = 10000;
38     expectedResult = -4496448060;
39 } else {
40     iterations = 100000;
41     expectedResult = 40001940;
42 }
43
44
45 for (var i = 0; i <= iterations; i++) {
46     o1.i = i;
47     if (i % 2)
48         result += foo(o1, 10);
49     else
50         result += foo(i, 10);
51 }
52
53 if (result != expectedResult)
54     throw "Bad result: " + result;