Skip to content

Commit af45940

Browse files
authored
wasm2js: don't run coalesce-locals if not optimizing (#2076)
That pass is very slow on unoptimized code (super-linear on the number of locals, which if unoptimized can be massive due to flatten).
1 parent 2bd3758 commit af45940

52 files changed

Lines changed: 22105 additions & 16967 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: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,11 @@ Ref Wasm2JSBuilder::processWasm(Module* wasm, Name funcName) {
295295
runner.add("remove-unused-names");
296296
runner.add("merge-blocks");
297297
runner.add("simplify-locals-notee-nostructure");
298-
runner.add("coalesce-locals");
298+
// Coalescing is slow if we didn't run full optimizations earlier, so don't
299+
// run it automatically.
300+
if (options.optimizeLevel > 0) {
301+
runner.add("coalesce-locals");
302+
}
299303
runner.add("reorder-locals");
300304
runner.add("vacuum");
301305
runner.add("remove-unused-module-elements");

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

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;
65+
function $2(x, y) {
66+
x = x | 0;
67+
y = y | 0;
68+
return (x | 0) / (y | 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($0_1, $1_1) {
60-
$0_1 = $0_1 | 0;
61-
$1_1 = $1_1 | 0;
62-
return $0_1 + $1_1 | 0 | 0;
59+
function $1(x, y) {
60+
x = x | 0;
61+
y = y | 0;
62+
return x + y | 0 | 0;
6363
}
6464

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;
65+
function $2(x, y) {
66+
x = x | 0;
67+
y = y | 0;
68+
return (x | 0) / (y | 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($0_1) {
27-
$0_1 = $0_1 | 0;
26+
function $0(i) {
27+
i = i | 0;
2828
var wasm2js_i32$0 = 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);
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);
4242
}
4343

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

4949
var FUNCTION_TABLE = [];

test/wasm2js/block.2asm.js

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

123123
function $13() {
124-
var $0 = 0, $1_1 = 0;
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;
125125
$0 = 0;
126+
$1_1 = $0;
126127
block : {
127-
$1_1 = 1;
128+
$2_1 = 1;
128129
break block;
129130
}
130-
$0 = $0 + $1_1 | 0;
131+
$0 = $1_1 + $2_1 | 0;
132+
$5_1 = $0;
131133
block49 : {
132134
break block49;
133135
}
134-
$0 = $0 + 2 | 0;
136+
$0 = $5_1 + 2 | 0;
137+
$9_1 = $0;
135138
block50 : {
136-
$1_1 = 4;
139+
$10_1 = 4;
137140
break block50;
138141
}
139-
$0 = $0 + $1_1 | 0;
142+
$0 = $9_1 + $10_1 | 0;
143+
$13_1 = $0;
140144
block51 : {
141-
$1_1 = 8;
145+
$14_1 = 8;
142146
break block51;
143147
}
144-
$0 = $0 + $1_1 | 0;
148+
$0 = $13_1 + $14_1 | 0;
145149
return $0 | 0;
146150
}
147151

@@ -157,10 +161,10 @@ function asmFunc(global, env, buffer) {
157161
return ($0 | 0) == (-14 | 0) | 0;
158162
}
159163

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
164+
function __wasm_ctz_i32(var$0) {
165+
var$0 = var$0 | 0;
166+
if (var$0) {
167+
return 31 - Math_clz32((var$0 + -1 | 0) ^ var$0 | 0) | 0 | 0
164168
}
165169
return 32 | 0;
166170
}

0 commit comments

Comments
 (0)