https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82683
--- Comment #11 from Steve Ellcey <sje at gcc dot gnu.org> --- I think I see where this is going wrong but I don't know what to do about it. In try_combine, line 3288 we have i2 and i3 of: (insn 18 16 19 3 (set (reg:DI 91) (ashift:DI (reg:DI 83 [ _26 ]) (const_int 2 [0x2]))) "x.i":31 674 {*aarch64_ashl_sisd_or_int_di3} (expr_list:REG_DEAD (reg:DI 83 [ _26 ]) (nil))) (insn 19 18 20 3 (set (reg/f:DI 78 [ _7 ]) (plus:DI (reg/f:DI 76 [ _4 ]) (reg:DI 91))) "x.i":31 94 {*adddi3_aarch64} (expr_list:REG_DEAD (reg:DI 91) (expr_list:REG_DEAD (reg/f:DI 76 [ _4 ]) (nil)))) After that if statement we have i2 and i3 looking like: (insn 18 16 19 3 (set (reg:DI 91) (ashift:DI (reg:DI 83 [ _26 ]) (const_int 2 [0x2]))) "x.i":31 674 {*aarch64_ashl_sisd_or_int_di3} (expr_list:REG_DEAD (reg:DI 83 [ _26 ]) (nil))) (insn 19 18 20 3 (set (reg/f:DI 78 [ _7 ]) (plus:DI (ashift:DI (reg:DI 83 [ _26 ]) (const_int 2 [0x2])) (reg/f:DI 76 [ _4 ]))) "x.i":31 94 {*adddi3_aarch64} (expr_list:REG_DEAD (reg:DI 91) (expr_list:REG_DEAD (reg/f:DI 76 [ _4 ]) (nil)))) There is the bogus REG_DEAD of 83 on insn 18. I don't know where or how this should be fixed up though.