Skip to content

Commit 23808ad

Browse files
authored
use simplify-locals in wasm2asm, so the output is not horribly verbose with los of extra inefficient variables. this is more similar to the output we had before the flatten rewrite (#1229)
1 parent b66518f commit 23808ad

10 files changed

Lines changed: 380 additions & 1224 deletions

src/wasm2asm.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -387,6 +387,7 @@ Ref Wasm2AsmBuilder::processWasm(Module* wasm) {
387387
runner.add<AutoDrop>();
388388
runner.add("i64-to-i32-lowering");
389389
runner.add("flatten");
390+
runner.add("simplify-locals-notee-nostructure");
390391
runner.add("vacuum");
391392
runner.setDebug(flags.debug);
392393
runner.run();

test/address.2asm.js

Lines changed: 27 additions & 114 deletions
Original file line numberDiff line numberDiff line change
@@ -16,70 +16,32 @@ function asmFunc(global, env, buffer) {
1616
function $$0(i) {
1717
i = i | 0;
1818
var $$1 = 0, $$2 = 0, $$3 = 0, $$4 = 0, $$5 = 0, $$6 = 0, $$7 = 0, $$8 = 0, $$9 = 0, $$10 = 0, $$11 = 0, $$12 = 0, $$13 = 0, $$14 = 0, $$15 = 0, $$16 = 0, $$17 = 0, $$18 = 0, $$19 = 0, $$20 = 0, $$21 = 0, $$22 = 0, $$23 = 0, $$24 = 0, $$25 = 0, $$26 = 0, wasm2asm_i32$0 = 0;
19-
$$1 = i;
20-
$$2 = HEAPU8[$$1 >> 0] | 0;
21-
print($$2 | 0);
22-
$$3 = i;
23-
$$4 = HEAPU8[($$3 + 1 | 0) >> 0] | 0;
24-
print($$4 | 0);
25-
$$5 = i;
26-
$$6 = HEAPU8[($$5 + 2 | 0) >> 0] | 0;
27-
print($$6 | 0);
28-
$$7 = i;
29-
$$8 = HEAPU8[($$7 + 25 | 0) >> 0] | 0;
30-
print($$8 | 0);
31-
$$9 = i;
32-
$$10 = HEAPU16[$$9 >> 1] | 0;
33-
print($$10 | 0);
34-
$$11 = i;
35-
$$12 = (wasm2asm_i32$0 = $$11, HEAPU8[wasm2asm_i32$0 >> 0] | 0 | 0 | (HEAPU8[(wasm2asm_i32$0 + 1 | 0) >> 0] | 0 | 0) << 8);
36-
print($$12 | 0);
37-
$$13 = i;
38-
$$14 = (wasm2asm_i32$0 = $$13, HEAPU8[(wasm2asm_i32$0 + 1 | 0) >> 0] | 0 | 0 | (HEAPU8[(wasm2asm_i32$0 + 2 | 0) >> 0] | 0 | 0) << 8);
39-
print($$14 | 0);
40-
$$15 = i;
41-
$$16 = HEAPU16[($$15 + 2 | 0) >> 1] | 0;
42-
print($$16 | 0);
43-
$$17 = i;
44-
$$18 = (wasm2asm_i32$0 = $$17, HEAPU8[(wasm2asm_i32$0 + 25 | 0) >> 0] | 0 | 0 | (HEAPU8[(wasm2asm_i32$0 + 26 | 0) >> 0] | 0 | 0) << 8);
45-
print($$18 | 0);
46-
$$19 = i;
47-
$$20 = HEAPU32[$$19 >> 2] | 0;
48-
print($$20 | 0);
49-
$$21 = i;
50-
$$22 = (wasm2asm_i32$0 = $$21, HEAPU8[(wasm2asm_i32$0 + 1 | 0) >> 0] | 0 | 0 | (HEAPU8[(wasm2asm_i32$0 + 2 | 0) >> 0] | 0 | 0) << 8 | (HEAPU8[(wasm2asm_i32$0 + 3 | 0) >> 0] | 0 | 0) << 16 | (HEAPU8[(wasm2asm_i32$0 + 4 | 0) >> 0] | 0 | 0) << 24);
51-
print($$22 | 0);
52-
$$23 = i;
53-
$$24 = (wasm2asm_i32$0 = $$23, HEAPU8[(wasm2asm_i32$0 + 2 | 0) >> 0] | 0 | 0 | (HEAPU8[(wasm2asm_i32$0 + 3 | 0) >> 0] | 0 | 0) << 8 | (HEAPU8[(wasm2asm_i32$0 + 4 | 0) >> 0] | 0 | 0) << 16 | (HEAPU8[(wasm2asm_i32$0 + 5 | 0) >> 0] | 0 | 0) << 24);
54-
print($$24 | 0);
55-
$$25 = i;
56-
$$26 = (wasm2asm_i32$0 = $$25, HEAPU8[(wasm2asm_i32$0 + 25 | 0) >> 0] | 0 | 0 | (HEAPU8[(wasm2asm_i32$0 + 26 | 0) >> 0] | 0 | 0) << 8 | (HEAPU8[(wasm2asm_i32$0 + 27 | 0) >> 0] | 0 | 0) << 16 | (HEAPU8[(wasm2asm_i32$0 + 28 | 0) >> 0] | 0 | 0) << 24);
57-
print($$26 | 0);
19+
print(HEAPU8[i >> 0] | 0 | 0);
20+
print(HEAPU8[(i + 1 | 0) >> 0] | 0 | 0);
21+
print(HEAPU8[(i + 2 | 0) >> 0] | 0 | 0);
22+
print(HEAPU8[(i + 25 | 0) >> 0] | 0 | 0);
23+
print(HEAPU16[i >> 1] | 0 | 0);
24+
print((wasm2asm_i32$0 = i, HEAPU8[wasm2asm_i32$0 >> 0] | 0 | 0 | (HEAPU8[(wasm2asm_i32$0 + 1 | 0) >> 0] | 0 | 0) << 8) | 0);
25+
print((wasm2asm_i32$0 = i, HEAPU8[(wasm2asm_i32$0 + 1 | 0) >> 0] | 0 | 0 | (HEAPU8[(wasm2asm_i32$0 + 2 | 0) >> 0] | 0 | 0) << 8) | 0);
26+
print(HEAPU16[(i + 2 | 0) >> 1] | 0 | 0);
27+
print((wasm2asm_i32$0 = i, HEAPU8[(wasm2asm_i32$0 + 25 | 0) >> 0] | 0 | 0 | (HEAPU8[(wasm2asm_i32$0 + 26 | 0) >> 0] | 0 | 0) << 8) | 0);
28+
print(HEAPU32[i >> 2] | 0 | 0);
29+
print((wasm2asm_i32$0 = i, HEAPU8[(wasm2asm_i32$0 + 1 | 0) >> 0] | 0 | 0 | (HEAPU8[(wasm2asm_i32$0 + 2 | 0) >> 0] | 0 | 0) << 8 | (HEAPU8[(wasm2asm_i32$0 + 3 | 0) >> 0] | 0 | 0) << 16 | (HEAPU8[(wasm2asm_i32$0 + 4 | 0) >> 0] | 0 | 0) << 24) | 0);
30+
print((wasm2asm_i32$0 = i, HEAPU8[(wasm2asm_i32$0 + 2 | 0) >> 0] | 0 | 0 | (HEAPU8[(wasm2asm_i32$0 + 3 | 0) >> 0] | 0 | 0) << 8 | (HEAPU8[(wasm2asm_i32$0 + 4 | 0) >> 0] | 0 | 0) << 16 | (HEAPU8[(wasm2asm_i32$0 + 5 | 0) >> 0] | 0 | 0) << 24) | 0);
31+
print((wasm2asm_i32$0 = i, HEAPU8[(wasm2asm_i32$0 + 25 | 0) >> 0] | 0 | 0 | (HEAPU8[(wasm2asm_i32$0 + 26 | 0) >> 0] | 0 | 0) << 8 | (HEAPU8[(wasm2asm_i32$0 + 27 | 0) >> 0] | 0 | 0) << 16 | (HEAPU8[(wasm2asm_i32$0 + 28 | 0) >> 0] | 0 | 0) << 24) | 0);
5832
}
5933

6034
function $$1(i) {
6135
i = i | 0;
6236
var $$1 = 0, $$2 = 0;
63-
$$1 = i;
64-
$$2 = HEAPU32[($$1 + 4294967295 | 0) >> 2] | 0;
37+
HEAPU32[(i + 4294967295 | 0) >> 2] | 0;
6538
}
6639

6740
function __wasm_ctz_i32(x) {
6841
x = x | 0;
6942
var $$1 = 0, $$2 = 0, $$3 = 0, $$4 = 0, $$5 = 0, $$6 = 0, $$7 = 0, $$8 = 0, $$9 = 0, $$10 = 0;
70-
$$1 = x;
71-
$$2 = ($$1 | 0) == (0 | 0);
72-
if ($$2) $$9 = 32; else {
73-
$$3 = x;
74-
$$4 = x;
75-
$$5 = $$4 - 1 | 0;
76-
$$6 = $$3 ^ $$5 | 0;
77-
$$7 = Math_clz32($$6);
78-
$$8 = 31 - $$7 | 0;
79-
$$9 = $$8;
80-
}
81-
$$10 = $$9;
82-
return $$10 | 0;
43+
if ((x | 0) == (0 | 0)) $$9 = 32; else $$9 = 31 - Math_clz32(x ^ (x - 1 | 0) | 0) | 0;
44+
return $$9 | 0;
8345
}
8446

8547
function __wasm_popcnt_i32(x) {
@@ -88,80 +50,31 @@ function asmFunc(global, env, buffer) {
8850
count = 0;
8951
b : {
9052
l : do {
91-
$$2 = count;
92-
$$3 = x;
93-
$$4 = ($$3 | 0) == (0 | 0);
94-
$$5 = $$2;
95-
if ($$4) break b;
96-
$$6 = $$5;
97-
$$7 = x;
98-
$$8 = x;
99-
$$9 = $$8 - 1 | 0;
100-
$$10 = $$7 & $$9 | 0;
101-
x = $$10;
102-
$$11 = count;
103-
$$12 = $$11 + 1 | 0;
104-
count = $$12;
53+
$$5 = count;
54+
if ((x | 0) == (0 | 0)) break b;
55+
x = x & (x - 1 | 0) | 0;
56+
count = count + 1 | 0;
10557
continue l;
10658
break l;
10759
} while (1);
10860
};
109-
$$13 = $$5;
110-
$$14 = $$13;
111-
$$15 = $$14;
112-
return $$15 | 0;
61+
return $$5 | 0;
11362
}
11463

11564
function __wasm_rotl_i32(x, k) {
11665
x = x | 0;
11766
k = k | 0;
118-
var $$2 = 0, $$3 = 0, $$4 = 0, $$5 = 0, $$6 = 0, $$7 = 0, $$8 = 0, $$9 = 0, $$10 = 0, $$11 = 0, $$12 = 0, $$13 = 0, $$14 = 0, $$15 = 0, $$16 = 0, $$17 = 0, $$18 = 0, $$19 = 0, $$20 = 0;
119-
$$2 = k;
120-
$$3 = $$2 & 31 | 0;
121-
$$4 = 4294967295 >>> $$3 | 0;
122-
$$5 = x;
123-
$$6 = $$4 & $$5 | 0;
124-
$$7 = k;
125-
$$8 = $$7 & 31 | 0;
126-
$$9 = $$6 << $$8 | 0;
127-
$$10 = k;
128-
$$11 = $$10 & 31 | 0;
129-
$$12 = 32 - $$11 | 0;
130-
$$13 = 4294967295 << $$12 | 0;
131-
$$14 = x;
132-
$$15 = $$13 & $$14 | 0;
133-
$$16 = k;
134-
$$17 = $$16 & 31 | 0;
135-
$$18 = 32 - $$17 | 0;
136-
$$19 = $$15 >>> $$18 | 0;
137-
$$20 = $$9 | $$19 | 0;
138-
return $$20 | 0;
67+
var $$2 = 0, $$3 = 0, $$4 = 0, $$5 = 0, $$6 = 0, $$7 = 0, $$8 = 0, $$9 = 0, $$10 = 0, $$11 = 0, $$12 = 0, $$13 = 0, $$14 = 0, $$15 = 0, $$16 = 0, $$17 = 0, $$18 = 0, $$19 = 0, $$20 = 0, wasm2asm_i32$0 = 0;
68+
return ((4294967295 >>> (k & 31 | 0) | 0) & x | 0) << (k & 31 | 0) | 0 | (((4294967295 << (32 - (k & 31 | 0) | 0) | 0) & x | 0) >>> (32 - (k & 31 | 0) | 0) | 0) | 0 | 0;
69+
return wasm2asm_i32$0 | 0;
13970
}
14071

14172
function __wasm_rotr_i32(x, k) {
14273
x = x | 0;
14374
k = k | 0;
144-
var $$2 = 0, $$3 = 0, $$4 = 0, $$5 = 0, $$6 = 0, $$7 = 0, $$8 = 0, $$9 = 0, $$10 = 0, $$11 = 0, $$12 = 0, $$13 = 0, $$14 = 0, $$15 = 0, $$16 = 0, $$17 = 0, $$18 = 0, $$19 = 0, $$20 = 0;
145-
$$2 = k;
146-
$$3 = $$2 & 31 | 0;
147-
$$4 = 4294967295 << $$3 | 0;
148-
$$5 = x;
149-
$$6 = $$4 & $$5 | 0;
150-
$$7 = k;
151-
$$8 = $$7 & 31 | 0;
152-
$$9 = $$6 >>> $$8 | 0;
153-
$$10 = k;
154-
$$11 = $$10 & 31 | 0;
155-
$$12 = 32 - $$11 | 0;
156-
$$13 = 4294967295 >>> $$12 | 0;
157-
$$14 = x;
158-
$$15 = $$13 & $$14 | 0;
159-
$$16 = k;
160-
$$17 = $$16 & 31 | 0;
161-
$$18 = 32 - $$17 | 0;
162-
$$19 = $$15 << $$18 | 0;
163-
$$20 = $$9 | $$19 | 0;
164-
return $$20 | 0;
75+
var $$2 = 0, $$3 = 0, $$4 = 0, $$5 = 0, $$6 = 0, $$7 = 0, $$8 = 0, $$9 = 0, $$10 = 0, $$11 = 0, $$12 = 0, $$13 = 0, $$14 = 0, $$15 = 0, $$16 = 0, $$17 = 0, $$18 = 0, $$19 = 0, $$20 = 0, wasm2asm_i32$0 = 0;
76+
return ((4294967295 << (k & 31 | 0) | 0) & x | 0) >>> (k & 31 | 0) | 0 | (((4294967295 >>> (32 - (k & 31 | 0) | 0) | 0) & x | 0) << (32 - (k & 31 | 0) | 0) | 0) | 0 | 0;
77+
return wasm2asm_i32$0 | 0;
16578
}
16679

16780
return {

0 commit comments

Comments
 (0)