Description
If I were to try working on a wasm-opt
pass doing what's written in the title, would it be accepted? Gated behind the bulk-memory
extension/feature of course.
The rationale I have for this is that when compiling Rust, even with the bulk-memory
target feature (codegen option) enabled, a lot of naive (slow) memcpy
and memset
calls are left in the result, because they are called from std
/core
library functions, such as __rust_alloc_zeroed
and __rust_realloc
. These can be avoided by passing the build-std
option to Cargo, but that is still an unstable, nightly-only feature.
Of course, this sets some assumptions about what a function that happens to be named "memset" or "memcpy" is supposed to be doing, but in a lot of compiler toolchains, these are pretty much already handled as intrinsics anyway.
One alternative would be to detect some forms of memory copying or filling loops in the control flow graph instead, and only replace those with intrinsics.
What do you think?