summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/passes/MemoryPacking.cpp16
1 files changed, 12 insertions, 4 deletions
diff --git a/src/passes/MemoryPacking.cpp b/src/passes/MemoryPacking.cpp
index 99eb2e285..0b24379e5 100644
--- a/src/passes/MemoryPacking.cpp
+++ b/src/passes/MemoryPacking.cpp
@@ -28,12 +28,20 @@ struct MemoryPacking : public Pass {
bool modifiesBinaryenIR() override { return false; }
void run(PassRunner* runner, Module* module) override {
- // Conservatively refuse to change segments if bulk memory is enabled to
- // avoid invalidating segment indices or segment contents referenced from
+ if (!module->memory.exists) {
+ return;
+ }
+
+ // Conservatively refuse to change segments if any are passive to avoid
+ // invalidating segment indices or segment contents referenced from
// memory.init instructions.
// TODO: optimize in the presence of memory.init instructions
- if (!module->memory.exists || module->features.hasBulkMemory()) {
- return;
+ if (module->features.hasBulkMemory()) {
+ for (auto segment : module->memory.segments) {
+ if (segment.isPassive) {
+ return;
+ }
+ }
}
std::vector<Memory::Segment> packed;