Currently LoopRotate ends up duplicating lifetime starts/ends in the
preheader, which creates invalid lifetimes.
This patch adds support for extending the lifetimes when hoisting
instructions: lifetime.start gets hoisted to the preheader and
lifetime.end gets sunk to the exit block. This extends the lifetime of
the memory location.