diff options
-rwxr-xr-x | tests/runner.py | 2 | ||||
-rw-r--r-- | tools/js-optimizer.js | 8 |
2 files changed, 9 insertions, 1 deletions
diff --git a/tests/runner.py b/tests/runner.py index 8ec4591a..b1a9e6b1 100755 --- a/tests/runner.py +++ b/tests/runner.py @@ -10842,7 +10842,7 @@ f.close() for engine in JS_ENGINES: out = run_js('test.js', engine=engine, stderr=PIPE, full_output=True) self.assertContained(expected, out) - #if engine == SPIDERMONKEY_ENGINE: self.validate_asmjs(out) + if engine == SPIDERMONKEY_ENGINE: self.validate_asmjs(out) low = expected_ranges[outlining_limit][0] seen = max(measure_funcs('test.js').values()) high = expected_ranges[outlining_limit][1] diff --git a/tools/js-optimizer.js b/tools/js-optimizer.js index c1ba41ec..5d883bc3 100644 --- a/tools/js-optimizer.js +++ b/tools/js-optimizer.js @@ -3291,6 +3291,14 @@ function outline(ast) { } // replace in stats stats.splice.apply(stats, [start, end-start+1].concat(reps)); + // if we just removed a final return from the original function, add one + var last = getStatements(func)[getStatements(func).length-1]; + if (last[0] === 'stat') last = last[1]; + if (last[0] !== 'return') { + if (allCodeInfo.hasReturnInt || allCodeInfo.hasReturnDouble) { + getStatements(func).push(['stat', ['return', makeAsmCoercion(['num', 0], allCodeInfo.hasReturnInt ? ASM_INT : ASM_DOUBLE)]]); + } + } return [newFunc]; } |