As part of the latest release of Cheerp, our C++ to WebAssembly/JavaScript compiler, we have introduced a powerful new LLVM optimization that aggressively reduce WebAssembly output size at compile time.
We have named this optimization 'PartialExecuter', the key idea behind it being taking advantage of known function parameters to find inner code blocks that cannot ever be possibly executed.
Such blocks can then be completely removed from the compiled output, significantly reducing its size.
What makes this pass more powerful than typical Dead Code Elimination is the ability of reasoning over all the possible executions that the code can take, while being robust to memory stores and side-effects. Moreover, PartialExecuter can even reason over loads as far as they refer to read-only memory. This latter capability is especially useful to drop code from complex functions whose behavior depend on input strings (i.e. printf).
We think this work may be of interest for the HN community, and we welcome feedback and questions.
In-depth blog post: https://leaningtech.com/reducing-webassembly-size-by-explori...
PartialExecuter: Reducing WebAssembly size by exploring all executions in LLVM
leaningtech.com