aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorAldy Hernandez <aldyh@redhat.com>2002-05-31 02:21:31 +0000
committerAldy Hernandez <aldyh@gcc.gnu.org>2002-05-31 02:21:31 +0000
commit00182e1edccfe503b6a28319215123d35b07af19 (patch)
tree0cc15e47f21164650f205cb28792b9e1e8005076 /gcc
parentb4eb03fef0038be54957aea4e18b2e79c4452937 (diff)
downloadgcc-00182e1edccfe503b6a28319215123d35b07af19.zip
gcc-00182e1edccfe503b6a28319215123d35b07af19.tar.gz
gcc-00182e1edccfe503b6a28319215123d35b07af19.tar.bz2
expr.c (expand_expr): Output partially zeroed out vectors with output_constant_def.
2002-05-31 Aldy Hernandez <aldyh@redhat.com> * expr.c (expand_expr): Output partially zeroed out vectors with output_constant_def. From-SVN: r54080
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/expr.c12
2 files changed, 15 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 0a59a30..3e6bc49 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2002-05-31 Aldy Hernandez <aldyh@redhat.com>
+
+ * expr.c (expand_expr): Output partially zeroed out vectors with
+ output_constant_def.
+
2002-05-30 Jason Thorpe <thorpej@wasabisystems.com>
* config.gcc (sh[123456789l]*-*-*): Set cpu_type to sh.
diff --git a/gcc/expr.c b/gcc/expr.c
index f839b40..b373ad2 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -6758,7 +6758,13 @@ expand_expr (exp, target, tmode, modifier)
fold. Likewise, if we have a target we can use, it is best to
store directly into the target unless the type is large enough
that memcpy will be used. If we are making an initializer and
- all operands are constant, put it in memory as well. */
+ all operands are constant, put it in memory as well.
+
+ FIXME: Avoid trying to fill vector constructors piece-meal.
+ Output them with output_constant_def below unless we're sure
+ they're zeros. This should go away when vector initializers
+ are treated like VECTOR_CST instead of arrays.
+ */
else if ((TREE_STATIC (exp)
&& ((mode == BLKmode
&& ! (target != 0 && safe_from_p (target, exp, 1)))
@@ -6767,7 +6773,9 @@ expand_expr (exp, target, tmode, modifier)
&& (! MOVE_BY_PIECES_P
(tree_low_cst (TYPE_SIZE_UNIT (type), 1),
TYPE_ALIGN (type)))
- && ! mostly_zeros_p (exp))))
+ && ((TREE_CODE (type) == VECTOR_TYPE
+ && !is_zeros_p (exp))
+ || ! mostly_zeros_p (exp)))))
|| (modifier == EXPAND_INITIALIZER && TREE_CONSTANT (exp)))
{
rtx constructor = output_constant_def (exp, 1);