https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80301
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |missed-optimization Status|UNCONFIRMED |NEW Last reconfirmed| |2017-04-04 Component|target |rtl-optimization Version|unknown |7.0.1 Ever confirmed|0 |1 --- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> --- So we fail to combine/fwprop (insn 9 8 4 2 (parallel [ (set (reg:DI 92) (plus:DI (reg:DI 91 [ index ]) (const_int 2 [0x2]))) (clobber (reg:CC 17 flags)) ]) "t.c":14 218 {*adddi_1} (expr_list:REG_DEAD (reg:DI 91 [ index ]) (expr_list:REG_UNUSED (reg:CC 17 flags) (nil)))) (insn 10 4 11 2 (set (reg:CCZ 17 flags) (compare:CCZ (mem:SI (plus:DI (mult:DI (reg:DI 92) (const_int 8 [0x8])) (symbol_ref:DI ("m") [flags 0x2] <var_decl 0x7f8f2c5b4e10 m>)) [2 m.s[index_4(D)].a+0 S4 A32]) (reg:SI 88 [ <retval> ]))) "t.c":14 7 {*cmpsi_1} (nil)) which is because simply forwarding reg:DI 92 isn't possible and we do not know how to simplify it into sth valid by associating the 2 into the symbol_ref part of the outer plus. For the other MEM things happen to be associated differently by CSE1.