(expand_expr, case CONSTRUCTOR): Don't set target to zero if more then one word.
(expand_expr, case CONSTRUCTOR): Don't set target to zero if more then one word. Pass size and alignment to move_by_pieces_ninsns in bytes, not bits. From-SVN: r9548
This commit is contained in:
parent
c256df0bf7
commit
67225c151e
1 changed files with 6 additions and 4 deletions
10
gcc/expr.c
10
gcc/expr.c
|
@ -2984,8 +2984,10 @@ store_constructor (exp, target)
|
|||
|
||||
/* If we are building a static constructor into a register,
|
||||
set the initial value as zero so we can fold the value into
|
||||
a constant. */
|
||||
else if (GET_CODE (target) == REG && TREE_STATIC (exp))
|
||||
a constant. But if more than one register is involved,
|
||||
this probably loses. */
|
||||
else if (GET_CODE (target) == REG && TREE_STATIC (exp)
|
||||
&& GET_MODE_SIZE (GET_MODE (target)) <= UNITS_PER_WORD)
|
||||
emit_move_insn (target, const0_rtx);
|
||||
|
||||
/* If the constructor has fewer fields than the structure,
|
||||
|
@ -4473,8 +4475,8 @@ expand_expr (exp, target, tmode, modifier)
|
|||
|| TREE_ADDRESSABLE (exp)
|
||||
|| (TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST
|
||||
&& (move_by_pieces_ninsns
|
||||
(TREE_INT_CST_LOW (TYPE_SIZE (type)),
|
||||
TYPE_ALIGN (type))
|
||||
(TREE_INT_CST_LOW (TYPE_SIZE (type))/BITS_PER_UNIT,
|
||||
TYPE_ALIGN (type) / BITS_PER_UNIT)
|
||||
> MOVE_RATIO))))
|
||||
|| (modifier == EXPAND_INITIALIZER && TREE_CONSTANT (exp)))
|
||||
{
|
||||
|
|
Loading…
Add table
Reference in a new issue