summaryrefslogtreecommitdiff
path: root/src/passes/MemoryPacking.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/passes/MemoryPacking.cpp')
-rw-r--r--src/passes/MemoryPacking.cpp11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/passes/MemoryPacking.cpp b/src/passes/MemoryPacking.cpp
index cd4a6698d..0f2cf6f14 100644
--- a/src/passes/MemoryPacking.cpp
+++ b/src/passes/MemoryPacking.cpp
@@ -95,6 +95,10 @@ makeGtShiftedMemorySize(Builder& builder, Module& module, MemoryInit* curr) {
} // anonymous namespace
struct MemoryPacking : public Pass {
+ // This pass operates on linear memory, and does not affect reference locals.
+ // TODO: don't run at all if the module has no memories
+ bool requiresNonNullableLocalFixups() override { return false; }
+
void run(PassRunner* runner, Module* module) override;
bool canOptimize(std::vector<std::unique_ptr<Memory>>& memories,
std::vector<std::unique_ptr<DataSegment>>& dataSegments,
@@ -377,6 +381,10 @@ void MemoryPacking::calculateRanges(const std::unique_ptr<DataSegment>& segment,
void MemoryPacking::optimizeBulkMemoryOps(PassRunner* runner, Module* module) {
struct Optimizer : WalkerPass<PostWalker<Optimizer>> {
bool isFunctionParallel() override { return true; }
+
+ // This operates on linear memory, and does not affect reference locals.
+ bool requiresNonNullableLocalFixups() override { return false; }
+
Pass* create() override { return new Optimizer; }
bool needsRefinalizing;
@@ -777,6 +785,9 @@ void MemoryPacking::replaceBulkMemoryOps(PassRunner* runner,
struct Replacer : WalkerPass<PostWalker<Replacer>> {
bool isFunctionParallel() override { return true; }
+ // This operates on linear memory, and does not affect reference locals.
+ bool requiresNonNullableLocalFixups() override { return false; }
+
Replacements& replacements;
Replacer(Replacements& replacements) : replacements(replacements){};