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.

Reply via email to