aboutsummaryrefslogtreecommitdiff
path: root/gcc/expr.c
diff options
context:
space:
mode:
authorRichard Kenner <kenner@vlsi1.ultra.nyu.edu>2003-05-22 20:31:46 +0000
committerRichard Kenner <kenner@gcc.gnu.org>2003-05-22 16:31:46 -0400
commitf59700f9057fd29d8fdcee25efad69e8d9a54dce (patch)
treeae7435c5be3edd410a24ef8dc791b36d82fccc66 /gcc/expr.c
parent94e01adf1ca0942e6066e648397f47aca0c58509 (diff)
downloadgcc-f59700f9057fd29d8fdcee25efad69e8d9a54dce.zip
gcc-f59700f9057fd29d8fdcee25efad69e8d9a54dce.tar.gz
gcc-f59700f9057fd29d8fdcee25efad69e8d9a54dce.tar.bz2
expr.c (expand_expr, [...]): Put into memory if constant and EXPAND_CONST_ADDRESS, not just EXPAND_INITIALIZER.
* expr.c (expand_expr, case CONSTRUCTOR): Put into memory if constant and EXPAND_CONST_ADDRESS, not just EXPAND_INITIALIZER. From-SVN: r67098
Diffstat (limited to 'gcc/expr.c')
-rw-r--r--gcc/expr.c15
1 files changed, 7 insertions, 8 deletions
diff --git a/gcc/expr.c b/gcc/expr.c
index 9c21ac9..770bef4 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -4982,7 +4982,7 @@ store_constructor (exp, target, cleared, size)
{
rtx offset_rtx;
- if (contains_placeholder_p (offset))
+ if (CONTAINS_PLACEHOLDER_P (offset))
offset = build (WITH_RECORD_EXPR, sizetype,
offset, make_tree (TREE_TYPE (exp), target));
@@ -5799,8 +5799,7 @@ get_inner_reference (exp, pbitsize, pbitpos, poffset, pmode,
made during type construction. */
if (this_offset == 0)
break;
- else if (! TREE_CONSTANT (this_offset)
- && contains_placeholder_p (this_offset))
+ else if (CONTAINS_PLACEHOLDER_P (this_offset))
this_offset = build (WITH_RECORD_EXPR, sizetype, this_offset, exp);
offset = size_binop (PLUS_EXPR, offset, this_offset);
@@ -5830,11 +5829,9 @@ get_inner_reference (exp, pbitsize, pbitpos, poffset, pmode,
/* If the index has a self-referential type, pass it to a
WITH_RECORD_EXPR; if the component size is, pass our
component to one. */
- if (! TREE_CONSTANT (index)
- && contains_placeholder_p (index))
+ if (CONTAINS_PLACEHOLDER_P (index))
index = build (WITH_RECORD_EXPR, TREE_TYPE (index), index, exp);
- if (! TREE_CONSTANT (unit_size)
- && contains_placeholder_p (unit_size))
+ if (CONTAINS_PLACEHOLDER_P (unit_size))
unit_size = build (WITH_RECORD_EXPR, sizetype, unit_size, array);
offset = size_binop (PLUS_EXPR, offset,
@@ -7163,7 +7160,9 @@ expand_expr (exp, target, tmode, modifier)
&& ((TREE_CODE (type) == VECTOR_TYPE
&& !is_zeros_p (exp))
|| ! mostly_zeros_p (exp)))))
- || (modifier == EXPAND_INITIALIZER && TREE_CONSTANT (exp)))
+ || ((modifier == EXPAND_INITIALIZER
+ || modifier == EXPAND_CONST_ADDRESS)
+ && TREE_CONSTANT (exp)))
{
rtx constructor = output_constant_def (exp, 1);