WebAssemblyDebugValueManager does not currently handle
DBG_VALUE_LIST, which is a recent addition to LLVM. We tried to
nullify them within the constructor of WebAssemblyDebugValueManager in
D102589, but it made the class error-prone to use because it deletes
instructions within the constructor and thus invalidates existing
iterators within the BB, so the user of the class should take special
care not to use invalidated iterators. This actually caused a bug in
ExplicitLocals pass.
Instead of trying to fix ExplicitLocals pass to make the iterator usage
correct, which is possible but error-prone, this adds
NullifyDebugValueLists pass that nullifies all DBG_VALUE_LIST
instructions before we run WebAssembly specific passes in the backend.
We can remove this pass after we implement handlers for
DBG_VALUE_LISTs in WebAssemblyDebugValueManager and elsewhere.
Fixes https://github.com/emscripten-core/emscripten/issues/14255.
Would it be possible to check that there actually are DBG_VALUE_LISTs in the input to the MIR pipeline (perhaps using -stop-after or something)? It's not obvious (to me) how the IR below leads to DBG_VALUE_LIST being created and it seems unlikely to be guaranteed.