diff options
author | Daniel Berlin <dberlin@dberlin.org> | 2005-05-18 03:07:44 +0000 |
---|---|---|
committer | Daniel Berlin <dberlin@gcc.gnu.org> | 2005-05-18 03:07:44 +0000 |
commit | a3cf80ecc75135c6e9ae3837adf525e5d81d1aa2 (patch) | |
tree | 24c63c4d12107641acb5b81de4441bb44307bb35 /gcc | |
parent | a21946f5a48ebcf6c94a6d9e8b5cd324bae61884 (diff) | |
download | gcc-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/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/20050517-1.c | 8 | ||||
-rw-r--r-- | gcc/tree-ssa-pre.c | 3 |
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; |