| //@ runFTLNoCJIT |
| var o1 = { |
| i: 0, |
| valueOf: function() { return this.i; } |
| }; |
| |
| result = 0; |
| function foo(a, b) { |
| var result = 0; |
| for (var j = 0; j < 10; j++) { |
| var temp; |
| if (a > b) |
| temp = a >> b; |
| else |
| temp = b >> 1; |
| result += temp; |
| } |
| |
| // Busy work just to allow the DFG and FTL to optimize this out. If the above causes |
| // us to speculation fail out to the baseline, this busy work will take a lot longer |
| // to run. |
| // This loop below also gets the DFG to compile this function sooner. |
| var origResult = result; |
| for (var i = 1; i < 1000; i++) |
| result = result >> i; |
| result = origResult > result ? origResult : result; |
| return result; |
| } |
| noInline(foo); |
| |
| var iterations; |
| var expectedResult; |
| if (this.window) { |
| // The layout test doesn't like too many iterations and may time out. |
| iterations = 10000; |
| expectedResult = 439840; |
| } else { |
| iterations = 100000; |
| expectedResult = 48330800; |
| } |
| |
| |
| for (var i = 0; i <= iterations; i++) { |
| o1.i = i; |
| if (i % 2) |
| result += foo(o1, 10); |
| else |
| result += foo(i, 10); |
| } |
| |
| if (result != expectedResult) |
| throw "Bad result: " + result; |