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