From 1d24b83eaf710510c132091db89715607d64eea7 Mon Sep 17 00:00:00 2001 From: Thomas Lively <7121787+tlively@users.noreply.github.com> Date: Thu, 31 Mar 2022 07:57:49 -0700 Subject: [MemoryPacking] Remove workaround for old V8 bug (#4558) V8 used to incorrectly parse the segment index on bulk memory instructions as a signed LEB rather than an unsigned LEB, which meant it only worked correctly with up to 63 data segments. That bug has been fixed for over two years now, so lift the maximum number of segments generated by memory packing from 63 to the specified max, 100k. --- src/passes/MemoryPacking.cpp | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) (limited to 'src/passes/MemoryPacking.cpp') diff --git a/src/passes/MemoryPacking.cpp b/src/passes/MemoryPacking.cpp index 8267dc8bf..c6fd0e313 100644 --- a/src/passes/MemoryPacking.cpp +++ b/src/passes/MemoryPacking.cpp @@ -94,11 +94,6 @@ makeGtShiftedMemorySize(Builder& builder, Module& module, MemoryInit* curr) { } // anonymous namespace struct MemoryPacking : public Pass { - // FIXME: Chrome has a bug decoding section indices that prevents it from - // using more than 63. Just use WebLimitations::MaxDataSegments once this is - // fixed. See https://bugs.chromium.org/p/v8/issues/detail?id=10151. - uint32_t maxSegments; - void run(PassRunner* runner, Module* module) override; bool canOptimize(const Memory& memory, const PassOptions& passOptions); void optimizeBulkMemoryOps(PassRunner* runner, Module* module); @@ -129,10 +124,6 @@ void MemoryPacking::run(PassRunner* runner, Module* module) { return; } - maxSegments = module->features.hasBulkMemory() - ? 63 - : uint32_t(WebLimitations::MaxDataSegments); - auto& segments = module->memory.segments; // For each segment, a list of bulk memory instructions that refer to it @@ -541,7 +532,7 @@ void MemoryPacking::createSplitSegments(Builder& builder, offset = segment.offset; } } - if (maxSegments <= packed.size() + segmentsRemaining) { + if (WebLimitations::MaxDataSegments <= packed.size() + segmentsRemaining) { // Give up splitting and merge all remaining ranges except end zeroes auto lastNonzero = ranges.end() - 1; if (lastNonzero->isZero) { -- cgit v1.2.3