https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62030
--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> --- Here are the two stores: (insn 30 25 33 3 (set (mem/f:DI (reg/v/f:DI 200 [ prev ]) [5 MEM[(struct head *)&heads][_8].first+0 S8 A64]) (reg/v/f:DI 199 [ next ])) t.c:22 302 {*movdi_64bit} (expr_list:REG_DEAD (reg/v/f:DI 200 [ prev ]) (expr_list:REG_DEAD (reg/v/f:DI 199 [ next ]) (nil)))) (insn 35 34 36 4 (set (mem/f:DI (reg/v/f:DI 200 [ prev ]) [3 prev_11->next+0 S8 A64]) (reg/v/f:DI 199 [ next ])) t.c:24 302 {*movdi_64bit} (expr_list:REG_DEAD (reg/v/f:DI 200 [ prev ]) (expr_list:REG_DEAD (reg/v/f:DI 199 [ next ]) (nil)))) Note the reason why I think this does not happen for x86 (or even aarch64) is due to the constraints on mem operands on MIPS.