mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-08 11:17:22 +08:00
expr.c (expand_expr <COMPLEX_CST, [...]): Always call output_constant_def, use its result instead of TREE_CST_RTL (exp).
* expr.c (expand_expr <COMPLEX_CST, STRING_CST>): Always call output_constant_def, use its result instead of TREE_CST_RTL (exp). Can assume it has the form (mem (symbol_ref ".LCxxx")). (expand_expr <COMPONENT_REF>): Can always just extract the relevant field of a CONSTRUCTOR. (expand_expr <ARRAY_REF, COMPONENT_REF, BIT_FIELD_REF, ARRAY_RANGE_REF>): Make control flow explicit. * varasm.c (output_constant_def): Can look at TREE_CST_RTL of an INTEGER_CST. From-SVN: r66148
This commit is contained in:
parent
73c4dcc675
commit
afc6aaab24
@ -1,3 +1,15 @@
|
||||
2003-04-27 Zack Weinberg <zack@codesourcery.com>
|
||||
|
||||
* expr.c (expand_expr <COMPLEX_CST, STRING_CST>): Always call
|
||||
output_constant_def, use its result instead of TREE_CST_RTL (exp).
|
||||
Can assume it has the form (mem (symbol_ref ".LCxxx")).
|
||||
(expand_expr <COMPONENT_REF>): Can always just extract the
|
||||
relevant field of a CONSTRUCTOR.
|
||||
(expand_expr <ARRAY_REF, COMPONENT_REF, BIT_FIELD_REF,
|
||||
ARRAY_RANGE_REF>): Make control flow explicit.
|
||||
* varasm.c (output_constant_def): Can look at TREE_CST_RTL of
|
||||
an INTEGER_CST.
|
||||
|
||||
2003-04-27 Kazu Hirata <kazu@cs.umass.edu>
|
||||
|
||||
* reload1.c (reg_set_luid): Fix a comment typo.
|
||||
|
35
gcc/expr.c
35
gcc/expr.c
@ -6872,22 +6872,19 @@ expand_expr (exp, target, tmode, modifier)
|
||||
|
||||
case COMPLEX_CST:
|
||||
case STRING_CST:
|
||||
if (! TREE_CST_RTL (exp))
|
||||
output_constant_def (exp, 1);
|
||||
temp = output_constant_def (exp, 1);
|
||||
|
||||
/* TREE_CST_RTL probably contains a constant address.
|
||||
/* temp contains a constant address.
|
||||
On RISC machines where a constant address isn't valid,
|
||||
make some insns to get that address into a register. */
|
||||
if (GET_CODE (TREE_CST_RTL (exp)) == MEM
|
||||
&& modifier != EXPAND_CONST_ADDRESS
|
||||
if (modifier != EXPAND_CONST_ADDRESS
|
||||
&& modifier != EXPAND_INITIALIZER
|
||||
&& modifier != EXPAND_SUM
|
||||
&& (! memory_address_p (mode, XEXP (TREE_CST_RTL (exp), 0))
|
||||
|| (flag_force_addr
|
||||
&& GET_CODE (XEXP (TREE_CST_RTL (exp), 0)) != REG)))
|
||||
return replace_equiv_address (TREE_CST_RTL (exp),
|
||||
copy_rtx (XEXP (TREE_CST_RTL (exp), 0)));
|
||||
return TREE_CST_RTL (exp);
|
||||
&& (! memory_address_p (mode, XEXP (temp, 0))
|
||||
|| flag_force_addr))
|
||||
return replace_equiv_address (temp,
|
||||
copy_rtx (XEXP (temp, 0)));
|
||||
return temp;
|
||||
|
||||
case EXPR_WITH_FILE_LOCATION:
|
||||
{
|
||||
@ -7300,18 +7297,12 @@ expand_expr (exp, target, tmode, modifier)
|
||||
}
|
||||
}
|
||||
}
|
||||
/* Fall through. */
|
||||
goto normal_inner_ref;
|
||||
|
||||
case COMPONENT_REF:
|
||||
case BIT_FIELD_REF:
|
||||
case ARRAY_RANGE_REF:
|
||||
/* If the operand is a CONSTRUCTOR, we can just extract the
|
||||
appropriate field if it is present. Don't do this if we have
|
||||
already written the data since we want to refer to that copy
|
||||
and varasm.c assumes that's what we'll do. */
|
||||
if (code == COMPONENT_REF
|
||||
&& TREE_CODE (TREE_OPERAND (exp, 0)) == CONSTRUCTOR
|
||||
&& TREE_CST_RTL (TREE_OPERAND (exp, 0)) == 0)
|
||||
appropriate field if it is present. */
|
||||
if (TREE_CODE (TREE_OPERAND (exp, 0)) == CONSTRUCTOR)
|
||||
{
|
||||
tree elt;
|
||||
|
||||
@ -7363,7 +7354,11 @@ expand_expr (exp, target, tmode, modifier)
|
||||
return op0;
|
||||
}
|
||||
}
|
||||
goto normal_inner_ref;
|
||||
|
||||
case BIT_FIELD_REF:
|
||||
case ARRAY_RANGE_REF:
|
||||
normal_inner_ref:
|
||||
{
|
||||
enum machine_mode mode1;
|
||||
HOST_WIDE_INT bitsize, bitpos;
|
||||
|
@ -2567,7 +2567,7 @@ output_constant_def (exp, defer)
|
||||
|
||||
/* We can't just use the saved RTL if this is a deferred string constant
|
||||
and we are not to defer anymore. */
|
||||
if (TREE_CODE (exp) != INTEGER_CST && TREE_CST_RTL (exp)
|
||||
if (TREE_CST_RTL (exp)
|
||||
&& (defer || !STRING_POOL_ADDRESS_P (XEXP (TREE_CST_RTL (exp), 0))))
|
||||
return TREE_CST_RTL (exp);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user