aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/pr34825.c8
-rw-r--r--gcc/tree-ssa-math-opts.c6
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