From: Tom de Vries Date: Mon, 3 Sep 2018 10:14:52 +0000 (+0000) Subject: backport "[tail-merge] Fix side-effect test in stmt_local_def" X-Git-Tag: releases/gcc-6.5.0~86 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8026cd4783640171c0bbdbc23c8e275dddfc315d;p=thirdparty%2Fgcc.git backport "[tail-merge] Fix side-effect test in stmt_local_def" 2018-09-03 Tom de Vries backport from trunk: 2018-06-21 Tom de Vries PR tree-optimization/85859 * tree-ssa-tail-merge.c (stmt_local_def): Copy gimple_is_call test with comment from bb_no_side_effects_p. * gcc.dg/pr85859.c: New test. From-SVN: r264055 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5f36e461958d..62f656d16465 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2018-09-03 Tom de Vries + + backport from trunk: + 2018-06-21 Tom de Vries + + PR tree-optimization/85859 + * tree-ssa-tail-merge.c (stmt_local_def): Copy gimple_is_call + test with comment from bb_no_side_effects_p. + 2018-08-21 H.J. Lu Backport from mainline diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index c8e819b89523..47c5b77a16bb 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2018-09-03 Tom de Vries + + backport from trunk: + 2018-06-21 Tom de Vries + + PR tree-optimization/85859 + * gcc.dg/pr85859.c: New test. + 2018-08-21 H.J. Lu Backport from mainline diff --git a/gcc/testsuite/gcc.dg/pr85859.c b/gcc/testsuite/gcc.dg/pr85859.c new file mode 100644 index 000000000000..96eb96711371 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr85859.c @@ -0,0 +1,19 @@ +/* { dg-do run } */ +/* { dg-options "-ftree-tail-merge -Wno-div-by-zero -O2 -fno-dce -fno-isolate-erroneous-paths-dereference -fno-tree-dce -fno-tree-vrp" } */ + +int b, c, d, e; + +__attribute__ ((noinline, noclone)) +int foo (short f) +{ + f %= 0; + return f; +} + +int +main (void) +{ + b = (unsigned char) __builtin_parity (d); + e ? foo (0) : (long) &c; + return 0; +} diff --git a/gcc/tree-ssa-tail-merge.c b/gcc/tree-ssa-tail-merge.c index a51b1b81740d..57ae47420e36 100644 --- a/gcc/tree-ssa-tail-merge.c +++ b/gcc/tree-ssa-tail-merge.c @@ -298,7 +298,15 @@ stmt_local_def (gimple *stmt) if (gimple_vdef (stmt) != NULL_TREE || gimple_has_side_effects (stmt) || gimple_could_trap_p_1 (stmt, false, false) - || gimple_vuse (stmt) != NULL_TREE) + || gimple_vuse (stmt) != NULL_TREE + /* Copied from tree-ssa-ifcombine.c:bb_no_side_effects_p(): + const calls don't match any of the above, yet they could + still have some side-effects - they could contain + gimple_could_trap_p statements, like floating point + exceptions or integer division by zero. See PR70586. + FIXME: perhaps gimple_has_side_effects or gimple_could_trap_p + should handle this. */ + || is_gimple_call (stmt)) return false; def_p = SINGLE_SSA_DEF_OPERAND (stmt, SSA_OP_DEF);