aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMartin Liska <mliska@suse.cz>2019-07-31 12:02:30 +0200
committerMartin Liska <marxin@gcc.gnu.org>2019-07-31 10:02:30 +0000
commitf39b06395e90d8c70548eedadc30e880f6426b26 (patch)
tree565fccf0e741cdffcbafaf66e804d92ff13d7e87 /gcc
parent0fbdb0c08856e9c37373cf04faef3213c3903531 (diff)
downloadgcc-f39b06395e90d8c70548eedadc30e880f6426b26.zip
gcc-f39b06395e90d8c70548eedadc30e880f6426b26.tar.gz
gcc-f39b06395e90d8c70548eedadc30e880f6426b26.tar.bz2
Mark necessary 2nd and later args for delete op.
2019-07-31 Martin Liska <mliska@suse.cz> * tree-ssa-dce.c (propagate_necessity): Delete operator can have size and (or) alignment as 2nd and later arguments. Mark all of them as necessary. From-SVN: r273929
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/tree-ssa-dce.c15
2 files changed, 15 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c7b99f2..564bd70 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2019-07-31 Martin Liska <mliska@suse.cz>
+
+ * tree-ssa-dce.c (propagate_necessity): Delete operator can
+ have size and (or) alignment as 2nd and later arguments.
+ Mark all of them as necessary.
+
2019-07-31 Richard Biener <rguenther@suse.de>
PR tree-optimization/91178
diff --git a/gcc/tree-ssa-dce.c b/gcc/tree-ssa-dce.c
index bec13cd..80d5f5c 100644
--- a/gcc/tree-ssa-dce.c
+++ b/gcc/tree-ssa-dce.c
@@ -824,13 +824,16 @@ propagate_necessity (bool aggressive)
|| DECL_FUNCTION_CODE (def_callee) == BUILT_IN_CALLOC))
|| DECL_IS_REPLACEABLE_OPERATOR_NEW_P (def_callee)))
{
- /* Some delete operators have size as 2nd argument. */
+ /* Delete operators can have alignment and (or) size as next
+ arguments. When being a SSA_NAME, they must be marked
+ as necessary. */
if (is_delete_operator && gimple_call_num_args (stmt) >= 2)
- {
- tree size_argument = gimple_call_arg (stmt, 1);
- if (TREE_CODE (size_argument) == SSA_NAME)
- mark_operand_necessary (size_argument);
- }
+ for (unsigned i = 1; i < gimple_call_num_args (stmt); i++)
+ {
+ tree arg = gimple_call_arg (stmt, i);
+ if (TREE_CODE (arg) == SSA_NAME)
+ mark_operand_necessary (arg);
+ }
continue;
}