Currently, the way loop peeling is done, it requires LCSSA form.
We need to add this as a check in canPeel (similar to the requirement
for LoopSimplifyForm in canPeel). Without the check if we peel
non-LCSSA loops, we end up breaking SSA form on uses outside the loop.
This cannot be seen upstream because all uses of loop peeling is done on
LCSSA form loops.
Added a unit test for this.
Loop peeling pass is not guaranteed to be provided with DT and LI. They can both be (and sometimes are) nullptr, at least in old PM.