OSDN Git Service

2005-05-17 Daniel Berlin <dberlin@dberlin.org>
authordberlin <dberlin@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 18 May 2005 03:07:44 +0000 (03:07 +0000)
committerdberlin <dberlin@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 18 May 2005 03:07:44 +0000 (03:07 +0000)
* 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

gcc/ChangeLog
gcc/testsuite/gcc.dg/20050517-1.c [new file with mode: 0644]
gcc/tree-ssa-pre.c

index 4d9766b..cd213f4 100644 (file)
@@ -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 (file)
index 0000000..856fda2
--- /dev/null
@@ -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); }
index 54cbf63..2482a13 100644 (file)
@@ -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;