This patch updates SplitCriticalEdges preserve loop-simplify form, even
if we would have to split the predecessors of the exit block.
Instead of splitting the predecessors of the exit block, it splits the
exit block at the first non-PHI instruction and updates the branch in
the new block to jump to the new split block. It also adds PHIs as
required.
Unfortunately a few users rely on the contents of a block not being
moved. I managed to fix most of them, but I am not too sure what to do
about the caching in MemoryDependenceAnalsysis.
clang-tidy: warning: invalid case style for variable 'eraseInstrs' [readability-identifier-naming]
not useful