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

--- Comment #6 from Martin Liška <marxin at gcc dot gnu.org> ---
(In reply to Martin Liška from comment #5)
> I've got a patch candidate:
> 
> diff --git a/gcc/tree-ssa-dce.c b/gcc/tree-ssa-dce.c
> index cf507fa0453..bdaad09ef35 100644
> --- a/gcc/tree-ssa-dce.c
> +++ b/gcc/tree-ssa-dce.c
> @@ -1294,6 +1294,21 @@ eliminate_unnecessary_stmts (void)
>                     && !gimple_plf (def_stmt, STMT_NECESSARY))
>                   gimple_set_plf (stmt, STMT_NECESSARY, false);
>               }
> +
> +           /* Delete operator has 2 arguments, where the second argument is
> +              size of the deallocated memory.  */
> +           if (is_gimple_call (stmt)
> +               && gimple_call_operator_delete_p (as_a <gcall *> (stmt)))
> +             {
> +               tree ptr = gimple_call_arg (stmt, 1);
> +               if (TREE_CODE (ptr) == SSA_NAME)
> +                 {
> +                   gimple *def_stmt = SSA_NAME_DEF_STMT (ptr);
> +                   if (!gimple_nop_p (def_stmt)
> +                       && !gimple_plf (def_stmt, STMT_NECESSARY))
> +                     gimple_set_plf (stmt, STMT_NECESSARY, false);
> +                 }
> +             }
>           }
>  
>         /* If GSI is not necessary then remove it.  */
> 
> I'll finish it tomorrow morning and send it to mailing list.

This patch will be better:

diff --git a/gcc/tree-ssa-dce.c b/gcc/tree-ssa-dce.c
index cf507fa0453..04338a67181 100644
--- a/gcc/tree-ssa-dce.c
+++ b/gcc/tree-ssa-dce.c
@@ -1294,6 +1294,20 @@ eliminate_unnecessary_stmts (void)
                      && !gimple_plf (def_stmt, STMT_NECESSARY))
                    gimple_set_plf (stmt, STMT_NECESSARY, false);
                }
+
+             /* Some delete operators have 2 arguments, where the second
argument is
+                size of the deallocated memory.  */
+             if (gimple_call_num_args (stmt) == 2)
+               {
+                 tree ptr = gimple_call_arg (stmt, 1);
+                 if (TREE_CODE (ptr) == SSA_NAME)
+                   {
+                     gimple *def_stmt = SSA_NAME_DEF_STMT (ptr);
+                     if (!gimple_nop_p (def_stmt)
+                         && !gimple_plf (def_stmt, STMT_NECESSARY))
+                       gimple_set_plf (stmt, STMT_NECESSARY, false);
+                   }
+               }
            }

          /* If GSI is not necessary then remove it.  */

Reply via email to