diff options
author | Richard Guenther <rguenther@suse.de> | 2010-08-05 16:37:38 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2010-08-05 16:37:38 +0000 |
commit | 29e9efdf755f49cc25a664586c42eacd43e611e0 (patch) | |
tree | dfdf3d90662bbb674a86d1f0e732bbad9e8aa718 /gcc | |
parent | c3576fa73ff12307297fe73ff8c92ff059669e3a (diff) | |
download | gcc-29e9efdf755f49cc25a664586c42eacd43e611e0.zip gcc-29e9efdf755f49cc25a664586c42eacd43e611e0.tar.gz gcc-29e9efdf755f49cc25a664586c42eacd43e611e0.tar.bz2 |
expr.c (store_expr): Use emit_block_move only if both source and target are MEMs.
2010-08-05 Richard Guenther <rguenther@suse.de>
* 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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/expr.c | 5 |
2 files changed, 10 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f450d44..1397b74 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2010-08-05 Richard Guenther <rguenther@suse.de> + + * 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 <rth@redhat.com> PR 45189 @@ -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); } |