diff options
author | Thomas Lively <7121787+tlively@users.noreply.github.com> | 2019-07-03 15:00:44 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-07-03 15:00:44 -0700 |
commit | f82e708ee048d5a17d9cf04d205985b32719276e (patch) | |
tree | 80cd91d71cd2a91de8e9050c7a3a1a6322914c86 /src | |
parent | a5547a56649771a708de8d5b013dbbf62d0fcbae (diff) | |
download | binaryen-f82e708ee048d5a17d9cf04d205985b32719276e.tar.gz binaryen-f82e708ee048d5a17d9cf04d205985b32719276e.tar.bz2 binaryen-f82e708ee048d5a17d9cf04d205985b32719276e.zip |
Loosen conditions on MemoryPacking (#2205)
Allow MemoryPacking to run when there are no passive segments, even if
bulk memory is enabled.
Diffstat (limited to 'src')
-rw-r--r-- | src/passes/MemoryPacking.cpp | 16 |
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; |