When a va_start or va_copy is immediately followed by a va_end (ignoring
debug information or other start/end in between), then it is safe to
remove the pair. As this code shares some commonalities with the lifetime
markers, this has been factored to helper functions. In the va_copy
case a specific handling in needed because it does not have the same
prototype as the va_end.
This InstCombine pattern kicks-in 3 times when running the LLVM test
suite.
this could be a return false short-cut, not necessarily an assert...