Lifetime markers which reference inputs to the extraction region are not
safe to extract. Example ('rhs' will be extracted):
entry: x = alloca y = alloca / \ lhs: rhs: lifetime_start(x) lifetime_start(x) use(x) lifetime_start(y) lifetime_end(x) use(x, y) lifetime_start(y) lifetime_end(y) use(y) lifetime_end(x) lifetime_end(y) ... ...
Prior to extraction, the stack coloring pass sees that the slots for 'x'
and 'y' are in-use at the same time. After extraction, the coloring pass
infers that 'x' and 'y' are *not* in-use concurrently, because markers
from 'rhs' are no longer available to help decide otherwise.
This leads to a miscompile, because the stack slots actually are in-use
concurrently in the extracted function.
Fix this by moving lifetime start/end markers for memory regions defined
in the calling function around the call to the extracted function.
Fixes llvm.org/PR39671 (rdar://45939472).