https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80960
--- Comment #15 from Segher Boessenkool <segher at gcc dot gnu.org> --- It seems to be that this happens for huge basic blocks, and the combiner tries to combine pairs of instructions that are far apart. This is unlikely to work often, and the cost is quadratic in # insns, the way checking where a register is used works. The param to do only 2->1 (and 2->2) combinations should help a lot, make combine not take longer than the rest of the compiler does. Does it?