re PR tree-optimization/79697 (unused realloc(0, n) not eliminated)
2017-04-29 Prathamesh Kulkarni <prathamesh.kulkarni@linaro.org> PR tree-optimization/79697 * tree-ssa-dce.c (mark_stmt_if_obviously_necessary): Check if callee is BUILT_IN_STRDUP, BUILT_IN_STRNDUP, BUILT_IN_REALLOC. (propagate_necessity): Check if def_callee is BUILT_IN_STRDUP or BUILT_IN_STRNDUP. * gimple-fold.c (gimple_fold_builtin_realloc): New function. (gimple_fold_builtin): Call gimple_fold_builtin_realloc. testsuite/ * gcc.dg/tree-ssa/pr79697.c: New test. From-SVN: r247407
This commit is contained in:
parent
6bcd876838
commit
fe75f73248
@ -1,3 +1,13 @@
|
||||
2017-04-29 Prathamesh Kulkarni <prathamesh.kulkarni@linaro.org>
|
||||
|
||||
PR tree-optimization/79697
|
||||
* tree-ssa-dce.c (mark_stmt_if_obviously_necessary): Check if callee
|
||||
is BUILT_IN_STRDUP, BUILT_IN_STRNDUP, BUILT_IN_REALLOC.
|
||||
(propagate_necessity): Check if def_callee is BUILT_IN_STRDUP or
|
||||
BUILT_IN_STRNDUP.
|
||||
* gimple-fold.c (gimple_fold_builtin_realloc): New function.
|
||||
(gimple_fold_builtin): Call gimple_fold_builtin_realloc.
|
||||
|
||||
2017-04-28 Martin Sebor <msebor@redhat.com>
|
||||
|
||||
PR tree-optimization/80523
|
||||
|
@ -3251,6 +3251,28 @@ gimple_fold_builtin_acc_on_device (gimple_stmt_iterator *gsi, tree arg0)
|
||||
return true;
|
||||
}
|
||||
|
||||
/* Fold realloc (0, n) -> malloc (n). */
|
||||
|
||||
static bool
|
||||
gimple_fold_builtin_realloc (gimple_stmt_iterator *gsi)
|
||||
{
|
||||
gimple *stmt = gsi_stmt (*gsi);
|
||||
tree arg = gimple_call_arg (stmt, 0);
|
||||
tree size = gimple_call_arg (stmt, 1);
|
||||
|
||||
if (operand_equal_p (arg, null_pointer_node, 0))
|
||||
{
|
||||
tree fn_malloc = builtin_decl_implicit (BUILT_IN_MALLOC);
|
||||
if (fn_malloc)
|
||||
{
|
||||
gcall *repl = gimple_build_call (fn_malloc, 1, size);
|
||||
replace_call_with_call_and_fold (gsi, repl);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Fold the non-target builtin at *GSI and return whether any simplification
|
||||
was made. */
|
||||
|
||||
@ -3409,6 +3431,9 @@ gimple_fold_builtin (gimple_stmt_iterator *gsi)
|
||||
case BUILT_IN_ACC_ON_DEVICE:
|
||||
return gimple_fold_builtin_acc_on_device (gsi,
|
||||
gimple_call_arg (stmt, 0));
|
||||
case BUILT_IN_REALLOC:
|
||||
return gimple_fold_builtin_realloc (gsi);
|
||||
|
||||
default:;
|
||||
}
|
||||
|
||||
|
@ -1,3 +1,8 @@
|
||||
2017-04-29 Prathamesh Kulkarni <prathamesh.kulkarni@linaro.org>
|
||||
|
||||
PR tree-optimization/79697
|
||||
* gcc.dg/tree-ssa/pr79697.c: New test.
|
||||
|
||||
2017-04-29 Tom de Vries <tom@codesourcery.com>
|
||||
|
||||
* gcc.dg/tree-prof/pr66295.c: Require effective target avx512f.
|
||||
|
33
gcc/testsuite/gcc.dg/tree-ssa/pr79697.c
Normal file
33
gcc/testsuite/gcc.dg/tree-ssa/pr79697.c
Normal file
@ -0,0 +1,33 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fdump-tree-gimple -fdump-tree-cddce-details -fdump-tree-optimized" } */
|
||||
|
||||
void f(void)
|
||||
{
|
||||
__builtin_strdup ("abc");
|
||||
}
|
||||
|
||||
void g(void)
|
||||
{
|
||||
__builtin_strndup ("abc", 3);
|
||||
}
|
||||
|
||||
void h(void)
|
||||
{
|
||||
__builtin_realloc (0, 10);
|
||||
}
|
||||
|
||||
void k(void)
|
||||
{
|
||||
char *p = __builtin_strdup ("abc");
|
||||
__builtin_free (p);
|
||||
|
||||
char *q = __builtin_strndup ("abc", 3);
|
||||
__builtin_free (q);
|
||||
}
|
||||
|
||||
/* { dg-final { scan-tree-dump "Deleting : __builtin_strdup" "cddce1" } } */
|
||||
/* { dg-final { scan-tree-dump "Deleting : __builtin_strndup" "cddce1" } } */
|
||||
/* { dg-final { scan-tree-dump "__builtin_malloc" "gimple" } } */
|
||||
/* { dg-final { scan-tree-dump-not "__builtin_strdup" "optimized" } } */
|
||||
/* { dg-final { scan-tree-dump-not "__builtin_strndup" "optimized" } } */
|
||||
/* { dg-final { scan-tree-dump-not "__builtin_free" "optimized" } } */
|
@ -233,6 +233,8 @@ mark_stmt_if_obviously_necessary (gimple *stmt, bool aggressive)
|
||||
case BUILT_IN_CALLOC:
|
||||
case BUILT_IN_ALLOCA:
|
||||
case BUILT_IN_ALLOCA_WITH_ALIGN:
|
||||
case BUILT_IN_STRDUP:
|
||||
case BUILT_IN_STRNDUP:
|
||||
return;
|
||||
|
||||
default:;
|
||||
@ -780,7 +782,9 @@ propagate_necessity (bool aggressive)
|
||||
&& DECL_BUILT_IN_CLASS (def_callee) == BUILT_IN_NORMAL
|
||||
&& (DECL_FUNCTION_CODE (def_callee) == BUILT_IN_ALIGNED_ALLOC
|
||||
|| DECL_FUNCTION_CODE (def_callee) == BUILT_IN_MALLOC
|
||||
|| DECL_FUNCTION_CODE (def_callee) == BUILT_IN_CALLOC))
|
||||
|| DECL_FUNCTION_CODE (def_callee) == BUILT_IN_CALLOC
|
||||
|| DECL_FUNCTION_CODE (def_callee) == BUILT_IN_STRDUP
|
||||
|| DECL_FUNCTION_CODE (def_callee) == BUILT_IN_STRNDUP))
|
||||
{
|
||||
gimple *bounds_def_stmt;
|
||||
tree bounds;
|
||||
|
Loading…
Reference in New Issue
Block a user