Message ID | CAFULd4agWkmyJbts0wWatKYat+YQHFgbSfbjtWnSQj=gg-JLUg@mail.gmail.com |
---|---|
State | New |
Headers | show |
On Wed, Nov 7, 2012 at 11:08 PM, Uros Bizjak <ubizjak@gmail.com> wrote: > The patch simply removes the call to emit_block_move, while still > calling copy_blkmode_from_reg when appropriate. The patch fixes the > testsuite failure and produces the same code as gcc-4.7. > > 2012-11-07 Uros Bizjak <ubizjak@gmail.com> > > PR middle-end/55235 > * expr.c (store_expr): Do not call emit_block_move for > non-BLKmode values. > > Patch was bootstrapped and regression tested on x86_64-pc-linux-gnu {,-m32}. > > OK for mainline? Oh, I didn't notice that Eric already approved the patch in the PR. Although he thinks the "feature" that the patch fixes is a bit controversial, it actually restores previous functionality. So, committed to mainline SVN. Uros.
Index: expr.c =================================================================== --- expr.c (revision 193296) +++ expr.c (working copy) @@ -5246,19 +5246,12 @@ store_expr (tree exp, rtx target, int call_param_p { 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)));