Skip to content

Commit 69e6b8a

Browse files
committed
Make it possible to skip several passes
1 parent 9792f2c commit 69e6b8a

File tree

2 files changed

+72
-1
lines changed

2 files changed

+72
-1
lines changed

src/tools/optimization-options.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -293,7 +293,7 @@ struct OptimizationOptions : public ToolOptions {
293293
"-sp",
294294
"Skip a pass (do not run it)",
295295
OptimizationOptionsCategory,
296-
Options::Arguments::One,
296+
Options::Arguments::N,
297297
[this](Options*, const std::string& pass) {
298298
passOptions.passesToSkip.insert(pass);
299299
});
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
;; RUN: foreach %s %t wasm-opt -O2 --skip-pass=coalesce-locals --skip-pass=simplify-locals--skip-pass=simplify-locals-nostructure -S -o - 2>&1 | filecheck %s
2+
3+
;; Check that we can skip several passes. Note that no local.tee is introduced.
4+
5+
;; There should also be no warning in the output.
6+
;; CHECK-NOT: warning:
7+
8+
(module
9+
;; CHECK: (type $0 (func (param i32 i32)))
10+
11+
;; CHECK: (type $1 (func (param i32)))
12+
13+
;; CHECK: (import "a" "b" (func $log (param i32 i32)))
14+
(import "a" "b" (func $log (param i32 i32)))
15+
16+
(func $foo (export "foo") (param $p i32)
17+
;; The locals $x and $y can be coalesced into a single local, but as we do not
18+
;; run that pass, they will not be. Other minor optimizations will occur here,
19+
;; such as using a tee.
20+
(local $x i32)
21+
(local $y i32)
22+
23+
(local.set $x
24+
(i32.add
25+
(local.get $p)
26+
(i32.const 1)
27+
)
28+
)
29+
(call $log
30+
(local.get $x)
31+
(local.get $x)
32+
)
33+
34+
(local.set $y
35+
(i32.add
36+
(local.get $p)
37+
(i32.const 1)
38+
)
39+
)
40+
(call $log
41+
(local.get $y)
42+
(local.get $y)
43+
)
44+
)
45+
)
46+
;; CHECK: (export "foo" (func $foo))
47+
48+
;; CHECK: (func $foo (param $p i32)
49+
;; CHECK-NEXT: (local $x i32)
50+
;; CHECK-NEXT: (local $y i32)
51+
;; CHECK-NEXT: (local.set $x
52+
;; CHECK-NEXT: (i32.add
53+
;; CHECK-NEXT: (local.get $p)
54+
;; CHECK-NEXT: (i32.const 1)
55+
;; CHECK-NEXT: )
56+
;; CHECK-NEXT: )
57+
;; CHECK-NEXT: (call $log
58+
;; CHECK-NEXT: (local.get $x)
59+
;; CHECK-NEXT: (local.get $x)
60+
;; CHECK-NEXT: )
61+
;; CHECK-NEXT: (local.set $y
62+
;; CHECK-NEXT: (i32.add
63+
;; CHECK-NEXT: (local.get $p)
64+
;; CHECK-NEXT: (i32.const 1)
65+
;; CHECK-NEXT: )
66+
;; CHECK-NEXT: )
67+
;; CHECK-NEXT: (call $log
68+
;; CHECK-NEXT: (local.get $y)
69+
;; CHECK-NEXT: (local.get $y)
70+
;; CHECK-NEXT: )
71+
;; CHECK-NEXT: )

0 commit comments

Comments
 (0)