Skip to content

Commit f96d3fc

Browse files
authored
Improve pass pipeline (#1227)
1 parent 53e314c commit f96d3fc

File tree

62 files changed

+9840
-10328
lines changed

Some content is hidden

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

62 files changed

+9840
-10328
lines changed

Diff for: cli/asc.js

+29-17
Original file line numberDiff line numberDiff line change
@@ -694,48 +694,47 @@ exports.main = function main(argv, options, callback) {
694694

695695
// PassRunner::addDefaultGlobalOptimizationPrePasses
696696
add("duplicate-function-elimination");
697+
add("remove-unused-module-elements"); // differs
697698

698699
// PassRunner::addDefaultFunctionOptimizationPasses
699700
if (optimizeLevel >= 3 || shrinkLevel >= 1) {
700701
add("ssa-nomerge");
701702
}
702703
if (optimizeLevel >= 3) {
703-
add("simplify-locals-nostructure"); // differs
704+
add("flatten"); // differs
705+
add("simplify-locals-notee-nostructure"); // differs
704706
add("vacuum"); // differs
705-
add("reorder-locals"); // differs
707+
add("code-folding"); // differs
706708
add("flatten");
707709
add("local-cse");
710+
add("reorder-locals"); // differs
708711
}
709712
if (optimizeLevel >= 2 || shrinkLevel >= 1) { // differs
710713
add("rse");
714+
add("vacuum");
711715
}
712716
if (hasARC) { // differs
713717
if (optimizeLevel < 3) {
714718
add("flatten");
715719
}
716720
add("post-assemblyscript");
717721
}
722+
add("optimize-instructions"); // differs
723+
add("inlining"); // differs
718724
add("dce");
719725
add("remove-unused-brs");
720726
add("remove-unused-names");
721-
// add("optimize-instructions"); // differs move 2 lines above
727+
add("inlining-optimizing"); // differs
722728
if (optimizeLevel >= 2 || shrinkLevel >= 1) {
723729
add("pick-load-signs");
724730
add("simplify-globals-optimizing"); // differs
725731
}
726-
add("optimize-instructions"); // differs
727732
if (optimizeLevel >= 3 || shrinkLevel >= 2) {
728733
add("precompute-propagate");
729734
} else {
730735
add("precompute");
731736
}
732-
if (module.getLowMemoryUnused()) {
733-
if (optimizeLevel >= 3 || shrinkLevel >= 1) {
734-
add("optimize-added-constants-propagate");
735-
} else {
736-
add("optimize-added-constants");
737-
}
738-
}
737+
add("vacuum"); // differs
739738
// this will be done later (1)
740739
// if (optimizeLevel >= 2 || shrinkLevel >= 2) {
741740
// add("code-pushing");
@@ -776,25 +775,36 @@ exports.main = function main(argv, options, callback) {
776775
// } else {
777776
// add("precompute");
778777
// }
779-
add("optimize-instructions");
778+
if (optimizeLevel >= 3) {
779+
add("optimize-instructions");
780+
}
780781
if (optimizeLevel >= 2 || shrinkLevel >= 1) {
781782
add("rse");
782783
}
783784
add("vacuum");
784785
// PassRunner::addDefaultGlobalOptimizationPostPasses
785786
if (optimizeLevel >= 2 || shrinkLevel >= 1) {
787+
add("simplify-globals-optimizing"); // differs
786788
add("dae-optimizing");
787789
}
788790
if (optimizeLevel >= 2 || shrinkLevel >= 2) {
789791
add("inlining-optimizing");
790792
}
793+
if (module.getLowMemoryUnused()) {
794+
if (optimizeLevel >= 3 || shrinkLevel >= 1) {
795+
add("optimize-added-constants-propagate");
796+
} else {
797+
add("optimize-added-constants");
798+
}
799+
}
791800
// "duplicate-function-elimination" will better done later
792801
// add("duplicate-function-elimination");
793802
add("duplicate-import-elimination");
794803
if (optimizeLevel >= 2 || shrinkLevel >= 2) {
795804
add("simplify-globals-optimizing");
796805
} else {
797806
add("simplify-globals");
807+
add("vacuum"); // differs
798808
}
799809
// moved from (2)
800810
// it works better after globals optimizations like simplify-globals, inlining-optimizing and etc
@@ -814,28 +824,30 @@ exports.main = function main(argv, options, callback) {
814824
}
815825
if (optimizeLevel >= 2 || shrinkLevel >= 1) { // differs
816826
add("rse");
817-
// rearrange / reduce switch cases again
818-
add("remove-unused-brs");
819-
add("vacuum");
820-
821827
// move some code after early return which potentially could reduce computations
822828
// do this after CFG cleanup (originally it was done before)
823829
// moved from (1)
824830
add("code-pushing");
825831
if (optimizeLevel >= 3) {
826832
// this quite expensive so do this only for highest opt level
827833
add("simplify-globals");
834+
add("vacuum");
828835
// replace indirect calls with direct and inline if possible again.
836+
add("inlining-optimizing");
829837
add("directize");
830838
add("dae-optimizing");
831839
add("precompute-propagate");
832-
add("coalesce-locals");
840+
add("vacuum");
833841
add("merge-locals");
842+
add("coalesce-locals");
834843
add("simplify-locals-nostructure");
835844
add("vacuum");
836845
add("inlining-optimizing");
837846
add("precompute-propagate");
838847
}
848+
add("remove-unused-brs");
849+
add("remove-unused-names");
850+
add("vacuum");
839851
add("optimize-instructions");
840852
add("simplify-globals-optimizing");
841853
}

Diff for: tests/compiler/assert-nonnull.optimized.wat

+4-4
Original file line numberDiff line numberDiff line change
@@ -213,8 +213,8 @@
213213
(local $1 i32)
214214
local.get $0
215215
call_indirect (type $none_=>_i32)
216-
local.tee $0
217-
local.get $0
216+
local.tee $1
217+
local.get $1
218218
i32.eqz
219219
if
220220
i32.const 0
@@ -235,8 +235,8 @@
235235
local.get $0
236236
i32.load offset=4
237237
call_indirect (type $none_=>_i32)
238-
local.tee $0
239-
local.get $0
238+
local.tee $1
239+
local.get $1
240240
i32.eqz
241241
if
242242
i32.const 0

Diff for: tests/compiler/builtins.optimized.wat

+3-3
Original file line numberDiff line numberDiff line change
@@ -111,16 +111,16 @@
111111
local.set $2
112112
local.get $3
113113
if
114-
local.get $1
114+
local.get $0
115115
i32.load16_u
116116
local.tee $3
117-
local.get $0
117+
local.get $1
118118
i32.load16_u
119119
local.tee $4
120120
i32.ne
121121
if
122-
local.get $4
123122
local.get $3
123+
local.get $4
124124
i32.sub
125125
return
126126
end

Diff for: tests/compiler/comma.optimized.wat

+2-13
Original file line numberDiff line numberDiff line change
@@ -76,21 +76,10 @@
7676
global.set $comma/b
7777
i32.const 2
7878
global.set $comma/a
79-
global.get $comma/a
79+
i32.const 2
8080
global.set $comma/b
81-
global.get $comma/b
82-
global.set $comma/a
83-
global.get $comma/a
8481
i32.const 2
85-
i32.ne
86-
if
87-
i32.const 0
88-
i32.const 1040
89-
i32.const 18
90-
i32.const 1
91-
call $~lib/builtins/abort
92-
unreachable
93-
end
82+
global.set $comma/a
9483
global.get $comma/b
9584
i32.const 2
9685
i32.ne

0 commit comments

Comments
 (0)