aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2006-02-23 16:03:47 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2006-02-23 16:03:47 +0000
commit98b2060a0def628fcc061edb036feabc98d00362 (patch)
treef3777bf3d31c538f27c71f1583d52f3832732738
parentb9e6e5887ad007447eaaf1dcca7c17cd25c044ca (diff)
downloadgcc-98b2060a0def628fcc061edb036feabc98d00362.zip
gcc-98b2060a0def628fcc061edb036feabc98d00362.tar.gz
gcc-98b2060a0def628fcc061edb036feabc98d00362.tar.bz2
re PR middle-end/26439 (missing VOPs for complex assignments)
2006-02-23 Richard Guenther <rguenther@suse.de> PR middle-end/26439 * tree-ssa-structalias.c (find_func_aliases): Handle complex types like aggregate types. From-SVN: r111389
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/tree-ssa-structalias.c16
2 files changed, 17 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 2b327b9..b04c578 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2006-02-23 Richard Guenther <rguenther@suse.de>
+
+ PR middle-end/26439
+ * tree-ssa-structalias.c (find_func_aliases): Handle complex types
+ like aggregate types.
+
2006-02-23 Jakub Jelinek <jakub@redhat.com>
* configure.ac: Add --with{,out}-long-double-128 configure option.
diff --git a/gcc/tree-ssa-structalias.c b/gcc/tree-ssa-structalias.c
index e7a9892..3dac076 100644
--- a/gcc/tree-ssa-structalias.c
+++ b/gcc/tree-ssa-structalias.c
@@ -3223,7 +3223,8 @@ find_func_aliases (tree origt)
/* Only care about pointers and structures containing
pointers. */
if (POINTER_TYPE_P (TREE_TYPE (PHI_RESULT (t)))
- || AGGREGATE_TYPE_P (TREE_TYPE (PHI_RESULT (t))))
+ || AGGREGATE_TYPE_P (TREE_TYPE (PHI_RESULT (t)))
+ || TREE_CODE (TREE_TYPE (PHI_RESULT (t))) == COMPLEX_TYPE)
{
int i;
unsigned int j;
@@ -3241,7 +3242,8 @@ find_func_aliases (tree origt)
get_constraint_for (PHI_ARG_DEF (t, i), &rhsc);
if (TREE_CODE (strippedrhs) == ADDR_EXPR
- && AGGREGATE_TYPE_P (TREE_TYPE (rhstype))
+ && (AGGREGATE_TYPE_P (TREE_TYPE (rhstype))
+ || TREE_CODE (TREE_TYPE (rhstype)) == COMPLEX_TYPE)
&& VEC_length (ce_s, rhsc) == 1)
{
struct constraint_expr *origrhs;
@@ -3384,8 +3386,10 @@ find_func_aliases (tree origt)
tree rhsop = TREE_OPERAND (t, 1);
int i;
- if (AGGREGATE_TYPE_P (TREE_TYPE (lhsop))
- && AGGREGATE_TYPE_P (TREE_TYPE (rhsop)))
+ if ((AGGREGATE_TYPE_P (TREE_TYPE (lhsop))
+ || TREE_CODE (TREE_TYPE (lhsop)) == COMPLEX_TYPE)
+ && (AGGREGATE_TYPE_P (TREE_TYPE (rhsop))
+ || TREE_CODE (TREE_TYPE (lhsop)) == COMPLEX_TYPE))
{
do_structure_copy (lhsop, rhsop);
}
@@ -3395,6 +3399,7 @@ find_func_aliases (tree origt)
containing pointers, dereferences, and call expressions. */
if (POINTER_TYPE_P (TREE_TYPE (lhsop))
|| AGGREGATE_TYPE_P (TREE_TYPE (lhsop))
+ || TREE_CODE (TREE_TYPE (lhsop)) == COMPLEX_TYPE
|| TREE_CODE (rhsop) == CALL_EXPR)
{
get_constraint_for (lhsop, &lhsc);
@@ -3421,7 +3426,8 @@ find_func_aliases (tree origt)
get_constraint_for (rhsop, &rhsc);
if (TREE_CODE (strippedrhs) == ADDR_EXPR
- && AGGREGATE_TYPE_P (TREE_TYPE (rhstype))
+ && (AGGREGATE_TYPE_P (TREE_TYPE (rhstype))
+ || TREE_CODE (TREE_TYPE (rhstype)) == COMPLEX_TYPE)
&& VEC_length (ce_s, rhsc) == 1)
{
struct constraint_expr *origrhs;