Commit 67225c15 by Richard Kenner

(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
parent c256df0b
...@@ -2984,8 +2984,10 @@ store_constructor (exp, target) ...@@ -2984,8 +2984,10 @@ store_constructor (exp, target)
/* If we are building a static constructor into a register, /* If we are building a static constructor into a register,
set the initial value as zero so we can fold the value into set the initial value as zero so we can fold the value into
a constant. */ a constant. But if more than one register is involved,
else if (GET_CODE (target) == REG && TREE_STATIC (exp)) 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); emit_move_insn (target, const0_rtx);
/* If the constructor has fewer fields than the structure, /* If the constructor has fewer fields than the structure,
...@@ -4473,8 +4475,8 @@ expand_expr (exp, target, tmode, modifier) ...@@ -4473,8 +4475,8 @@ expand_expr (exp, target, tmode, modifier)
|| TREE_ADDRESSABLE (exp) || TREE_ADDRESSABLE (exp)
|| (TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST || (TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST
&& (move_by_pieces_ninsns && (move_by_pieces_ninsns
(TREE_INT_CST_LOW (TYPE_SIZE (type)), (TREE_INT_CST_LOW (TYPE_SIZE (type))/BITS_PER_UNIT,
TYPE_ALIGN (type)) TYPE_ALIGN (type) / BITS_PER_UNIT)
> MOVE_RATIO)))) > MOVE_RATIO))))
|| (modifier == EXPAND_INITIALIZER && TREE_CONSTANT (exp))) || (modifier == EXPAND_INITIALIZER && TREE_CONSTANT (exp)))
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment