https://gcc.gnu.org/bugzilla/show_bug.cgi?id=16798
Segher Boessenkool <segher at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |segher at gcc dot gnu.org --- Comment #7 from Segher Boessenkool <segher at gcc dot gnu.org> --- Combine starts with insn_cost 4 for 11: {r122:DI=r126:DI>>0x34;clobber ca:DI;} REG_DEAD r126:DI REG_UNUSED ca:DI insn_cost 8 for 12: r127:DI=[unspec[`*.LC1',%2:DI] 46] REG_EQUAL `j' insn_cost 4 for 13: [r127:DI]=r122:DI REG_DEAD r127:DI insn_cost 4 for 16: r128:CC=cmp(r122:DI,0) REG_DEAD r122:DI and we want 11 and 16 combined (later passes put 16 earlier btw). But combine does not try to combine anything into 16: the first use of r122 as set in insn 11 is insn 13, not insn 16, and 11+13 does not combine. But 11+13+16 is not tried. Maybe we should?