From c22c0db26ad16673415d7523781fcf80c8e545ba Mon Sep 17 00:00:00 2001 From: Richard Guenther Date: Thu, 8 Sep 2011 09:21:39 +0000 Subject: re PR tree-optimization/19831 (Missing DSE/malloc/free optimization) 2011-09-08 Richard Guenther PR tree-optimization/19831 * tree-ssa-dce.c (mark_stmt_if_obviously_necessary): Do not mark allocation functions as necessary. * gcc.dg/tree-ssa/ssa-dce-8.c: New testcase. From-SVN: r178683 --- gcc/tree-ssa-dce.c | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) (limited to 'gcc/tree-ssa-dce.c') diff --git a/gcc/tree-ssa-dce.c b/gcc/tree-ssa-dce.c index c9ad311..e29f365 100644 --- a/gcc/tree-ssa-dce.c +++ b/gcc/tree-ssa-dce.c @@ -299,17 +299,29 @@ mark_stmt_if_obviously_necessary (gimple stmt, bool aggressive) return; case GIMPLE_CALL: - /* Most, but not all function calls are required. Function calls that - produce no result and have no side effects (i.e. const pure - functions) are unnecessary. */ - if (gimple_has_side_effects (stmt)) - { - mark_stmt_necessary (stmt, true); + { + tree callee = gimple_call_fndecl (stmt); + if (callee != NULL_TREE + && DECL_BUILT_IN_CLASS (callee) == BUILT_IN_NORMAL) + switch (DECL_FUNCTION_CODE (callee)) + { + case BUILT_IN_MALLOC: + case BUILT_IN_CALLOC: + case BUILT_IN_ALLOCA: + return; + } + /* Most, but not all function calls are required. Function calls that + produce no result and have no side effects (i.e. const pure + functions) are unnecessary. */ + if (gimple_has_side_effects (stmt)) + { + mark_stmt_necessary (stmt, true); + return; + } + if (!gimple_call_lhs (stmt)) return; - } - if (!gimple_call_lhs (stmt)) - return; - break; + break; + } case GIMPLE_DEBUG: /* Debug temps without a value are not useful. ??? If we could -- cgit v1.1