https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105231
--- Comment #23 from Segher Boessenkool <segher at gcc dot gnu.org> --- i3 is not always the sole instruction that results from the combine: if a single insn does not work, two are tried, and one of them is placed at i2. It's something to consider, it has to be checked for in a zillion places, but it doesn't constrain you much in the end :-) Btw, the only cases where combine splits blocks is when it has made an unconditional trap; but in that case, it just ignores the second resulting block (this is PR82386). Also, combine *can* work on insns from different BBs, in some cases (but always from the same EBB).