From: Richard Kenner Date: Sun, 30 Apr 1995 11:22:58 +0000 (-0400) Subject: (expand_expr, case CONSTRUCTOR): Don't set target to zero if more then one word. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=67225c151ef76370f5bd0732ba2287a74e0c85a5;p=gcc.git (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 --- diff --git a/gcc/expr.c b/gcc/expr.c index 818618927ca..e940ccb3a9c 100644 --- a/gcc/expr.c +++ b/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))) {