summaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authordberlin <dberlin@138bc75d-0d04-0410-961f-82ee72b054a4>2005-05-18 03:07:44 +0000
committerdberlin <dberlin@138bc75d-0d04-0410-961f-82ee72b054a4>2005-05-18 03:07:44 +0000
commitf39e788929590b842e9c2b9bb9a66d9a5a341147 (patch)
tree24c63c4d12107641acb5b81de4441bb44307bb35 /gcc
parent6e912c1eee71909ad79bb94a2047b53055153ef6 (diff)
downloadgcc-f39e788929590b842e9c2b9bb9a66d9a5a341147.tar.gz
2005-05-17 Daniel Berlin <dberlin@dberlin.org>
* tree-ssa-pre.c (find_or_generate_expression): CALL_EXPR is okay too. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@99882 138bc75d-0d04-0410-961f-82ee72b054a4
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 4d9766b4dba..cd213f4e608 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 00000000000..856fda206b5
--- /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 54cbf639b77..2482a1329cf 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;