diff options
author | Richard Guenther <rguenther@suse.de> | 2006-02-23 16:03:47 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2006-02-23 16:03:47 +0000 |
commit | 98b2060a0def628fcc061edb036feabc98d00362 (patch) | |
tree | f3777bf3d31c538f27c71f1583d52f3832732738 | |
parent | b9e6e5887ad007447eaaf1dcca7c17cd25c044ca (diff) | |
download | gcc-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/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/tree-ssa-structalias.c | 16 |
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; |