https://gcc.gnu.org/bugzilla/show_bug.cgi?id=123958
--- Comment #11 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
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;
}