(expand_expr, case CONSTRUCTOR): If have a target, don't build
constructor into memory. From-SVN: r6323
This commit is contained in:
parent
307b821c36
commit
3207b172f7
10
gcc/expr.c
10
gcc/expr.c
|
@ -4089,13 +4089,17 @@ expand_expr (exp, target, tmode, modifier)
|
|||
expand_expr (TREE_VALUE (elt), const0_rtx, VOIDmode, 0);
|
||||
return const0_rtx;
|
||||
}
|
||||
|
||||
/* All elts simple constants => refer to a constant in memory. But
|
||||
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. If we are making an initializer and all operands are
|
||||
constant, put it in memory as well. */
|
||||
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
|
||||
all operands are constant, put it in memory as well. */
|
||||
else if ((TREE_STATIC (exp)
|
||||
&& (mode == BLKmode || TREE_ADDRESSABLE (exp)))
|
||||
&& ((mode == BLKmode
|
||||
&& ! (target != 0 && safe_from_p (target, exp)))
|
||||
|| TREE_ADDRESSABLE (exp)))
|
||||
|| (modifier == EXPAND_INITIALIZER && TREE_CONSTANT (exp)))
|
||||
{
|
||||
rtx constructor = output_constant_def (exp);
|
||||
|
|
Loading…
Reference in New Issue