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/expr.c | |
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/expr.c')
-rw-r--r-- | gcc/expr.c | 5 |
1 files changed, 4 insertions, 1 deletions
@@ -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); } |