Skip to content

Commit ae56b42

Browse files
committed
improve pass pipeline
1 parent 86a9c57 commit ae56b42

133 files changed

Lines changed: 225265 additions & 225440 deletions

File tree

Some content is hidden

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

src/module.ts

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2602,6 +2602,10 @@ export class Module {
26022602
binaryen._BinaryenSetAllowInliningFunctionsWithLoops(enabled);
26032603
}
26042604

2605+
setPartialInliningIfs(value: i32): void {
2606+
this.setPassArgument("partial-inlining-ifs", value.toString());
2607+
}
2608+
26052609
// meta (module)
26062610

26072611
getFeatures(): FeatureFlags {
@@ -2666,6 +2670,7 @@ export class Module {
26662670
this.setOneCallerInlineMaxSize(80);
26672671
this.setAllowInliningFunctionsWithLoops(false);
26682672
}
2673+
this.setPartialInliningIfs(optimizeLevel >= 2 ? 4 : 0);
26692674

26702675
// Pass order here differs substantially from Binaryen's defaults
26712676
// see: Binaryen/src/pass.cpp
@@ -2676,10 +2681,12 @@ export class Module {
26762681

26772682
passes.push("duplicate-function-elimination");
26782683
passes.push("remove-unused-module-elements"); // +
2684+
if (optimizeLevel >= 2) {
2685+
passes.push("once-reduction");
2686+
}
26792687

26802688
// --- PassRunner::addDefaultFunctionOptimizationPasses ---
26812689
if (optimizeLevel >= 2) {
2682-
passes.push("once-reduction");
26832690
passes.push("inlining");
26842691
passes.push("simplify-globals-optimizing");
26852692
}
@@ -2694,7 +2701,6 @@ export class Module {
26942701
passes.push("merge-blocks");
26952702
passes.push("precompute-propagate");
26962703
passes.push("simplify-globals-optimizing");
2697-
passes.push("gufa-optimizing");
26982704
passes.push("dae-optimizing");
26992705
}
27002706
if (this.getFeatures() & FeatureFlags.MultiValue) {
@@ -2709,16 +2715,19 @@ export class Module {
27092715
passes.push("vacuum");
27102716
passes.push("simplify-locals-notee-nostructure");
27112717
passes.push("vacuum");
2718+
passes.push("local-cse");
27122719
passes.push("licm");
27132720
passes.push("merge-locals");
27142721
passes.push("reorder-locals");
27152722
}
27162723
passes.push("optimize-instructions");
2717-
if (optimizeLevel >= 3 || shrinkLevel >= 1) {
2718-
passes.push("dce");
2724+
if (optimizeLevel >= 2) {
2725+
passes.push("avoid-reinterprets");
27192726
}
2727+
passes.push("dce");
27202728
passes.push("remove-unused-brs");
27212729
passes.push("remove-unused-names");
2730+
passes.push("merge-blocks");
27222731
if (optimizeLevel >= 3 || shrinkLevel >= 2) {
27232732
passes.push("inlining");
27242733
passes.push("precompute-propagate");
@@ -2762,6 +2771,7 @@ export class Module {
27622771
// --- PassRunner::addDefaultGlobalOptimizationPostPasses ---
27632772

27642773
if (optimizeLevel >= 2 || shrinkLevel >= 1) {
2774+
passes.push("generate-global-effects");
27652775
passes.push("simplify-globals-optimizing");
27662776
passes.push("dae-optimizing");
27672777
}
@@ -2797,6 +2807,10 @@ export class Module {
27972807
}
27982808
passes.push("directize"); // replace indirect with direct calls
27992809
passes.push("dae-optimizing"); // reduce arity
2810+
if (optimizeLevel >= 3 || shrinkLevel >= 1) {
2811+
// whole-program value-flow analysis
2812+
passes.push("gufa-optimizing");
2813+
}
28002814
passes.push("inlining-optimizing"); // and inline if possible
28012815
if (optimizeLevel >= 2 || shrinkLevel >= 1) {
28022816
passes.push("code-folding");
@@ -2844,6 +2858,7 @@ export class Module {
28442858

28452859
passes.push("simplify-globals-optimizing");
28462860
passes.push("reorder-globals");
2861+
passes.push("reorder-functions");
28472862
passes.push("remove-unused-brs");
28482863
passes.push("optimize-instructions");
28492864
}

tests/compiler/NonNullable.release.wat

Lines changed: 97 additions & 97 deletions
Original file line numberDiff line numberDiff line change
@@ -20,103 +20,6 @@
2020
(data $5.1 (i32.const 1272) "\02\00\00\00^\00\00\00U\00n\00e\00x\00p\00e\00c\00t\00e\00d\00 \00\'\00n\00u\00l\00l\00\'\00 \00(\00n\00o\00t\00 \00a\00s\00s\00i\00g\00n\00e\00d\00 \00o\00r\00 \00f\00a\00i\00l\00e\00d\00 \00c\00a\00s\00t\00)")
2121
(export "memory" (memory $0))
2222
(start $~start)
23-
(func $~start
24-
global.get $~lib/memory/__stack_pointer
25-
i32.const 8
26-
i32.sub
27-
global.set $~lib/memory/__stack_pointer
28-
block $folding-inner0
29-
global.get $~lib/memory/__stack_pointer
30-
i32.const 1388
31-
i32.lt_s
32-
br_if $folding-inner0
33-
global.get $~lib/memory/__stack_pointer
34-
i64.const 0
35-
i64.store
36-
i32.const 1056
37-
i32.const 1056
38-
call $~lib/string/String.__eq
39-
i32.eqz
40-
if
41-
i32.const 0
42-
i32.const 1088
43-
i32.const 3
44-
i32.const 1
45-
call $~lib/builtins/abort
46-
unreachable
47-
end
48-
i32.const 1136
49-
i32.const 1136
50-
call $~lib/string/String.__eq
51-
i32.eqz
52-
if
53-
i32.const 0
54-
i32.const 1088
55-
i32.const 4
56-
i32.const 1
57-
call $~lib/builtins/abort
58-
unreachable
59-
end
60-
i32.const 1168
61-
i32.const 1168
62-
call $~lib/string/String.__eq
63-
i32.eqz
64-
if
65-
i32.const 0
66-
i32.const 1088
67-
i32.const 5
68-
i32.const 1
69-
call $~lib/builtins/abort
70-
unreachable
71-
end
72-
global.get $~lib/memory/__stack_pointer
73-
i32.const 1248
74-
i32.store offset=4
75-
global.get $~lib/memory/__stack_pointer
76-
i32.const 1248
77-
i32.store
78-
call $NonNullable/assertNonNull<~lib/string/String>
79-
global.get $~lib/memory/__stack_pointer
80-
i32.const 1248
81-
i32.store
82-
global.get $~lib/memory/__stack_pointer
83-
i32.const 4
84-
i32.sub
85-
global.set $~lib/memory/__stack_pointer
86-
global.get $~lib/memory/__stack_pointer
87-
i32.const 1388
88-
i32.lt_s
89-
br_if $folding-inner0
90-
global.get $~lib/memory/__stack_pointer
91-
i32.const 0
92-
i32.store
93-
global.get $~lib/memory/__stack_pointer
94-
i32.const 1248
95-
i32.store
96-
call $~lib/string/String.__ne
97-
if
98-
global.get $~lib/memory/__stack_pointer
99-
i32.const 1248
100-
i32.store
101-
call $NonNullable/assertNonNull<~lib/string/String>
102-
end
103-
global.get $~lib/memory/__stack_pointer
104-
i32.const 4
105-
i32.add
106-
global.set $~lib/memory/__stack_pointer
107-
global.get $~lib/memory/__stack_pointer
108-
i32.const 8
109-
i32.add
110-
global.set $~lib/memory/__stack_pointer
111-
return
112-
end
113-
i32.const 34176
114-
i32.const 34224
115-
i32.const 1
116-
i32.const 1
117-
call $~lib/builtins/abort
118-
unreachable
119-
)
12023
(func $~lib/string/String.__eq (param $0 i32) (param $1 i32) (result i32)
12124
(local $2 i32)
12225
(local $3 i32)
@@ -351,4 +254,101 @@
351254
i32.add
352255
global.set $~lib/memory/__stack_pointer
353256
)
257+
(func $~start
258+
global.get $~lib/memory/__stack_pointer
259+
i32.const 8
260+
i32.sub
261+
global.set $~lib/memory/__stack_pointer
262+
block $folding-inner0
263+
global.get $~lib/memory/__stack_pointer
264+
i32.const 1388
265+
i32.lt_s
266+
br_if $folding-inner0
267+
global.get $~lib/memory/__stack_pointer
268+
i64.const 0
269+
i64.store
270+
i32.const 1056
271+
i32.const 1056
272+
call $~lib/string/String.__eq
273+
i32.eqz
274+
if
275+
i32.const 0
276+
i32.const 1088
277+
i32.const 3
278+
i32.const 1
279+
call $~lib/builtins/abort
280+
unreachable
281+
end
282+
i32.const 1136
283+
i32.const 1136
284+
call $~lib/string/String.__eq
285+
i32.eqz
286+
if
287+
i32.const 0
288+
i32.const 1088
289+
i32.const 4
290+
i32.const 1
291+
call $~lib/builtins/abort
292+
unreachable
293+
end
294+
i32.const 1168
295+
i32.const 1168
296+
call $~lib/string/String.__eq
297+
i32.eqz
298+
if
299+
i32.const 0
300+
i32.const 1088
301+
i32.const 5
302+
i32.const 1
303+
call $~lib/builtins/abort
304+
unreachable
305+
end
306+
global.get $~lib/memory/__stack_pointer
307+
i32.const 1248
308+
i32.store offset=4
309+
global.get $~lib/memory/__stack_pointer
310+
i32.const 1248
311+
i32.store
312+
call $NonNullable/assertNonNull<~lib/string/String>
313+
global.get $~lib/memory/__stack_pointer
314+
i32.const 1248
315+
i32.store
316+
global.get $~lib/memory/__stack_pointer
317+
i32.const 4
318+
i32.sub
319+
global.set $~lib/memory/__stack_pointer
320+
global.get $~lib/memory/__stack_pointer
321+
i32.const 1388
322+
i32.lt_s
323+
br_if $folding-inner0
324+
global.get $~lib/memory/__stack_pointer
325+
i32.const 0
326+
i32.store
327+
global.get $~lib/memory/__stack_pointer
328+
i32.const 1248
329+
i32.store
330+
call $~lib/string/String.__ne
331+
if
332+
global.get $~lib/memory/__stack_pointer
333+
i32.const 1248
334+
i32.store
335+
call $NonNullable/assertNonNull<~lib/string/String>
336+
end
337+
global.get $~lib/memory/__stack_pointer
338+
i32.const 4
339+
i32.add
340+
global.set $~lib/memory/__stack_pointer
341+
global.get $~lib/memory/__stack_pointer
342+
i32.const 8
343+
i32.add
344+
global.set $~lib/memory/__stack_pointer
345+
return
346+
end
347+
i32.const 34176
348+
i32.const 34224
349+
i32.const 1
350+
i32.const 1
351+
call $~lib/builtins/abort
352+
unreachable
353+
)
354354
)

tests/compiler/abi.release.wat

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@
33
(memory $0 1)
44
(data $0 (i32.const 1036) "\1c")
55
(data $0.1 (i32.const 1048) "\02\00\00\00\0c\00\00\00a\00b\00i\00.\00t\00s")
6-
(export "exported" (func $abi/exported))
7-
(export "exportedExported" (func $abi/exported))
8-
(export "exportedInternal" (func $abi/exported))
6+
(export "exported" (func $abi/exportedInternal))
7+
(export "exportedExported" (func $abi/exportedInternal))
8+
(export "exportedInternal" (func $abi/exportedInternal))
99
(export "memory" (memory $0))
10-
(func $abi/exported (result i32)
10+
(func $abi/exportedInternal (result i32)
1111
i32.const -128
1212
)
1313
)

0 commit comments

Comments
 (0)