| //@ 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++) { | |
| if (a > b) | |
| result += a * b; | |
| else | |
| result += b * 1; | |
| } | |
| // 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 = 5000495600; | |
| } else { | |
| iterations = 100000; | |
| expectedResult = 500004995600; | |
| } | |
| 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; |