Skip to content

Commit 253ed6c

Browse files
authored
[wasm-split] Set import namespace only when given in multi-split (WebAssembly#7966)
Currently, in the case of two-way split, we set `config.importNamespace` only when `--import-namespace` option is given, and otherwise just use the default namespace "primary". But in the case of multi split, we set it regardless of whether the option is given, resulting in the "" namespace when no option is given. The default import namespace for multi-split was "" when the multi-split function was first added (WebAssembly#6943), so I'm not sure whether this difference was intentional. https://github.com/WebAssembly/binaryen/blob/a9a7f91eb8a65d508873bae3019a7279be4fbb14/src/tools/wasm-split/wasm-split.cpp#L419 In case it wasn't, I think it makes sense to be consistent between two-way split and multi-split. So this in effect changes the import namespace in multi split tests from "" to `primary`. This also factors out the part that moves `WasmSplitOptions` into `Config` to a function.
1 parent dd4dc47 commit 253ed6c

File tree

5 files changed

+33
-28
lines changed

5 files changed

+33
-28
lines changed

src/tools/wasm-split/split-options.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@ WasmSplitOptions::WasmSplitOptions()
231231
"module into the secondary module. In instrument mode, refers to the "
232232
"namespace from which to import the secondary memory, if any.",
233233
WasmSplitOption,
234-
{Mode::Split, Mode::Instrument, Mode::MultiSplit},
234+
{Mode::Split, Mode::MultiSplit, Mode::Instrument},
235235
Options::Arguments::One,
236236
[&](Options* o, const std::string& argument) {
237237
importNamespace = argument;

src/tools/wasm-split/wasm-split.cpp

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,16 @@ void writePlaceholderMap(
222222
}
223223
}
224224

225+
void setCommonSplitConfigs(ModuleSplitting::Config& config,
226+
const WasmSplitOptions& options) {
227+
config.usePlaceholders = options.usePlaceholders;
228+
config.minimizeNewExportNames = !options.passOptions.debugInfo;
229+
if (options.importNamespace.size()) {
230+
config.importNamespace = options.importNamespace;
231+
}
232+
// TODO Add more configs here
233+
}
234+
225235
void splitModule(const WasmSplitOptions& options) {
226236
Module wasm;
227237
parseInput(wasm, options);
@@ -329,18 +339,14 @@ void splitModule(const WasmSplitOptions& options) {
329339

330340
// Actually perform the splitting
331341
ModuleSplitting::Config config;
342+
setCommonSplitConfigs(config, options);
332343
config.secondaryFuncs.push_back(std::move(splitFuncs));
333-
if (options.importNamespace.size()) {
334-
config.importNamespace = options.importNamespace;
335-
}
336344
if (options.placeholderNamespace.size()) {
337345
config.placeholderNamespace = options.placeholderNamespace;
338346
}
339347
if (options.exportPrefix.size()) {
340348
config.newExportPrefix = options.exportPrefix;
341349
}
342-
config.usePlaceholders = options.usePlaceholders;
343-
config.minimizeNewExportNames = !options.passOptions.debugInfo;
344350
config.jspi = options.jspi;
345351
auto splitResults = ModuleSplitting::splitFunctions(wasm, config);
346352
auto& secondary = *splitResults.secondaries.begin();
@@ -398,6 +404,8 @@ void multiSplitModule(const WasmSplitOptions& options) {
398404
std::unordered_map<Name, Name> funcModules;
399405

400406
ModuleSplitting::Config config;
407+
setCommonSplitConfigs(config, options);
408+
401409
std::string line;
402410
bool newSection = true;
403411
std::vector<Name> moduleNames;
@@ -436,9 +444,6 @@ void multiSplitModule(const WasmSplitOptions& options) {
436444
}
437445
}
438446

439-
config.usePlaceholders = options.usePlaceholders;
440-
config.importNamespace = options.importNamespace;
441-
config.minimizeNewExportNames = !options.passOptions.debugInfo;
442447
if (options.emitModuleNames && !wasm.name) {
443448
wasm.name = Path::getBaseName(options.output);
444449
}

test/lit/help/wasm-split.test

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@
7676
;; CHECK-NEXT: placeholder indices to the function
7777
;; CHECK-NEXT: names.
7878
;; CHECK-NEXT:
79-
;; CHECK-NEXT: --import-namespace [split, instrument, multi-split] When
79+
;; CHECK-NEXT: --import-namespace [split, multi-split, instrument] When
8080
;; CHECK-NEXT: provided as an option for module
8181
;; CHECK-NEXT: splitting, the namespace from which to
8282
;; CHECK-NEXT: import objects from the primary module

test/lit/wasm-split/multi-split-escape-names.wast

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,11 @@
2222

2323
;; MOD1: (type $2 (func (result i32)))
2424

25-
;; MOD1: (import "" "table" (table $timport$0 3 funcref))
25+
;; MOD1: (import "primary" "table" (table $timport$0 3 funcref))
2626

27-
;; MOD1: (import "" "trampoline_std::operator<<\\28std::__2::basic_ostream<char\\2c\\20std::__2::char_traits<char>>&\\2c\\20wasm::Module&\\29" (func $trampoline_std::operator<<\28std::__2::basic_ostream<char\2c\20std::__2::char_traits<char>>&\2c\20wasm::Module&\29 (result f32)))
27+
;; MOD1: (import "primary" "trampoline_std::operator<<\\28std::__2::basic_ostream<char\\2c\\20std::__2::char_traits<char>>&\\2c\\20wasm::Module&\\29" (func $trampoline_std::operator<<\28std::__2::basic_ostream<char\2c\20std::__2::char_traits<char>>&\2c\20wasm::Module&\29 (result f32)))
2828

29-
;; MOD1: (import "" "trampoline_wasm::Literal::Literal\\28std::__2::array<wasm::Literal\\2c\\204ul>\\20const&\\29" (func $trampoline_wasm::Literal::Literal\28std::__2::array<wasm::Literal\2c\204ul>\20const&\29 (result i64)))
29+
;; MOD1: (import "primary" "trampoline_wasm::Literal::Literal\\28std::__2::array<wasm::Literal\\2c\\204ul>\\20const&\\29" (func $trampoline_wasm::Literal::Literal\28std::__2::array<wasm::Literal\2c\204ul>\20const&\29 (result i64)))
3030

3131
;; MOD1: (elem $0 (i32.const 2) $wasm::Type::getFeatures\28\29\20const)
3232

@@ -73,11 +73,11 @@
7373

7474
;; MOD2: (type $2 (func (result i64)))
7575

76-
;; MOD2: (import "" "table" (table $timport$0 3 funcref))
76+
;; MOD2: (import "primary" "table" (table $timport$0 3 funcref))
7777

78-
;; MOD2: (import "" "trampoline_std::operator<<\\28std::__2::basic_ostream<char\\2c\\20std::__2::char_traits<char>>&\\2c\\20wasm::Module&\\29" (func $trampoline_std::operator<<\28std::__2::basic_ostream<char\2c\20std::__2::char_traits<char>>&\2c\20wasm::Module&\29 (result f32)))
78+
;; MOD2: (import "primary" "trampoline_std::operator<<\\28std::__2::basic_ostream<char\\2c\\20std::__2::char_traits<char>>&\\2c\\20wasm::Module&\\29" (func $trampoline_std::operator<<\28std::__2::basic_ostream<char\2c\20std::__2::char_traits<char>>&\2c\20wasm::Module&\29 (result f32)))
7979

80-
;; MOD2: (import "" "trampoline_wasm::Type::getFeatures\\28\\29\\20const" (func $trampoline_wasm::Type::getFeatures\28\29\20const (result i32)))
80+
;; MOD2: (import "primary" "trampoline_wasm::Type::getFeatures\\28\\29\\20const" (func $trampoline_wasm::Type::getFeatures\28\29\20const (result i32)))
8181

8282
;; MOD2: (elem $0 (i32.const 0) $wasm::Literal::Literal\28std::__2::array<wasm::Literal\2c\204ul>\20const&\29)
8383

@@ -124,11 +124,11 @@
124124

125125
;; MOD3: (type $2 (func (result f32)))
126126

127-
;; MOD3: (import "" "table" (table $timport$0 3 funcref))
127+
;; MOD3: (import "primary" "table" (table $timport$0 3 funcref))
128128

129-
;; MOD3: (import "" "trampoline_wasm::Literal::Literal\\28std::__2::array<wasm::Literal\\2c\\204ul>\\20const&\\29" (func $trampoline_wasm::Literal::Literal\28std::__2::array<wasm::Literal\2c\204ul>\20const&\29 (result i64)))
129+
;; MOD3: (import "primary" "trampoline_wasm::Literal::Literal\\28std::__2::array<wasm::Literal\\2c\\204ul>\\20const&\\29" (func $trampoline_wasm::Literal::Literal\28std::__2::array<wasm::Literal\2c\204ul>\20const&\29 (result i64)))
130130

131-
;; MOD3: (import "" "trampoline_wasm::Type::getFeatures\\28\\29\\20const" (func $trampoline_wasm::Type::getFeatures\28\29\20const (result i32)))
131+
;; MOD3: (import "primary" "trampoline_wasm::Type::getFeatures\\28\\29\\20const" (func $trampoline_wasm::Type::getFeatures\28\29\20const (result i32)))
132132

133133
;; MOD3: (elem $0 (i32.const 1) $std::operator<<\28std::__2::basic_ostream<char\2c\20std::__2::char_traits<char>>&\2c\20wasm::Module&\29)
134134

test/lit/wasm-split/multi-split.wast

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,11 @@
3434

3535
;; MOD1: (type $2 (func (result i32)))
3636

37-
;; MOD1: (import "" "table" (table $timport$0 3 funcref))
37+
;; MOD1: (import "primary" "table" (table $timport$0 3 funcref))
3838

39-
;; MOD1: (import "" "trampoline_B" (func $trampoline_B (result i64)))
39+
;; MOD1: (import "primary" "trampoline_B" (func $trampoline_B (result i64)))
4040

41-
;; MOD1: (import "" "trampoline_C" (func $trampoline_C (result f32)))
41+
;; MOD1: (import "primary" "trampoline_C" (func $trampoline_C (result f32)))
4242

4343
;; MOD1: (elem $0 (i32.const 2) $A)
4444

@@ -117,11 +117,11 @@
117117

118118
;; MOD2: (type $2 (func (result i64)))
119119

120-
;; MOD2: (import "" "table" (table $timport$0 3 funcref))
120+
;; MOD2: (import "primary" "table" (table $timport$0 3 funcref))
121121

122-
;; MOD2: (import "" "trampoline_A" (func $trampoline_A (result i32)))
122+
;; MOD2: (import "primary" "trampoline_A" (func $trampoline_A (result i32)))
123123

124-
;; MOD2: (import "" "trampoline_C" (func $trampoline_C (result f32)))
124+
;; MOD2: (import "primary" "trampoline_C" (func $trampoline_C (result f32)))
125125

126126
;; MOD2: (elem $0 (i32.const 0) $B)
127127

@@ -200,11 +200,11 @@
200200

201201
;; MOD3: (type $2 (func (result f32)))
202202

203-
;; MOD3: (import "" "table" (table $timport$0 3 funcref))
203+
;; MOD3: (import "primary" "table" (table $timport$0 3 funcref))
204204

205-
;; MOD3: (import "" "trampoline_A" (func $trampoline_A (result i32)))
205+
;; MOD3: (import "primary" "trampoline_A" (func $trampoline_A (result i32)))
206206

207-
;; MOD3: (import "" "trampoline_B" (func $trampoline_B (result i64)))
207+
;; MOD3: (import "primary" "trampoline_B" (func $trampoline_B (result i64)))
208208

209209
;; MOD3: (elem $0 (i32.const 1) $C)
210210

0 commit comments

Comments
 (0)