Improve control flow optimisation algorithm
Fixes #8456. Previous version of control flow optimisations did not update the list of block predecessors, leading to unnecessary duplication of blocks in some cases. See Trac and comments in the code for more details.
Showing with 271 additions and 164 deletions