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).