summaryrefslogtreecommitdiff
path: root/test/wasm2js/stack-modified.2asm.js.opt
diff options
context:
space:
mode:
authorAlon Zakai <azakai@google.com>2021-03-29 11:33:52 -0700
committerGitHub <noreply@github.com>2021-03-29 11:33:52 -0700
commit1a6efdb4233a077bc6e5e8a340baf5672bb5bced (patch)
treef814f47930fe8a2312cd23848ea63ff7e13bb9dc /test/wasm2js/stack-modified.2asm.js.opt
parent9c1d69f6596b76fe83bff17709b92f8cc2054a31 (diff)
downloadbinaryen-1a6efdb4233a077bc6e5e8a340baf5672bb5bced.tar.gz
binaryen-1a6efdb4233a077bc6e5e8a340baf5672bb5bced.tar.bz2
binaryen-1a6efdb4233a077bc6e5e8a340baf5672bb5bced.zip
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.
Diffstat (limited to 'test/wasm2js/stack-modified.2asm.js.opt')
-rw-r--r--test/wasm2js/stack-modified.2asm.js.opt57
1 files changed, 22 insertions, 35 deletions
diff --git a/test/wasm2js/stack-modified.2asm.js.opt b/test/wasm2js/stack-modified.2asm.js.opt
index 60758cce0..f08671743 100644
--- a/test/wasm2js/stack-modified.2asm.js.opt
+++ b/test/wasm2js/stack-modified.2asm.js.opt
@@ -16,47 +16,34 @@ function asmFunc(env) {
var infinity = Infinity;
var setTempRet0 = env.setTempRet0;
var i64toi32_i32$HIGH_BITS = 0;
- function $0($0_1, $1) {
- $0_1 = $0_1 | 0;
- $1 = $1 | 0;
- var $2 = 0, $3 = 0, $4 = 0;
- $2 = $1;
- $3 = 1;
+ function legalstub$0($0, $1) {
+ var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0;
+ $4 = $1;
+ $2 = 1;
while (1) {
- if ($0_1 | $2) {
- $3 = _ZN17compiler_builtins3int3mul3Mul3mul17h070e9a1c69faec5bE($0_1, $2, $3, $4);
- $4 = i64toi32_i32$HIGH_BITS;
- $1 = $0_1;
- $0_1 = $0_1 - 1 | 0;
- $2 = $2 - ($1 >>> 0 < 1) | 0;
+ if ($0 | $4) {
+ $1 = $2 >>> 16 | 0;
+ $3 = $0 >>> 16 | 0;
+ $9 = Math_imul($1, $3);
+ $5 = $2 & 65535;
+ $6 = $0 & 65535;
+ $7 = Math_imul($5, $6);
+ $3 = ($7 >>> 16 | 0) + Math_imul($3, $5) | 0;
+ $1 = ($3 & 65535) + Math_imul($1, $6) | 0;
+ i64toi32_i32$HIGH_BITS = (Math_imul($2, $4) + $9 | 0) + Math_imul($0, $8) + ($3 >>> 16) + ($1 >>> 16) | 0;
+ $2 = $7 & 65535 | $1 << 16;
+ $8 = i64toi32_i32$HIGH_BITS;
+ $1 = $0;
+ $0 = $1 - 1 | 0;
+ $4 = $4 - ($1 >>> 0 < 1) | 0;
continue;
}
break;
};
- i64toi32_i32$HIGH_BITS = $4;
- return $3 | 0;
- }
-
- function legalstub$0($0_1, $1) {
- $0_1 = $0($0_1, $1);
+ i64toi32_i32$HIGH_BITS = $8;
+ $0 = $2;
setTempRet0(i64toi32_i32$HIGH_BITS | 0);
- return $0_1;
- }
-
- function _ZN17compiler_builtins3int3mul3Mul3mul17h070e9a1c69faec5bE($0_1, $1, $2, $3) {
- var $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0;
- $4 = $2 >>> 16 | 0;
- $5 = $0_1 >>> 16 | 0;
- $9 = Math_imul($4, $5);
- $6 = $2 & 65535;
- $7 = $0_1 & 65535;
- $8 = Math_imul($6, $7);
- $5 = ($8 >>> 16 | 0) + Math_imul($5, $6) | 0;
- $4 = ($5 & 65535) + Math_imul($4, $7) | 0;
- $0_1 = (Math_imul($1, $2) + $9 | 0) + Math_imul($0_1, $3) + ($5 >>> 16) + ($4 >>> 16) | 0;
- $1 = $8 & 65535 | $4 << 16;
- i64toi32_i32$HIGH_BITS = $0_1;
- return $1;
+ return $0;
}
return {