diff options
author | Tom de Vries <tdevries@suse.de> | 2018-06-21 12:44:38 +0000 |
---|---|---|
committer | Tom de Vries <vries@gcc.gnu.org> | 2018-06-21 12:44:38 +0000 |
commit | 494e75321f6ce62918be661ef6b38c5888f0acaf (patch) | |
tree | c363c86b863b7d2748adf44928a3d1c67fdfec12 /gcc | |
parent | 8732dd82418090d9bb0f6279d0e5a5af52266d6b (diff) | |
download | gcc-494e75321f6ce62918be661ef6b38c5888f0acaf.zip gcc-494e75321f6ce62918be661ef6b38c5888f0acaf.tar.gz gcc-494e75321f6ce62918be661ef6b38c5888f0acaf.tar.bz2 |
[tail-merge] Fix side-effect test in stmt_local_def
2018-06-21 Tom de Vries <tdevries@suse.de>
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: r261844
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pr85859.c | 19 | ||||
-rw-r--r-- | gcc/tree-ssa-tail-merge.c | 10 |
4 files changed, 39 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 09af134..266ab55 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2018-06-21 Tom de Vries <tdevries@suse.de> + + 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-06-21 Richard Biener <rguenther@suse.de> PR tree-optimization/86232 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 3d53dd4..93ba5e1 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2018-06-21 Tom de Vries <tdevries@suse.de> + + PR tree-optimization/85859 + * gcc.dg/pr85859.c: New test. + 2018-06-21 Richard Biener <rguenther@suse.de> PR tree-optimization/86232 diff --git a/gcc/testsuite/gcc.dg/pr85859.c b/gcc/testsuite/gcc.dg/pr85859.c new file mode 100644 index 0000000..96eb967 --- /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 f482ce1..1583881 100644 --- a/gcc/tree-ssa-tail-merge.c +++ b/gcc/tree-ssa-tail-merge.c @@ -301,7 +301,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); |