Commit 98b2060a by Richard Guenther Committed by Richard Biener

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
parent b9e6e588
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> 2006-02-23 Jakub Jelinek <jakub@redhat.com>
* configure.ac: Add --with{,out}-long-double-128 configure option. * configure.ac: Add --with{,out}-long-double-128 configure option.
......
...@@ -3223,7 +3223,8 @@ find_func_aliases (tree origt) ...@@ -3223,7 +3223,8 @@ find_func_aliases (tree origt)
/* Only care about pointers and structures containing /* Only care about pointers and structures containing
pointers. */ pointers. */
if (POINTER_TYPE_P (TREE_TYPE (PHI_RESULT (t))) 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; int i;
unsigned int j; unsigned int j;
...@@ -3241,7 +3242,8 @@ find_func_aliases (tree origt) ...@@ -3241,7 +3242,8 @@ find_func_aliases (tree origt)
get_constraint_for (PHI_ARG_DEF (t, i), &rhsc); get_constraint_for (PHI_ARG_DEF (t, i), &rhsc);
if (TREE_CODE (strippedrhs) == ADDR_EXPR 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) && VEC_length (ce_s, rhsc) == 1)
{ {
struct constraint_expr *origrhs; struct constraint_expr *origrhs;
...@@ -3384,8 +3386,10 @@ find_func_aliases (tree origt) ...@@ -3384,8 +3386,10 @@ find_func_aliases (tree origt)
tree rhsop = TREE_OPERAND (t, 1); tree rhsop = TREE_OPERAND (t, 1);
int i; int i;
if (AGGREGATE_TYPE_P (TREE_TYPE (lhsop)) if ((AGGREGATE_TYPE_P (TREE_TYPE (lhsop))
&& AGGREGATE_TYPE_P (TREE_TYPE (rhsop))) || 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); do_structure_copy (lhsop, rhsop);
} }
...@@ -3395,6 +3399,7 @@ find_func_aliases (tree origt) ...@@ -3395,6 +3399,7 @@ find_func_aliases (tree origt)
containing pointers, dereferences, and call expressions. */ containing pointers, dereferences, and call expressions. */
if (POINTER_TYPE_P (TREE_TYPE (lhsop)) if (POINTER_TYPE_P (TREE_TYPE (lhsop))
|| AGGREGATE_TYPE_P (TREE_TYPE (lhsop)) || AGGREGATE_TYPE_P (TREE_TYPE (lhsop))
|| TREE_CODE (TREE_TYPE (lhsop)) == COMPLEX_TYPE
|| TREE_CODE (rhsop) == CALL_EXPR) || TREE_CODE (rhsop) == CALL_EXPR)
{ {
get_constraint_for (lhsop, &lhsc); get_constraint_for (lhsop, &lhsc);
...@@ -3421,7 +3426,8 @@ find_func_aliases (tree origt) ...@@ -3421,7 +3426,8 @@ find_func_aliases (tree origt)
get_constraint_for (rhsop, &rhsc); get_constraint_for (rhsop, &rhsc);
if (TREE_CODE (strippedrhs) == ADDR_EXPR 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) && VEC_length (ce_s, rhsc) == 1)
{ {
struct constraint_expr *origrhs; struct constraint_expr *origrhs;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment