From 29e9efdf755f49cc25a664586c42eacd43e611e0 Mon Sep 17 00:00:00 2001 From: Richard Guenther Date: Thu, 5 Aug 2010 16:37:38 +0000 Subject: [PATCH] expr.c (store_expr): Use emit_block_move only if both source and target are MEMs. 2010-08-05 Richard Guenther * expr.c (store_expr): Use emit_block_move only if both source and target are MEMs. Use store_bit_field if only the target is a MEM. From-SVN: r162918 --- gcc/ChangeLog | 6 ++++++ gcc/expr.c | 5 ++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f450d44525f..1397b74eb99 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2010-08-05 Richard Guenther + + * expr.c (store_expr): Use emit_block_move only if both + source and target are MEMs. Use store_bit_field if only + the target is a MEM. + 2010-08-05 Richard Henderson PR 45189 diff --git a/gcc/expr.c b/gcc/expr.c index 9134d6215b2..116c8df0f8e 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -4752,11 +4752,14 @@ store_expr (tree exp, rtx target, int call_param_p, bool nontemporal) { int unsignedp = TYPE_UNSIGNED (TREE_TYPE (exp)); if (GET_MODE (target) == BLKmode - || GET_MODE (temp) == BLKmode) + && GET_MODE (temp) == BLKmode) emit_block_move (target, temp, expr_size (exp), (call_param_p ? BLOCK_OP_CALL_PARM : BLOCK_OP_NORMAL)); + else if (GET_MODE (target) == BLKmode) + store_bit_field (target, INTVAL (expr_size (exp)) * BITS_PER_UNIT, + 0, GET_MODE (temp), temp); else convert_move (target, temp, unsignedp); }