https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90082

--- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
The problem is that in this case can_alter_cfg is false (fast DCE), and we have
a
(call_insn/u 27 25 38 2 (set (reg:SI 0 ax)
        (call (mem:QI (symbol_ref:DI ("__mulvsi3") [flags 0x41]) [0  S1 A8])
            (const_int 0 [0]))) "pr90082.c":7:28 677 {*call_value}
     (expr_list:REG_DEAD (reg:SI 5 di)
        (expr_list:REG_DEAD (reg:SI 4 si)
            (expr_list:REG_UNUSED (reg:SI 0 ax)
                (nil))))
    (expr_list (use (reg:SI 4 si))
        (expr_list (use (reg:SI 5 di))
            (nil))))
call that DCE would like to remove.  The assert is that we really don't remove
unreachable blocks etc. when we don't want to alter the cfg; the call is
nothrow_insn_p and so we think it is fine to remove it, but it isn't if we
can't modify the cfg - there are EDGE_ABNORMAL edges after the call.

Reply via email to