From 1a6efdb4233a077bc6e5e8a340baf5672bb5bced Mon Sep 17 00:00:00 2001 From: Alon Zakai Date: Mon, 29 Mar 2021 11:33:52 -0700 Subject: Inlining: Always inline single-use functions (#3730) This implements emscripten-core/emscripten#13744 Inlining functions with a single use allows us to remove the function afterward. That looks highly beneficial, shrinking every single benchmark in emscripten's benchmark suite, by an average of 2% on the macrobenchmarks and 3.5% on all of them. Speed also improves, although mostly on the microbenchmarks so that might be less realistic. There may be a slight downside to startup time due to emitting larger functions, but given the baseline compilers in VMs these days it seems worth it, as the delay would be just to get to the upper tier. On the benchmark suite the risk seems low. See more details in the PR above. --- test/wasm2js/unaligned.2asm.js.opt | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) (limited to 'test/wasm2js/unaligned.2asm.js.opt') diff --git a/test/wasm2js/unaligned.2asm.js.opt b/test/wasm2js/unaligned.2asm.js.opt index e5005fef5..1f0fd6f4c 100644 --- a/test/wasm2js/unaligned.2asm.js.opt +++ b/test/wasm2js/unaligned.2asm.js.opt @@ -56,11 +56,6 @@ function asmFunc(env) { return HEAPU8[0] | HEAPU8[1] << 8 | (HEAPU8[2] << 16 | HEAPU8[3] << 24); } - function $1() { - i64toi32_i32$HIGH_BITS = HEAPU8[4] | HEAPU8[5] << 8 | (HEAPU8[6] << 16 | HEAPU8[7] << 24); - return HEAPU8[0] | HEAPU8[1] << 8 | (HEAPU8[2] << 16 | HEAPU8[3] << 24); - } - function $2() { return Math_fround((wasm2js_scratch_store_i32(2, HEAPU8[0] | HEAPU8[1] << 8 | (HEAPU8[2] << 16 | HEAPU8[3] << 24)), wasm2js_scratch_load_f32())); } @@ -92,14 +87,14 @@ function asmFunc(env) { } function $7() { - var $0_1 = 0, $1_1 = 0; + var $0_1 = 0, $1 = 0; wasm2js_scratch_store_f64(0.0); $0_1 = wasm2js_scratch_load_i32(1) | 0; - $1_1 = wasm2js_scratch_load_i32(0) | 0; - HEAP8[0] = $1_1; - HEAP8[1] = $1_1 >>> 8; - HEAP8[2] = $1_1 >>> 16; - HEAP8[3] = $1_1 >>> 24; + $1 = wasm2js_scratch_load_i32(0) | 0; + HEAP8[0] = $1; + HEAP8[1] = $1 >>> 8; + HEAP8[2] = $1 >>> 16; + HEAP8[3] = $1 >>> 24; HEAP8[4] = $0_1; HEAP8[5] = $0_1 >>> 8; HEAP8[6] = $0_1 >>> 16; @@ -108,7 +103,8 @@ function asmFunc(env) { function legalstub$1() { var $0_1 = 0; - $0_1 = $1(); + i64toi32_i32$HIGH_BITS = HEAPU8[4] | HEAPU8[5] << 8 | (HEAPU8[6] << 16 | HEAPU8[7] << 24); + $0_1 = HEAPU8[0] | HEAPU8[1] << 8 | (HEAPU8[2] << 16 | HEAPU8[3] << 24); setTempRet0(i64toi32_i32$HIGH_BITS | 0); return $0_1; } -- cgit v1.2.3