diff options
author | Richard Kenner <kenner@vlsi1.ultra.nyu.edu> | 2003-05-22 20:31:46 +0000 |
---|---|---|
committer | Richard Kenner <kenner@gcc.gnu.org> | 2003-05-22 16:31:46 -0400 |
commit | f59700f9057fd29d8fdcee25efad69e8d9a54dce (patch) | |
tree | ae7435c5be3edd410a24ef8dc791b36d82fccc66 /gcc/expr.c | |
parent | 94e01adf1ca0942e6066e648397f47aca0c58509 (diff) | |
download | gcc-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.c | 15 |
1 files changed, 7 insertions, 8 deletions
@@ -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); |