diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pr34825.c | 8 | ||||
-rw-r--r-- | gcc/tree-ssa-math-opts.c | 6 |
4 files changed, 24 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 309c57f..1700242 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2008-01-17 Richard Guenther <rguenther@suse.de> + + PR tree-optimization/34825 + * tree-ssa-math-opts.c (is_division_by): Do not recognize + x / x as division to handle. + 2008-01-16 John David Anglin <dave.anglin@nrc-cnrc.gc.ca> * pa64-hpux.h (LIB_SPEC): Add "-lpthread" in shared links if "-mt" or diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index f732e1d..a4a9546 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,10 @@ 2008-01-17 Richard Guenther <rguenther@suse.de> + PR tree-optimization/34825 + * gcc.dg/pr34825.c: New testcase. + +2008-01-17 Richard Guenther <rguenther@suse.de> + * gcc.c-torture/execute/20080117-1.c: New testcase. 2008-01-17 Revital Eres <eres@il.ibm.com> diff --git a/gcc/testsuite/gcc.dg/pr34825.c b/gcc/testsuite/gcc.dg/pr34825.c new file mode 100644 index 0000000..40061ba --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr34825.c @@ -0,0 +1,8 @@ +/* { dg-do compile } */ +/* { dg-options "-O -funsafe-math-optimizations" } */ + +double foo(double x, double y) +{ + return x == y ? x/y*x/y : 0; +} + diff --git a/gcc/tree-ssa-math-opts.c b/gcc/tree-ssa-math-opts.c index 543169a..5a7bf8b 100644 --- a/gcc/tree-ssa-math-opts.c +++ b/gcc/tree-ssa-math-opts.c @@ -275,7 +275,11 @@ is_division_by (tree use_stmt, tree def) { return TREE_CODE (use_stmt) == GIMPLE_MODIFY_STMT && TREE_CODE (GIMPLE_STMT_OPERAND (use_stmt, 1)) == RDIV_EXPR - && TREE_OPERAND (GIMPLE_STMT_OPERAND (use_stmt, 1), 1) == def; + && TREE_OPERAND (GIMPLE_STMT_OPERAND (use_stmt, 1), 1) == def + /* Do not recognize x / x as valid division, as we are getting + confused later by replacing all immediate uses x in such + a stmt. */ + && TREE_OPERAND (GIMPLE_STMT_OPERAND (use_stmt, 1), 0) != def; } /* Walk the subset of the dominator tree rooted at OCC, setting the |