https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104438
--- Comment #3 from Segher Boessenkool <segher at gcc dot gnu.org> --- Also combine could work that late in principle: it can deal with hard registers, after all. But it would be a terrible idea. A single combine pass is expensive enough, we don't want to run it N times. Also, if you run combine more than once, you get odd effects, mostly because the results of splitters are combined back again. After *logue insertion all the simpler (more local!) optimisations are still run (DSE, DCE, if conversion, const prop, peep). It is unclear why the CFG wasn't straightened out here. Is the bb commented as "asm" actually asm? Then GCC will not see it is very cheap/small, yeah.