michael@0: function lameFunc(x, y) { michael@0: var lsw = (x & 0xFFFF) + (y & 0xFFFF); michael@0: var msw = (x >> 16) + (y >> 16) + (lsw >> 16); michael@0: return (msw << 16) | (lsw & 0xFFFF); michael@0: } michael@0: michael@0: function runSomeTimes(func, iters) { michael@0: var result; michael@0: for (var i = 0; i < iters; ++i) { michael@0: result = func(42, 42); michael@0: result = func(42, 42); michael@0: } michael@0: return result; michael@0: } michael@0: michael@0: // First, run the inner function to get TI information. michael@0: for (var i = 0; i < 100; ++i) michael@0: lameFunc(42, 42); michael@0: michael@0: // Then, run the outer function with the inner function as a CALLARG to get it michael@0: // to Ion compile with inlining. michael@0: for (var i = 0; i < 11000; ++i) michael@0: runSomeTimes(lameFunc, 1); michael@0: michael@0: // Lastly, now that we're all inlined and compiled, perform the test! michael@0: var iterations = 100; michael@0: assertEq(84, runSomeTimes(lameFunc, iterations));