https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97887
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |uros at gcc dot gnu.org --- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> --- combine first makes recog pick negsf2_i387_1: Trying 6 -> 7: 6: r87:V4SF=[`*.LC0'] REG_EQUAL const_vector 7: {r86:SF=-r84:SF;use r87:V4SF;clobber flags:CC;} REG_DEAD r87:V4SF REG_UNUSED flags:CC Successfully matched this instruction: (parallel [ (set (reg:SF 86) (neg:SF (reg/v:SF 84 [ a ]))) (use (mem/u/c:V4SF (symbol_ref/u:DI ("*.LC0") [flags 0x2]) [0 S16 A128])) (clobber (reg:CC 17 flags)) ]) allowing combination of insns 6 and 7 original costs 8 + 4 = 12 replacement cost 4 ... (insn 7 6 8 2 (parallel [ (set (reg:SF 86) (neg:SF (reg:SF 88))) (clobber (reg:CC 17 flags)) ]) "t.i":3:12 595 {*negsf2_i387_1} (expr_list:REG_UNUSED (reg:CC 17 flags) (nil))) (insn 8 7 13 2 (set (reg:SF 85) (div:SF (reg:SF 86) (reg:SF 88))) "t.i":3:15 965 {*fop_sf_1} (expr_list:REG_DEAD (reg:SF 88) (expr_list:REG_DEAD (reg:SF 86) (nil)))) of course we have fop_sf_1 for the division already before but that's probably just a misnamed pattern.