aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorDaniel Berlin <dberlin@dberlin.org>2005-05-18 03:07:44 +0000
committerDaniel Berlin <dberlin@gcc.gnu.org>2005-05-18 03:07:44 +0000
commita3cf80ecc75135c6e9ae3837adf525e5d81d1aa2 (patch)
tree24c63c4d12107641acb5b81de4441bb44307bb35 /gcc
parenta21946f5a48ebcf6c94a6d9e8b5cd324bae61884 (diff)
downloadgcc-a3cf80ecc75135c6e9ae3837adf525e5d81d1aa2.zip
gcc-a3cf80ecc75135c6e9ae3837adf525e5d81d1aa2.tar.gz
gcc-a3cf80ecc75135c6e9ae3837adf525e5d81d1aa2.tar.bz2
tree-ssa-pre.c (find_or_generate_expression): CALL_EXPR is okay too.
2005-05-17 Daniel Berlin <dberlin@dberlin.org> * tree-ssa-pre.c (find_or_generate_expression): CALL_EXPR is okay too. From-SVN: r99882
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/20050517-1.c8
-rw-r--r--gcc/tree-ssa-pre.c3
3 files changed, 15 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 4d9766b..cd213f4 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2005-05-17 Daniel Berlin <dberlin@dberlin.org>
+
+ * tree-ssa-pre.c (find_or_generate_expression): CALL_EXPR
+ is okay too.
+
2005-05-17 Zdenek Dvorak <dvorakz@suse.cz>
* timevar.def (TV_SCEV_CONST): New timevar.
diff --git a/gcc/testsuite/gcc.dg/20050517-1.c b/gcc/testsuite/gcc.dg/20050517-1.c
new file mode 100644
index 0000000..856fda2
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/20050517-1.c
@@ -0,0 +1,8 @@
+/* Tree PRE is going to transform this so that it doesn't call cos on the
+ d = 0 path, and in doing so, it needs to regenerate the cos call.
+ This was ICE'ing due to an overly strict check on what it knew how
+ to regenerate. */
+/* { dg-do compile } */
+/* { dg-options "-O2 -ffast-math" } */
+double cos(double);
+double f(double d, double i, int j) { if (j == 1) d = 0; return d * cos(i); }
diff --git a/gcc/tree-ssa-pre.c b/gcc/tree-ssa-pre.c
index 54cbf63..2482a13 100644
--- a/gcc/tree-ssa-pre.c
+++ b/gcc/tree-ssa-pre.c
@@ -1467,7 +1467,8 @@ find_or_generate_expression (basic_block block, tree expr, tree stmts)
gcc_assert (UNARY_CLASS_P (genop)
|| BINARY_CLASS_P (genop)
|| COMPARISON_CLASS_P (genop)
- || REFERENCE_CLASS_P (genop));
+ || REFERENCE_CLASS_P (genop)
+ || TREE_CODE (genop) == CALL_EXPR);
genop = create_expression_by_pieces (block, genop, stmts);
}
return genop;