aboutsummaryrefslogtreecommitdiff
path: root/gcc/expr.c
diff options
context:
space:
mode:
authorUros Bizjak <uros@gcc.gnu.org>2012-11-07 23:34:48 +0100
committerUros Bizjak <uros@gcc.gnu.org>2012-11-07 23:34:48 +0100
commit1939f02be107ce3334dacef9bf038f6f32a29574 (patch)
tree9e8fe562275b008838d5d17b264d28e9ca40cc7b /gcc/expr.c
parentdd64a6f7c8165c204b3cc2f353562df0b6bf335d (diff)
downloadgcc-1939f02be107ce3334dacef9bf038f6f32a29574.zip
gcc-1939f02be107ce3334dacef9bf038f6f32a29574.tar.gz
gcc-1939f02be107ce3334dacef9bf038f6f32a29574.tar.bz2
re PR middle-end/55235 (FAIL: gcc.target/i386/pr44948-2a.c)
PR middle-end/55235 * expr.c (store_expr): Do not call emit_block_move for non-BLKmode values. From-SVN: r193314
Diffstat (limited to 'gcc/expr.c')
-rw-r--r--gcc/expr.c17
1 files changed, 5 insertions, 12 deletions
diff --git a/gcc/expr.c b/gcc/expr.c
index 57e71fb..1e41625 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -5246,19 +5246,12 @@ store_expr (tree exp, rtx target, int call_param_p, bool nontemporal)
{
if (GET_MODE (target) == BLKmode)
{
- if (REG_P (temp))
- {
- if (TREE_CODE (exp) == CALL_EXPR)
- copy_blkmode_from_reg (target, temp, TREE_TYPE (exp));
- else
- store_bit_field (target,
- INTVAL (expr_size (exp)) * BITS_PER_UNIT,
- 0, 0, 0, GET_MODE (temp), temp);
- }
+ if (REG_P (temp) && TREE_CODE (exp) == CALL_EXPR)
+ copy_blkmode_from_reg (target, temp, TREE_TYPE (exp));
else
- emit_block_move (target, temp, expr_size (exp),
- (call_param_p
- ? BLOCK_OP_CALL_PARM : BLOCK_OP_NORMAL));
+ store_bit_field (target,
+ INTVAL (expr_size (exp)) * BITS_PER_UNIT,
+ 0, 0, 0, GET_MODE (temp), temp);
}
else
convert_move (target, temp, TYPE_UNSIGNED (TREE_TYPE (exp)));