Skip to content

Commit 049a6a6

Browse files
authored
Improve pass pipeline. Refactor code folding (AssemblyScript#2156)
1 parent 273d7d1 commit 049a6a6

26 files changed

+7253
-7237
lines changed

src/module.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2311,6 +2311,7 @@ export class Module {
23112311
if (optimizeLevel >= 3 || shrinkLevel >= 1) {
23122312
passes.push("rse");
23132313
passes.push("vacuum");
2314+
passes.push("code-folding");
23142315
passes.push("ssa-nomerge");
23152316
passes.push("local-cse");
23162317
passes.push("remove-unused-brs");
@@ -2329,7 +2330,6 @@ export class Module {
23292330
passes.push("merge-locals");
23302331
passes.push("reorder-locals");
23312332
passes.push("dae-optimizing");
2332-
passes.push("code-folding");
23332333
}
23342334
passes.push("optimize-instructions");
23352335
if (optimizeLevel >= 3 || shrinkLevel >= 1) {
@@ -2400,9 +2400,6 @@ export class Module {
24002400
passes.push("simplify-globals");
24012401
passes.push("vacuum");
24022402
}
2403-
if (optimizeLevel >= 3 || shrinkLevel >= 1) {
2404-
passes.push("code-folding");
2405-
}
24062403
if (optimizeLevel >= 2 && (this.getFeatures() & FeatureFlags.GC) != 0) {
24072404
passes.push("heap2local");
24082405
passes.push("merge-locals");
@@ -2420,6 +2417,7 @@ export class Module {
24202417
passes.push("dae-optimizing"); // reduce arity
24212418
passes.push("inlining-optimizing"); // and inline if possible
24222419
if (optimizeLevel >= 2 || shrinkLevel >= 1) {
2420+
passes.push("code-folding");
24232421
passes.push("ssa-nomerge");
24242422
passes.push("rse");
24252423
// move code on early return (after CFG cleanup)
@@ -2452,6 +2450,7 @@ export class Module {
24522450
}
24532451
passes.push("remove-unused-brs");
24542452
passes.push("remove-unused-names");
2453+
passes.push("merge-blocks");
24552454
passes.push("vacuum");
24562455

24572456
passes.push("optimize-instructions");

tests/compiler/NonNullable.optimized.wat

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -138,11 +138,11 @@
138138
)
139139
(func $~start
140140
(local $0 i32)
141+
global.get $~lib/memory/__stack_pointer
142+
i32.const 12
143+
i32.sub
144+
global.set $~lib/memory/__stack_pointer
141145
block $folding-inner1
142-
global.get $~lib/memory/__stack_pointer
143-
i32.const 12
144-
i32.sub
145-
global.set $~lib/memory/__stack_pointer
146146
block $folding-inner0
147147
global.get $~lib/memory/__stack_pointer
148148
i32.const 1324

tests/compiler/call-super.optimized.wat

Lines changed: 46 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1598,43 +1598,43 @@
15981598
(local $0 i32)
15991599
(local $1 i32)
16001600
(local $2 i32)
1601+
memory.size
1602+
i32.const 16
1603+
i32.shl
1604+
i32.const 17980
1605+
i32.sub
1606+
i32.const 1
1607+
i32.shr_u
1608+
global.set $~lib/rt/itcms/threshold
1609+
i32.const 1220
1610+
i32.const 1216
1611+
i32.store
1612+
i32.const 1224
1613+
i32.const 1216
1614+
i32.store
1615+
i32.const 1216
1616+
global.set $~lib/rt/itcms/pinSpace
1617+
i32.const 1252
1618+
i32.const 1248
1619+
i32.store
1620+
i32.const 1256
1621+
i32.const 1248
1622+
i32.store
1623+
i32.const 1248
1624+
global.set $~lib/rt/itcms/toSpace
1625+
i32.const 1396
1626+
i32.const 1392
1627+
i32.store
1628+
i32.const 1400
1629+
i32.const 1392
1630+
i32.store
1631+
i32.const 1392
1632+
global.set $~lib/rt/itcms/fromSpace
1633+
global.get $~lib/memory/__stack_pointer
1634+
i32.const 4
1635+
i32.sub
1636+
global.set $~lib/memory/__stack_pointer
16011637
block $folding-inner1
1602-
memory.size
1603-
i32.const 16
1604-
i32.shl
1605-
i32.const 17980
1606-
i32.sub
1607-
i32.const 1
1608-
i32.shr_u
1609-
global.set $~lib/rt/itcms/threshold
1610-
i32.const 1220
1611-
i32.const 1216
1612-
i32.store
1613-
i32.const 1224
1614-
i32.const 1216
1615-
i32.store
1616-
i32.const 1216
1617-
global.set $~lib/rt/itcms/pinSpace
1618-
i32.const 1252
1619-
i32.const 1248
1620-
i32.store
1621-
i32.const 1256
1622-
i32.const 1248
1623-
i32.store
1624-
i32.const 1248
1625-
global.set $~lib/rt/itcms/toSpace
1626-
i32.const 1396
1627-
i32.const 1392
1628-
i32.store
1629-
i32.const 1400
1630-
i32.const 1392
1631-
i32.store
1632-
i32.const 1392
1633-
global.set $~lib/rt/itcms/fromSpace
1634-
global.get $~lib/memory/__stack_pointer
1635-
i32.const 4
1636-
i32.sub
1637-
global.set $~lib/memory/__stack_pointer
16381638
block $__inlined_func$call-super/test1
16391639
global.get $~lib/memory/__stack_pointer
16401640
i32.const 1596
@@ -1901,11 +1901,11 @@
19011901
i32.const 4
19021902
i32.sub
19031903
global.set $~lib/memory/__stack_pointer
1904-
block $folding-inner0
1904+
block $folding-inner01
19051905
global.get $~lib/memory/__stack_pointer
19061906
i32.const 1596
19071907
i32.lt_s
1908-
br_if $folding-inner0
1908+
br_if $folding-inner01
19091909
global.get $~lib/memory/__stack_pointer
19101910
local.tee $1
19111911
i32.const 0
@@ -1917,7 +1917,7 @@
19171917
global.get $~lib/memory/__stack_pointer
19181918
i32.const 1596
19191919
i32.lt_s
1920-
br_if $folding-inner0
1920+
br_if $folding-inner01
19211921
global.get $~lib/memory/__stack_pointer
19221922
local.tee $0
19231923
i32.const 0
@@ -1936,7 +1936,7 @@
19361936
global.get $~lib/memory/__stack_pointer
19371937
i32.const 1596
19381938
i32.lt_s
1939-
br_if $folding-inner0
1939+
br_if $folding-inner01
19401940
global.get $~lib/memory/__stack_pointer
19411941
i32.const 0
19421942
i32.store
@@ -2017,7 +2017,7 @@
20172017
global.get $~lib/memory/__stack_pointer
20182018
i32.const 1596
20192019
i32.lt_s
2020-
br_if $folding-inner0
2020+
br_if $folding-inner01
20212021
global.get $~lib/memory/__stack_pointer
20222022
local.tee $1
20232023
i32.const 0
@@ -2029,7 +2029,7 @@
20292029
global.get $~lib/memory/__stack_pointer
20302030
i32.const 1596
20312031
i32.lt_s
2032-
br_if $folding-inner0
2032+
br_if $folding-inner01
20332033
global.get $~lib/memory/__stack_pointer
20342034
local.tee $0
20352035
i32.const 0
@@ -2048,7 +2048,7 @@
20482048
global.get $~lib/memory/__stack_pointer
20492049
i32.const 1596
20502050
i32.lt_s
2051-
br_if $folding-inner0
2051+
br_if $folding-inner01
20522052
global.get $~lib/memory/__stack_pointer
20532053
i32.const 0
20542054
i32.store
@@ -2117,7 +2117,7 @@
21172117
global.get $~lib/memory/__stack_pointer
21182118
i32.const 1596
21192119
i32.lt_s
2120-
br_if $folding-inner0
2120+
br_if $folding-inner01
21212121
global.get $~lib/memory/__stack_pointer
21222122
local.tee $1
21232123
i32.const 0
@@ -2129,7 +2129,7 @@
21292129
global.get $~lib/memory/__stack_pointer
21302130
i32.const 1596
21312131
i32.lt_s
2132-
br_if $folding-inner0
2132+
br_if $folding-inner01
21332133
global.get $~lib/memory/__stack_pointer
21342134
local.tee $0
21352135
i32.const 0
@@ -2148,7 +2148,7 @@
21482148
global.get $~lib/memory/__stack_pointer
21492149
i32.const 1596
21502150
i32.lt_s
2151-
br_if $folding-inner0
2151+
br_if $folding-inner01
21522152
global.get $~lib/memory/__stack_pointer
21532153
i32.const 0
21542154
i32.store

tests/compiler/class-overloading.optimized.wat

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1553,11 +1553,11 @@
15531553
(local $0 i32)
15541554
(local $1 i32)
15551555
(local $2 i32)
1556+
global.get $~lib/memory/__stack_pointer
1557+
i32.const 8
1558+
i32.sub
1559+
global.set $~lib/memory/__stack_pointer
15561560
block $folding-inner1
1557-
global.get $~lib/memory/__stack_pointer
1558-
i32.const 8
1559-
i32.sub
1560-
global.set $~lib/memory/__stack_pointer
15611561
block $folding-inner0
15621562
global.get $~lib/memory/__stack_pointer
15631563
i32.const 1932

0 commit comments

Comments
 (0)