1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
|
;; RUN: wasm-split --help | filecheck %s
;; CHECK: ================================================================================
;; CHECK-NEXT: wasm-split INFILES
;; CHECK-NEXT:
;; CHECK-NEXT: Split a module into a primary module and a secondary module, or instrument a
;; CHECK-NEXT: module to gather a profile that can inform future splitting, or manage such
;; CHECK-NEXT: profiles. Options that are only accepted in particular modes are marked with the
;; CHECK-NEXT: accepted "[<modes>]" in their descriptions.
;; CHECK-NEXT: ================================================================================
;; CHECK-NEXT:
;; CHECK-NEXT:
;; CHECK-NEXT: wasm-split options:
;; CHECK-NEXT: -------------------
;; CHECK-NEXT:
;; CHECK-NEXT: --split Split an input module into two output
;; CHECK-NEXT: modules. The default mode.
;; CHECK-NEXT:
;; CHECK-NEXT: --instrument Instrument an input module to allow it to
;; CHECK-NEXT: generate a profile that can be used to
;; CHECK-NEXT: guide splitting.
;; CHECK-NEXT:
;; CHECK-NEXT: --merge-profiles Merge multiple profiles for the same
;; CHECK-NEXT: module into a single profile.
;; CHECK-NEXT:
;; CHECK-NEXT: --profile [split] The profile to use to guide
;; CHECK-NEXT: splitting.
;; CHECK-NEXT:
;; CHECK-NEXT: --keep-funcs [split] Comma-separated list of functions
;; CHECK-NEXT: to keep in the primary module. The rest
;; CHECK-NEXT: will be split out. Cannot be used with
;; CHECK-NEXT: --profile or --split-funcs. You can also
;; CHECK-NEXT: pass a file with one function per line by
;; CHECK-NEXT: passing @filename.
;; CHECK-NEXT:
;; CHECK-NEXT: --split-funcs [split] Comma-separated list of functions
;; CHECK-NEXT: to split out to the secondary module. The
;; CHECK-NEXT: rest will be kept. Cannot be used with
;; CHECK-NEXT: --profile or --keep-funcs. You can also
;; CHECK-NEXT: pass a file with one function per line by
;; CHECK-NEXT: passing @filename.
;; CHECK-NEXT:
;; CHECK-NEXT: --primary-output,-o1 [split] Output file for the primary
;; CHECK-NEXT: module.
;; CHECK-NEXT:
;; CHECK-NEXT: --secondary-output,-o2 [split] Output file for the secondary
;; CHECK-NEXT: module.
;; CHECK-NEXT:
;; CHECK-NEXT: --symbolmap [split] Write a symbol map file for each
;; CHECK-NEXT: of the output modules.
;; CHECK-NEXT:
;; CHECK-NEXT: --placeholdermap [split] Write a file mapping placeholder
;; CHECK-NEXT: indices to the function names.
;; CHECK-NEXT:
;; CHECK-NEXT: --import-namespace [split] The namespace from which to
;; CHECK-NEXT: import objects from the primary module
;; CHECK-NEXT: into the secondary module.
;; CHECK-NEXT:
;; CHECK-NEXT: --placeholder-namespace [split] The namespace from which to
;; CHECK-NEXT: import placeholder functions into the
;; CHECK-NEXT: primary module.
;; CHECK-NEXT:
;; CHECK-NEXT: --export-prefix [split] An identifying prefix to prepend
;; CHECK-NEXT: to new export names created by module
;; CHECK-NEXT: splitting.
;; CHECK-NEXT:
;; CHECK-NEXT: --profile-export [instrument] The export name of the
;; CHECK-NEXT: function the embedder calls to write the
;; CHECK-NEXT: profile into memory. Defaults to
;; CHECK-NEXT: `__write_profile`.
;; CHECK-NEXT:
;; CHECK-NEXT: --in-memory [instrument] Store profile information in
;; CHECK-NEXT: memory (starting at address 0 and taking
;; CHECK-NEXT: one byte per function) rather than
;; CHECK-NEXT: globals (the default) so that it can be
;; CHECK-NEXT: shared between multiple threads. Users
;; CHECK-NEXT: are responsible for ensuring that the
;; CHECK-NEXT: module does not use the initial memory
;; CHECK-NEXT: region for anything else.
;; CHECK-NEXT:
;; CHECK-NEXT: --emit-module-names [split, instrument] Emit module names,
;; CHECK-NEXT: even if not emitting the rest of the
;; CHECK-NEXT: names section. Can help differentiate the
;; CHECK-NEXT: modules in stack traces. This option will
;; CHECK-NEXT: be removed once simpler ways of naming
;; CHECK-NEXT: modules are widely available. See
;; CHECK-NEXT: https://bugs.chromium.org/p/v8/issues/detail?id=11808.
;; CHECK-NEXT:
;; CHECK-NEXT: --initial-table [split, instrument] A hack to ensure the
;; CHECK-NEXT: split and instrumented modules have the
;; CHECK-NEXT: same table size when using Emscripten's
;; CHECK-NEXT: SPLIT_MODULE mode with dynamic linking.
;; CHECK-NEXT: TODO: Figure out a more elegant solution
;; CHECK-NEXT: for that use case and remove this.
;; CHECK-NEXT:
;; CHECK-NEXT: --emit-text,-S [split, instrument] Emit text instead of
;; CHECK-NEXT: binary for the output file or files.
;; CHECK-NEXT:
;; CHECK-NEXT: --debuginfo,-g [split, instrument] Emit names section in
;; CHECK-NEXT: wasm binary (or full debuginfo in wast)
;; CHECK-NEXT:
;; CHECK-NEXT: --output,-o [instrument, merge-profiles] Output file.
;; CHECK-NEXT:
;; CHECK-NEXT: --verbose,-v Verbose output mode. Prints the functions
;; CHECK-NEXT: that will be kept and split out when
;; CHECK-NEXT: splitting a module.
;; CHECK-NEXT:
;; CHECK-NEXT:
;; CHECK-NEXT: Tool options:
;; CHECK-NEXT: -------------
;; CHECK-NEXT:
;; CHECK-NEXT: --mvp-features,-mvp Disable all non-MVP features
;; CHECK-NEXT:
;; CHECK-NEXT: --all-features,-all Enable all features
;; CHECK-NEXT:
;; CHECK-NEXT: --detect-features (deprecated - this flag does nothing)
;; CHECK-NEXT:
;; CHECK-NEXT: --quiet,-q Emit less verbose output and hide trivial
;; CHECK-NEXT: warnings.
;; CHECK-NEXT:
;; CHECK-NEXT: --experimental-poppy Parse wast files as Poppy IR for testing
;; CHECK-NEXT: purposes.
;; CHECK-NEXT:
;; CHECK-NEXT: --enable-sign-ext Enable sign extension operations
;; CHECK-NEXT:
;; CHECK-NEXT: --disable-sign-ext Disable sign extension operations
;; CHECK-NEXT:
;; CHECK-NEXT: --enable-threads Enable atomic operations
;; CHECK-NEXT:
;; CHECK-NEXT: --disable-threads Disable atomic operations
;; CHECK-NEXT:
;; CHECK-NEXT: --enable-mutable-globals Enable mutable globals
;; CHECK-NEXT:
;; CHECK-NEXT: --disable-mutable-globals Disable mutable globals
;; CHECK-NEXT:
;; CHECK-NEXT: --enable-nontrapping-float-to-int Enable nontrapping float-to-int
;; CHECK-NEXT: operations
;; CHECK-NEXT:
;; CHECK-NEXT: --disable-nontrapping-float-to-int Disable nontrapping float-to-int
;; CHECK-NEXT: operations
;; CHECK-NEXT:
;; CHECK-NEXT: --enable-simd Enable SIMD operations and types
;; CHECK-NEXT:
;; CHECK-NEXT: --disable-simd Disable SIMD operations and types
;; CHECK-NEXT:
;; CHECK-NEXT: --enable-bulk-memory Enable bulk memory operations
;; CHECK-NEXT:
;; CHECK-NEXT: --disable-bulk-memory Disable bulk memory operations
;; CHECK-NEXT:
;; CHECK-NEXT: --enable-exception-handling Enable exception handling operations
;; CHECK-NEXT:
;; CHECK-NEXT: --disable-exception-handling Disable exception handling operations
;; CHECK-NEXT:
;; CHECK-NEXT: --enable-tail-call Enable tail call operations
;; CHECK-NEXT:
;; CHECK-NEXT: --disable-tail-call Disable tail call operations
;; CHECK-NEXT:
;; CHECK-NEXT: --enable-reference-types Enable reference types
;; CHECK-NEXT:
;; CHECK-NEXT: --disable-reference-types Disable reference types
;; CHECK-NEXT:
;; CHECK-NEXT: --enable-multivalue Enable multivalue functions
;; CHECK-NEXT:
;; CHECK-NEXT: --disable-multivalue Disable multivalue functions
;; CHECK-NEXT:
;; CHECK-NEXT: --enable-gc Enable garbage collection
;; CHECK-NEXT:
;; CHECK-NEXT: --disable-gc Disable garbage collection
;; CHECK-NEXT:
;; CHECK-NEXT: --enable-memory64 Enable memory64
;; CHECK-NEXT:
;; CHECK-NEXT: --disable-memory64 Disable memory64
;; CHECK-NEXT:
;; CHECK-NEXT: --enable-typed-function-references Enable typed function references
;; CHECK-NEXT:
;; CHECK-NEXT: --disable-typed-function-references Disable typed function references
;; CHECK-NEXT:
;; CHECK-NEXT: --enable-gc-nn-locals Enable GC non-null locals
;; CHECK-NEXT:
;; CHECK-NEXT: --disable-gc-nn-locals Disable GC non-null locals
;; CHECK-NEXT:
;; CHECK-NEXT: --enable-relaxed-simd Enable relaxed SIMD
;; CHECK-NEXT:
;; CHECK-NEXT: --disable-relaxed-simd Disable relaxed SIMD
;; CHECK-NEXT:
;; CHECK-NEXT: --no-validation,-n Disables validation, assumes inputs are
;; CHECK-NEXT: correct
;; CHECK-NEXT:
;; CHECK-NEXT: --pass-arg,-pa An argument passed along to optimization
;; CHECK-NEXT: passes being run. Must be in the form
;; CHECK-NEXT: KEY@VALUE
;; CHECK-NEXT:
;; CHECK-NEXT: --nominal Force all GC type definitions to be
;; CHECK-NEXT: parsed as nominal.
;; CHECK-NEXT:
;; CHECK-NEXT: --structural Force all GC type definitions to be
;; CHECK-NEXT: parsed as structural (i.e.
;; CHECK-NEXT: equirecursive). This is the default.
;; CHECK-NEXT:
;; CHECK-NEXT:
;; CHECK-NEXT: General options:
;; CHECK-NEXT: ----------------
;; CHECK-NEXT:
;; CHECK-NEXT: --version Output version information and exit
;; CHECK-NEXT:
;; CHECK-NEXT: --help,-h Show this help message and exit
;; CHECK-NEXT:
;; CHECK-NEXT: --debug,-d Print debug information to stderr
;; CHECK-NEXT:
|