From: Richard Kenner Date: Fri, 27 May 1994 18:56:31 +0000 (-0400) Subject: (expand_expr... X-Git-Tag: misc/cutover-egcs-0~6578 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d720b9d197634ff2ac556cfb17b586c17b08f54a;p=thirdparty%2Fgcc.git (expand_expr... (expand_expr, case CONSTRUCTOR): If constant and large enough for memcpy to be used, build constructor into static memory. From-SVN: r7365 --- diff --git a/gcc/expr.c b/gcc/expr.c index 9910a5a59c73..9c5f0a4229f3 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -4102,12 +4102,18 @@ expand_expr (exp, target, tmode, modifier) if this is a non-BLKmode mode, let it store a field at a time since that should make a CONST_INT or CONST_DOUBLE when we fold. Likewise, if we have a target we can use, it is best to - store directly into the target. If we are making an initializer and + store directly into the target unless the type is large enough + that memcpy will be used. If we are making an initializer and all operands are constant, put it in memory as well. */ else if ((TREE_STATIC (exp) && ((mode == BLKmode && ! (target != 0 && safe_from_p (target, exp))) - || TREE_ADDRESSABLE (exp))) + || TREE_ADDRESSABLE (exp) + || (TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST + && (move_by_pieces_ninsns + (TREE_INT_CST_LOW (TYPE_SIZE (type)), + TYPE_ALIGN (type)) + > MOVE_RATIO)))) || (modifier == EXPAND_INITIALIZER && TREE_CONSTANT (exp))) { rtx constructor = output_constant_def (exp);