diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ebe2b7d7a296aff6bf31c17cbec58ae0e8d3c79b..983ad2ce792f3da86ba771b690d255cec5dc04ba 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2004-12-31 Richard Henderson <rth@redhat.com> + + PR tree-opt/19042 + * tree-sra.c (decide_block_copy): Force use_block_copy false + for complex values. + 2004-12-31 Richard Henderson <rth@redhat.com> PR middle-end/17799 diff --git a/gcc/tree-sra.c b/gcc/tree-sra.c index 1c1739b18b21ada95899abccf499152ec8bcb210..bb98a8afe6cff094951b13c348d264709a83e164 100644 --- a/gcc/tree-sra.c +++ b/gcc/tree-sra.c @@ -1293,10 +1293,15 @@ decide_block_copy (struct sra_elt *elt) tree size_tree = TYPE_SIZE_UNIT (elt->type); bool use_block_copy = true; + /* Tradeoffs for COMPLEX types pretty much always make it better + to go ahead and split the components. */ + if (TREE_CODE (elt->type) == COMPLEX_TYPE) + use_block_copy = false; + /* Don't bother trying to figure out the rest if the structure is so large we can't do easy arithmetic. This also forces block copies for variable sized structures. */ - if (host_integerp (size_tree, 1)) + else if (host_integerp (size_tree, 1)) { unsigned HOST_WIDE_INT full_size, inst_size = 0; unsigned int inst_count;