diff options
Diffstat (limited to 'src/passes/MemoryPacking.cpp')
-rw-r--r-- | src/passes/MemoryPacking.cpp | 11 |
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){}; |