Skip to content

Commit 73709b4

Browse files
authored
wasm2js: run more optimizations (#2073)
In particular, coalesce-locals is useful even if closure is run later (apparently it finds stuff closure can't).
1 parent ac93469 commit 73709b4

63 files changed

Lines changed: 17249 additions & 22435 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

src/wasm2js.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -291,10 +291,11 @@ Ref Wasm2JSBuilder::processWasm(Module* wasm, Name funcName) {
291291
// Finally, get the code into the flat form we need for wasm2js itself, and
292292
// optimize that a little in a way that keeps flat property.
293293
runner.add("flatten");
294+
runner.add("remove-unused-names");
295+
runner.add("merge-blocks");
294296
runner.add("simplify-locals-notee-nostructure");
295-
// TODO: coalesce-locals?
297+
runner.add("coalesce-locals");
296298
runner.add("reorder-locals");
297-
runner.add("remove-unused-names");
298299
runner.add("vacuum");
299300
runner.add("remove-unused-module-elements");
300301
runner.setDebug(flags.debug);

test/wasm2js.asserts.js

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -56,16 +56,16 @@ function asmFunc0(global, env, buffer) {
5656

5757
}
5858

59-
function $1(x, y) {
60-
x = x | 0;
61-
y = y | 0;
62-
return x + y | 0 | 0;
59+
function $1($0_1, $1_1) {
60+
$0_1 = $0_1 | 0;
61+
$1_1 = $1_1 | 0;
62+
return $0_1 + $1_1 | 0 | 0;
6363
}
6464

65-
function $2(x, y) {
66-
x = x | 0;
67-
y = y | 0;
68-
return (x | 0) / (y | 0) | 0 | 0;
65+
function $2($0_1, $1_1) {
66+
$0_1 = $0_1 | 0;
67+
$1_1 = $1_1 | 0;
68+
return ($0_1 | 0) / ($1_1 | 0) | 0 | 0;
6969
}
7070

7171
var FUNCTION_TABLE = [];

test/wasm2js.traps.js

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -56,16 +56,16 @@ function asmFunc0(global, env, buffer) {
5656

5757
}
5858

59-
function $1(x, y) {
60-
x = x | 0;
61-
y = y | 0;
62-
return x + y | 0 | 0;
59+
function $1($0_1, $1_1) {
60+
$0_1 = $0_1 | 0;
61+
$1_1 = $1_1 | 0;
62+
return $0_1 + $1_1 | 0 | 0;
6363
}
6464

65-
function $2(x, y) {
66-
x = x | 0;
67-
y = y | 0;
68-
return (x | 0) / (y | 0) | 0 | 0;
65+
function $2($0_1, $1_1) {
66+
$0_1 = $0_1 | 0;
67+
$1_1 = $1_1 | 0;
68+
return ($0_1 | 0) / ($1_1 | 0) | 0 | 0;
6969
}
7070

7171
var FUNCTION_TABLE = [];

test/wasm2js/address.2asm.js

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -23,27 +23,27 @@ function asmFunc(global, env, buffer) {
2323
var nan = global.NaN;
2424
var infinity = global.Infinity;
2525
var print = env.print;
26-
function $0(i) {
27-
i = i | 0;
26+
function $0($0_1) {
27+
$0_1 = $0_1 | 0;
2828
var wasm2js_i32$0 = 0;
29-
print(HEAPU8[i >> 0] | 0 | 0);
30-
print(HEAPU8[(i + 1 | 0) >> 0] | 0 | 0);
31-
print(HEAPU8[(i + 2 | 0) >> 0] | 0 | 0);
32-
print(HEAPU8[(i + 25 | 0) >> 0] | 0 | 0);
33-
print(HEAPU16[i >> 1] | 0 | 0);
34-
print((wasm2js_i32$0 = i, HEAPU8[wasm2js_i32$0 >> 0] | 0 | 0 | (HEAPU8[(wasm2js_i32$0 + 1 | 0) >> 0] | 0 | 0) << 8) | 0);
35-
print((wasm2js_i32$0 = i, HEAPU8[(wasm2js_i32$0 + 1 | 0) >> 0] | 0 | 0 | (HEAPU8[(wasm2js_i32$0 + 2 | 0) >> 0] | 0 | 0) << 8) | 0);
36-
print(HEAPU16[(i + 2 | 0) >> 1] | 0 | 0);
37-
print((wasm2js_i32$0 = i, HEAPU8[(wasm2js_i32$0 + 25 | 0) >> 0] | 0 | 0 | (HEAPU8[(wasm2js_i32$0 + 26 | 0) >> 0] | 0 | 0) << 8) | 0);
38-
print(HEAP32[i >> 2] | 0 | 0);
39-
print((wasm2js_i32$0 = i, HEAPU8[(wasm2js_i32$0 + 1 | 0) >> 0] | 0 | 0 | (HEAPU8[(wasm2js_i32$0 + 2 | 0) >> 0] | 0 | 0) << 8 | (HEAPU8[(wasm2js_i32$0 + 3 | 0) >> 0] | 0 | 0) << 16 | (HEAPU8[(wasm2js_i32$0 + 4 | 0) >> 0] | 0 | 0) << 24) | 0);
40-
print((wasm2js_i32$0 = i, HEAPU8[(wasm2js_i32$0 + 2 | 0) >> 0] | 0 | 0 | (HEAPU8[(wasm2js_i32$0 + 3 | 0) >> 0] | 0 | 0) << 8 | (HEAPU8[(wasm2js_i32$0 + 4 | 0) >> 0] | 0 | 0) << 16 | (HEAPU8[(wasm2js_i32$0 + 5 | 0) >> 0] | 0 | 0) << 24) | 0);
41-
print((wasm2js_i32$0 = i, HEAPU8[(wasm2js_i32$0 + 25 | 0) >> 0] | 0 | 0 | (HEAPU8[(wasm2js_i32$0 + 26 | 0) >> 0] | 0 | 0) << 8 | (HEAPU8[(wasm2js_i32$0 + 27 | 0) >> 0] | 0 | 0) << 16 | (HEAPU8[(wasm2js_i32$0 + 28 | 0) >> 0] | 0 | 0) << 24) | 0);
29+
print(HEAPU8[$0_1 >> 0] | 0 | 0);
30+
print(HEAPU8[($0_1 + 1 | 0) >> 0] | 0 | 0);
31+
print(HEAPU8[($0_1 + 2 | 0) >> 0] | 0 | 0);
32+
print(HEAPU8[($0_1 + 25 | 0) >> 0] | 0 | 0);
33+
print(HEAPU16[$0_1 >> 1] | 0 | 0);
34+
print((wasm2js_i32$0 = $0_1, HEAPU8[wasm2js_i32$0 >> 0] | 0 | 0 | (HEAPU8[(wasm2js_i32$0 + 1 | 0) >> 0] | 0 | 0) << 8) | 0);
35+
print((wasm2js_i32$0 = $0_1, HEAPU8[(wasm2js_i32$0 + 1 | 0) >> 0] | 0 | 0 | (HEAPU8[(wasm2js_i32$0 + 2 | 0) >> 0] | 0 | 0) << 8) | 0);
36+
print(HEAPU16[($0_1 + 2 | 0) >> 1] | 0 | 0);
37+
print((wasm2js_i32$0 = $0_1, HEAPU8[(wasm2js_i32$0 + 25 | 0) >> 0] | 0 | 0 | (HEAPU8[(wasm2js_i32$0 + 26 | 0) >> 0] | 0 | 0) << 8) | 0);
38+
print(HEAP32[$0_1 >> 2] | 0 | 0);
39+
print((wasm2js_i32$0 = $0_1, HEAPU8[(wasm2js_i32$0 + 1 | 0) >> 0] | 0 | 0 | (HEAPU8[(wasm2js_i32$0 + 2 | 0) >> 0] | 0 | 0) << 8 | (HEAPU8[(wasm2js_i32$0 + 3 | 0) >> 0] | 0 | 0) << 16 | (HEAPU8[(wasm2js_i32$0 + 4 | 0) >> 0] | 0 | 0) << 24) | 0);
40+
print((wasm2js_i32$0 = $0_1, HEAPU8[(wasm2js_i32$0 + 2 | 0) >> 0] | 0 | 0 | (HEAPU8[(wasm2js_i32$0 + 3 | 0) >> 0] | 0 | 0) << 8 | (HEAPU8[(wasm2js_i32$0 + 4 | 0) >> 0] | 0 | 0) << 16 | (HEAPU8[(wasm2js_i32$0 + 5 | 0) >> 0] | 0 | 0) << 24) | 0);
41+
print((wasm2js_i32$0 = $0_1, HEAPU8[(wasm2js_i32$0 + 25 | 0) >> 0] | 0 | 0 | (HEAPU8[(wasm2js_i32$0 + 26 | 0) >> 0] | 0 | 0) << 8 | (HEAPU8[(wasm2js_i32$0 + 27 | 0) >> 0] | 0 | 0) << 16 | (HEAPU8[(wasm2js_i32$0 + 28 | 0) >> 0] | 0 | 0) << 24) | 0);
4242
}
4343

44-
function $1(i) {
45-
i = i | 0;
46-
HEAP32[(i + 4294967295 | 0) >> 2] | 0;
44+
function $1($0_1) {
45+
$0_1 = $0_1 | 0;
46+
HEAP32[($0_1 + 4294967295 | 0) >> 2] | 0;
4747
}
4848

4949
var FUNCTION_TABLE = [];

test/wasm2js/block.2asm.js

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -121,28 +121,27 @@ function asmFunc(global, env, buffer) {
121121
}
122122

123123
function $13() {
124-
var $0 = 0, $1_1 = 0, $2_1 = 0, $5_1 = 0, $9_1 = 0, $10_1 = 0, $13_1 = 0, $14_1 = 0;
124+
var $0 = 0, $1_1 = 0;
125125
$0 = 0;
126-
$1_1 = $0;
127126
block : {
128-
$2_1 = 1;
127+
$1_1 = 1;
129128
break block;
130129
}
131-
$0 = $1_1 + $2_1 | 0;
132-
$5_1 = $0;
133-
$0 = $5_1 + 2 | 0;
134-
$9_1 = $0;
130+
$0 = $0 + $1_1 | 0;
131+
block49 : {
132+
break block49;
133+
}
134+
$0 = $0 + 2 | 0;
135135
block50 : {
136-
$10_1 = 4;
136+
$1_1 = 4;
137137
break block50;
138138
}
139-
$0 = $9_1 + $10_1 | 0;
140-
$13_1 = $0;
139+
$0 = $0 + $1_1 | 0;
141140
block51 : {
142-
$14_1 = 8;
141+
$1_1 = 8;
143142
break block51;
144143
}
145-
$0 = $13_1 + $14_1 | 0;
144+
$0 = $0 + $1_1 | 0;
146145
return $0 | 0;
147146
}
148147

@@ -158,10 +157,10 @@ function asmFunc(global, env, buffer) {
158157
return ($0 | 0) == (-14 | 0) | 0;
159158
}
160159

161-
function __wasm_ctz_i32(var$0) {
162-
var$0 = var$0 | 0;
163-
if (var$0) {
164-
return 31 - Math_clz32((var$0 + -1 | 0) ^ var$0 | 0) | 0 | 0
160+
function __wasm_ctz_i32($0) {
161+
$0 = $0 | 0;
162+
if ($0) {
163+
return 31 - Math_clz32(($0 + -1 | 0) ^ $0 | 0) | 0 | 0
165164
}
166165
return 32 | 0;
167166
}

0 commit comments

Comments
 (0)