summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/pass.h9
-rw-r--r--src/tools/optimization-options.h9
2 files changed, 17 insertions, 1 deletions
diff --git a/src/pass.h b/src/pass.h
index 4f9cd1b68..45dd549d1 100644
--- a/src/pass.h
+++ b/src/pass.h
@@ -107,6 +107,15 @@ struct PassOptions {
// forth (which IEEE floats do not, strictly speaking). This is inspired by
// gcc/clang's -ffast-math flag.
bool fastMath = false;
+ // Whether to assume that an imported memory has not been modified. Without
+ // this, we can do fewer optimizations on memory segments, because if memory
+ // *was* modified then the wasm's segments may trample those previous
+ // modifications. If memory was not modified, we can assume it starts as zero,
+ // which allows us to remove zeros from wasm's segments.
+ // (This is not a problem if the memory is *not* imported, since then wasm
+ // creates it and we know it is all zeros right before the active segments are
+ // applied.)
+ bool unmodifiedImportedMemory = false;
// Whether to try to preserve debug info through, which are special calls.
bool debugInfo = false;
// Arbitrary string arguments from the commandline, which we forward to
diff --git a/src/tools/optimization-options.h b/src/tools/optimization-options.h
index 5b6a643e6..f89dab347 100644
--- a/src/tools/optimization-options.h
+++ b/src/tools/optimization-options.h
@@ -193,7 +193,14 @@ struct OptimizationOptions : public ToolOptions {
"-ffm",
"Optimize floats without handling corner cases of NaNs and rounding",
Options::Arguments::Zero,
- [this](Options*, const std::string&) { passOptions.fastMath = true; });
+ [this](Options*, const std::string&) { passOptions.fastMath = true; })
+ .add("--unmodified-imported-mem",
+ "-uim",
+ "Assume that an imported memory will not have been modified",
+ Options::Arguments::Zero,
+ [this](Options*, const std::string&) {
+ passOptions.unmodifiedImportedMemory = true;
+ });
// add passes in registry
for (const auto& p : PassRegistry::get()->getRegisteredNames()) {
(*this).add(