summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/ir/module-splitting.cpp11
-rw-r--r--src/tools/wasm-split/wasm-split.cpp11
2 files changed, 17 insertions, 5 deletions
diff --git a/src/ir/module-splitting.cpp b/src/ir/module-splitting.cpp
index adda1f4a6..777818689 100644
--- a/src/ir/module-splitting.cpp
+++ b/src/ir/module-splitting.cpp
@@ -316,6 +316,7 @@ struct ModuleSplitter {
void exportImportCalledPrimaryFunctions();
void setupTablePatching();
void shareImportableItems();
+ void removeUnusedSecondaryElements();
ModuleSplitter(Module& primary, const Config& config)
: config(config), secondaryPtr(initSecondary(primary)), primary(primary),
@@ -334,6 +335,7 @@ struct ModuleSplitter {
exportImportCalledPrimaryFunctions();
setupTablePatching();
shareImportableItems();
+ removeUnusedSecondaryElements();
}
};
@@ -872,6 +874,15 @@ void ModuleSplitter::shareImportableItems() {
}
}
+void ModuleSplitter::removeUnusedSecondaryElements() {
+ // TODO: It would be better to be more selective about only exporting and
+ // importing those items that the secondary module needs. This would reduce
+ // code size in the primary module as well.
+ PassRunner runner(&secondary);
+ runner.add("remove-unused-module-elements");
+ runner.run();
+}
+
} // anonymous namespace
Results splitFunctions(Module& primary, const Config& config) {
diff --git a/src/tools/wasm-split/wasm-split.cpp b/src/tools/wasm-split/wasm-split.cpp
index ea1734b6b..2b66d1164 100644
--- a/src/tools/wasm-split/wasm-split.cpp
+++ b/src/tools/wasm-split/wasm-split.cpp
@@ -69,11 +69,15 @@ uint64_t hashFile(const std::string& filename) {
return uint64_t(digest);
}
-void adjustTableSize(Module& wasm, int initialSize) {
+void adjustTableSize(Module& wasm, int initialSize, bool secondary = false) {
if (initialSize < 0) {
return;
}
if (wasm.tables.empty()) {
+ if (secondary) {
+ // It's not a problem if the table is not used in the secondary module.
+ return;
+ }
Fatal() << "--initial-table used but there is no table";
}
@@ -336,7 +340,7 @@ void splitModule(const WasmSplitOptions& options) {
auto& secondary = splitResults.secondary;
adjustTableSize(wasm, options.initialTableSize);
- adjustTableSize(*secondary, options.initialTableSize);
+ adjustTableSize(*secondary, options.initialTableSize, /*secondary=*/true);
if (options.symbolMap) {
writeSymbolMap(wasm, options.primaryOutput + ".symbols");
@@ -435,9 +439,6 @@ void multiSplitModule(const WasmSplitOptions& options) {
// TODO: symbolMap, placeholderMap, emitModuleNames
// TODO: Support --emit-text and use .wast in that case.
auto moduleName = options.outPrefix + mod + ".wasm";
- PassRunner runner(&*splitResults.secondary);
- runner.add("remove-unused-module-elements");
- runner.run();
writeModule(*splitResults.secondary, moduleName, options);
}
writeModule(wasm, options.output, options);