Skip to content

Commit a5d11ed

Browse files
authored
Improve inlining thresholds for default optimization (#1475)
1 parent 041d35b commit a5d11ed

File tree

59 files changed

+11849
-9062
lines changed

Some content is hidden

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

59 files changed

+11849
-9062
lines changed

Diff for: src/module.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1496,9 +1496,9 @@ export class Module {
14961496
this.setAllowInliningFunctionsWithLoops(optimizeLevel >= 3);
14971497
} else {
14981498
this.setAlwaysInlineMaxSize(
1499-
optimizeLevel == 0 && shrinkLevel >= 0
1499+
optimizeLevel <= 1 || shrinkLevel >= 2
15001500
? 2
1501-
: 4
1501+
: 6
15021502
);
15031503
this.setFlexibleInlineMaxSize(65);
15041504
this.setOneCallerInlineMaxSize(80);

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

+8-8
Original file line numberDiff line numberDiff line change
@@ -139,9 +139,10 @@
139139
(local $1 i32)
140140
block $folding-inner0
141141
local.get $0
142+
local.tee $1
142143
i32.eqz
143144
br_if $folding-inner0
144-
local.get $0
145+
local.get $1
145146
call $~lib/array/Array<assert-nonnull/Foo|null>#__get
146147
local.tee $0
147148
local.get $0
@@ -165,9 +166,10 @@
165166
(local $1 i32)
166167
block $folding-inner0
167168
local.get $0
169+
local.tee $1
168170
i32.eqz
169171
br_if $folding-inner0
170-
local.get $0
172+
local.get $1
171173
call $~lib/array/Array<assert-nonnull/Foo|null>#__get
172174
local.tee $0
173175
local.get $0
@@ -208,12 +210,10 @@
208210
call_indirect (type $none_=>_i32)
209211
)
210212
(func $assert-nonnull/testRet (param $0 i32) (result i32)
211-
(local $1 i32)
212213
local.get $0
213214
i32.load
214215
call_indirect (type $none_=>_i32)
215-
local.tee $1
216-
local.get $1
216+
local.tee $0
217217
i32.eqz
218218
if
219219
i32.const 1040
@@ -223,6 +223,7 @@
223223
call $~lib/builtins/abort
224224
unreachable
225225
end
226+
local.get $0
226227
)
227228
(func $assert-nonnull/testObjFn (param $0 i32) (result i32)
228229
local.get $0
@@ -231,13 +232,11 @@
231232
call_indirect (type $none_=>_i32)
232233
)
233234
(func $assert-nonnull/testObjRet (param $0 i32) (result i32)
234-
(local $1 i32)
235235
local.get $0
236236
i32.load offset=4
237237
i32.load
238238
call_indirect (type $none_=>_i32)
239-
local.tee $1
240-
local.get $1
239+
local.tee $0
241240
i32.eqz
242241
if
243242
i32.const 1040
@@ -247,5 +246,6 @@
247246
call $~lib/builtins/abort
248247
unreachable
249248
end
249+
local.get $0
250250
)
251251
)

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

+26-28
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
(module
22
(type $none_=>_none (func))
33
(type $i32_=>_i32 (func (param i32) (result i32)))
4-
(type $f32_=>_f32 (func (param f32) (result f32)))
5-
(type $f64_=>_f64 (func (param f64) (result f64)))
64
(memory $0 0)
75
(global $binary/i (mut i32) (i32.const 0))
86
(global $binary/I (mut i64) (i64.const 0))
@@ -42,23 +40,9 @@
4240
end
4341
local.get $2
4442
)
45-
(func $~lib/math/NativeMathf.mod (param $0 f32) (result f32)
46-
local.get $0
47-
local.get $0
48-
f32.trunc
49-
f32.sub
50-
local.get $0
51-
f32.copysign
52-
)
53-
(func $~lib/math/NativeMath.mod (param $0 f64) (result f64)
54-
local.get $0
55-
local.get $0
56-
f64.trunc
57-
f64.sub
58-
local.get $0
59-
f64.copysign
60-
)
6143
(func $start:binary
44+
(local $0 f32)
45+
(local $1 f64)
6246
global.get $binary/i
6347
call $~lib/math/ipow32
6448
drop
@@ -174,9 +158,6 @@
174158
i64.const 0
175159
global.set $binary/I
176160
global.get $binary/f
177-
call $~lib/math/NativeMathf.mod
178-
drop
179-
global.get $binary/f
180161
f32.const 1
181162
f32.add
182163
global.set $binary/f
@@ -185,7 +166,12 @@
185166
f32.sub
186167
global.set $binary/f
187168
global.get $binary/f
188-
call $~lib/math/NativeMathf.mod
169+
local.tee $0
170+
local.get $0
171+
f32.trunc
172+
f32.sub
173+
local.get $0
174+
f32.copysign
189175
global.set $binary/f
190176
global.get $binary/f
191177
f32.const 1
@@ -196,12 +182,14 @@
196182
f32.sub
197183
global.set $binary/f
198184
global.get $binary/f
199-
call $~lib/math/NativeMathf.mod
185+
local.tee $0
186+
local.get $0
187+
f32.trunc
188+
f32.sub
189+
local.get $0
190+
f32.copysign
200191
global.set $binary/f
201192
global.get $binary/F
202-
call $~lib/math/NativeMath.mod
203-
drop
204-
global.get $binary/F
205193
f64.const 1
206194
f64.add
207195
global.set $binary/F
@@ -210,7 +198,12 @@
210198
f64.sub
211199
global.set $binary/F
212200
global.get $binary/F
213-
call $~lib/math/NativeMath.mod
201+
local.tee $1
202+
local.get $1
203+
f64.trunc
204+
f64.sub
205+
local.get $1
206+
f64.copysign
214207
global.set $binary/F
215208
global.get $binary/F
216209
f64.const 1
@@ -221,7 +214,12 @@
221214
f64.sub
222215
global.set $binary/F
223216
global.get $binary/F
224-
call $~lib/math/NativeMath.mod
217+
local.tee $1
218+
local.get $1
219+
f64.trunc
220+
f64.sub
221+
local.get $1
222+
f64.copysign
225223
global.set $binary/F
226224
)
227225
(func $~start

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

+11-11
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
(type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
33
(type $none_=>_none (func))
44
(type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
5-
(type $i32_=>_i32 (func (param i32) (result i32)))
65
(type $i32_i32_f64_f64_f64_f64_f64_=>_none (func (param i32 i32 f64 f64 f64 f64 f64)))
6+
(type $i32_=>_i32 (func (param i32) (result i32)))
77
(type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
88
(import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
99
(import "env" "trace" (func $~lib/builtins/trace (param i32 i32 f64 f64 f64 f64 f64)))
@@ -49,14 +49,6 @@
4949
local.get $1
5050
i32.add
5151
)
52-
(func $~lib/string/String#get:length (param $0 i32) (result i32)
53-
local.get $0
54-
i32.const 16
55-
i32.sub
56-
i32.load offset=12
57-
i32.const 1
58-
i32.shr_u
59-
)
6052
(func $~lib/util/string/compareImpl (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
6153
(local $3 i32)
6254
(local $4 i32)
@@ -150,10 +142,18 @@
150142
select
151143
br_if $folding-inner0
152144
local.get $0
153-
call $~lib/string/String#get:length
145+
i32.const 16
146+
i32.sub
147+
i32.load offset=12
148+
i32.const 1
149+
i32.shr_u
154150
local.tee $2
155151
local.get $1
156-
call $~lib/string/String#get:length
152+
i32.const 16
153+
i32.sub
154+
i32.load offset=12
155+
i32.const 1
156+
i32.shr_u
157157
i32.ne
158158
br_if $folding-inner0
159159
local.get $0

Diff for: tests/compiler/call-optional.optimized.wat

+3-23
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,6 @@
1111
(global $~argumentsLength (mut i32) (i32.const 0))
1212
(export "memory" (memory $0))
1313
(start $~start)
14-
(func $call-optional/opt (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
15-
local.get $2
16-
local.get $0
17-
local.get $1
18-
i32.add
19-
i32.add
20-
)
2114
(func $call-optional/opt@varargs (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
2215
block $2of2
2316
block $1of2
@@ -36,10 +29,11 @@
3629
i32.const -2
3730
local.set $2
3831
end
32+
local.get $2
3933
local.get $0
4034
local.get $1
41-
local.get $2
42-
call $call-optional/opt
35+
i32.add
36+
i32.add
4337
)
4438
(func $start:call-optional
4539
i32.const 1
@@ -72,20 +66,6 @@
7266
call $~lib/builtins/abort
7367
unreachable
7468
end
75-
i32.const 3
76-
i32.const 4
77-
i32.const 5
78-
call $call-optional/opt
79-
i32.const 12
80-
i32.ne
81-
if
82-
i32.const 0
83-
i32.const 1040
84-
i32.const 6
85-
i32.const 1
86-
call $~lib/builtins/abort
87-
unreachable
88-
end
8969
i32.const 1
9070
global.set $~argumentsLength
9171
i32.const 3

Diff for: tests/compiler/class-implements.optimized.wat

+2-2
Original file line numberDiff line numberDiff line change
@@ -97,8 +97,8 @@
9797
(func $~start
9898
i32.const 1088
9999
global.set $~lib/rt/stub/offset
100-
i32.const 0
101-
call $class-implements/A#constructor
100+
i32.const 3
101+
call $~lib/rt/stub/__alloc
102102
drop
103103
i32.const 5
104104
call $~lib/rt/stub/__alloc

Diff for: tests/compiler/class-overloading.optimized.wat

+21-23
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
(module
2-
(type $i32_=>_i32 (func (param i32) (result i32)))
32
(type $none_=>_none (func))
43
(type $i32_=>_none (func (param i32)))
4+
(type $i32_=>_i32 (func (param i32) (result i32)))
55
(type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
66
(type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
77
(type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
@@ -105,14 +105,6 @@
105105
call $~lib/rt/stub/__alloc
106106
end
107107
)
108-
(func $~lib/string/String#get:length (param $0 i32) (result i32)
109-
local.get $0
110-
i32.const 16
111-
i32.sub
112-
i32.load offset=12
113-
i32.const 1
114-
i32.shr_u
115-
)
116108
(func $~lib/util/string/compareImpl (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
117109
(local $3 i32)
118110
(local $4 i32)
@@ -206,10 +198,18 @@
206198
select
207199
br_if $folding-inner0
208200
local.get $0
209-
call $~lib/string/String#get:length
201+
i32.const 16
202+
i32.sub
203+
i32.load offset=12
204+
i32.const 1
205+
i32.shr_u
210206
local.tee $2
211207
local.get $1
212-
call $~lib/string/String#get:length
208+
i32.const 16
209+
i32.sub
210+
i32.load offset=12
211+
i32.const 1
212+
i32.shr_u
213213
i32.ne
214214
br_if $folding-inner0
215215
local.get $0
@@ -239,25 +239,22 @@
239239
i32.const 1184
240240
global.set $class-overloading/which
241241
)
242-
(func $class-overloading/D#constructor (param $0 i32) (result i32)
242+
(func $class-overloading/E#constructor (param $0 i32) (result i32)
243243
local.get $0
244-
if (result i32)
245-
local.get $0
246-
else
247-
i32.const 6
244+
i32.eqz
245+
if
246+
i32.const 7
248247
call $~lib/rt/stub/__alloc
248+
local.set $0
249249
end
250-
call $class-overloading/B#constructor
251-
)
252-
(func $class-overloading/E#constructor (param $0 i32) (result i32)
253250
local.get $0
254251
if (result i32)
255252
local.get $0
256253
else
257-
i32.const 7
254+
i32.const 6
258255
call $~lib/rt/stub/__alloc
259256
end
260-
call $class-overloading/D#constructor
257+
call $class-overloading/B#constructor
261258
)
262259
(func $start:class-overloading
263260
i32.const 1296
@@ -392,8 +389,9 @@
392389
call $~lib/builtins/abort
393390
unreachable
394391
end
395-
i32.const 0
396-
call $class-overloading/D#constructor
392+
i32.const 6
393+
call $~lib/rt/stub/__alloc
394+
call $class-overloading/B#constructor
397395
global.set $class-overloading/a
398396
i32.const 1040
399397
global.set $class-overloading/which

0 commit comments

Comments
 (0)