The rationale for not splitting critical edges with structurized CFGs was
that it would hurt performance. This isn't true in all cases, for example,
splitting cirtical edges to hoist code out of loops.
These sort of performance decisions should really be made by the optimization
passes.