wasm-merge: Avoid quadratic time in validation [NFC] #7845
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The actual merging logic in
wasm-merge
is careful to run in linear time(since #5709). However, validation could actually be quadratic, since we do
it after each module that we merge in. Since we validate by default, this
made
wasm-merge
very slow sometimes.To fix that, validate by default once at the very end. When in pass-debug
mode, which validates after each pass, validate after each module (so we
keep the option for precise debugging of problems).
On a large testcase I am investigating (350 modules, 41 MB wasm after
merge), this makes us go from 5 minutes down to just 19 seconds. With
--no-validation
, we drop to 17. (That final number is about how long ittakes to run
wasm-opt
350 times to round-trip each of those modules,so it is shows
wasm-merge
's merging is very fast.)Actual diff is quite small, read without whitespace to avoid noise.