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

--- Comment #15 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
(In reply to Andrew Pinski from comment #11)
> cancel_fma_deferring does:
>       gimple_stmt_iterator gsi = gsi_for_stmt (fti.mul_stmt);
>       gsi_remove (&gsi, true);
>       release_defs (fti.mul_stmt);
> 
> 
> vs what is done for pow in math_opts_dom_walker::after_dom_children:
> 
>           CASE_CFN_POW:
>             if (gimple_call_lhs (stmt)
>                 && TREE_CODE (gimple_call_arg (stmt, 1)) == REAL_CST
>                 && real_equal (&TREE_REAL_CST (gimple_call_arg (stmt, 1)),
>                                &dconst2)
>                 && convert_mult_to_fma (stmt,
>                                         gimple_call_arg (stmt, 0),
>                                         gimple_call_arg (stmt, 0),
>                                         &fma_state))
>               {
>                 unlink_stmt_vdef (stmt);
>                 if (gsi_remove (&gsi, true)
>                     && gimple_purge_dead_eh_edges (bb))
>                   *m_cfg_changed_p = true;
>                 release_defs (stmt);
>                 continue;
>               }

Notice the unlink_stmt_vdef there which updates the VOPs to be correct.

Reply via email to