From a9b2074047607d80cbbab991a3c6f772cb2620f1 Mon Sep 17 00:00:00 2001 From: Richard Guenther Date: Tue, 5 Feb 2008 12:31:50 +0000 Subject: [PATCH] backport: re PR tree-optimization/34825 (ICE with -funsafe-math-optimizations) 2008-05-02 Richard Guenther Backport from mainline: 2008-01-17 Richard Guenther PR tree-optimization/34825 * tree-ssa-math-opts.c (is_division_by): Do not recognize x / x as division to handle. * gcc.dg/pr34825.c: New testcase. From-SVN: r132119 --- gcc/ChangeLog | 9 +++++++++ gcc/testsuite/ChangeLog | 8 ++++++++ gcc/testsuite/gcc.dg/pr34825.c | 8 ++++++++ gcc/tree-ssa-math-opts.c | 6 +++++- 4 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.dg/pr34825.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index fb6472fb9095..9d1b6ae34e64 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2008-02-05 Richard Guenther + + Backport from mainline: + 2008-01-17 Richard Guenther + + PR tree-optimization/34825 + * tree-ssa-math-opts.c (is_division_by): Do not recognize + x / x as division to handle. + 2008-02-05 Joseph Myers * doc/include/texinfo.tex: Update to version 2008-02-04.16. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index feda984adaf9..07cffc5a2ba3 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2008-02-05 Richard Guenther + + Backport from mainline: + 2008-01-17 Richard Guenther + + PR tree-optimization/34825 + * gcc.dg/pr34825.c: New testcase. + 2008-02-05 Richard Guenther Backport from mainline: diff --git a/gcc/testsuite/gcc.dg/pr34825.c b/gcc/testsuite/gcc.dg/pr34825.c new file mode 100644 index 000000000000..40061bad6b53 --- /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 c3942ed65537..5ce3a544ae77 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) == MODIFY_EXPR && TREE_CODE (TREE_OPERAND (use_stmt, 1)) == RDIV_EXPR - && TREE_OPERAND (TREE_OPERAND (use_stmt, 1), 1) == def; + && TREE_OPERAND (TREE_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 (TREE_OPERAND (use_stmt, 1), 0) != def; } /* Walk the subset of the dominator tree rooted at OCC, setting the -- 2.47.2