mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-12 01:07:35 +08:00
emit-rtl.c (set_mem_attributes): Set RTX_UNCHANGINGP_P if T is a constant expression.
* emit-rtl.c (set_mem_attributes): Set RTX_UNCHANGINGP_P if T is a constant expression. (set_mem_decl): New function. * expr.h (set_mem_decl): New declaration. * final.c (get_decl_from_op): Don't use ORIGINAL_REGNO if not pseudo. (output_asm_operand_names): Add tab. * reload1.c (alter_reg): Set decl of MEM from REG_DECL. From-SVN: r46733
This commit is contained in:
parent
343fb41208
commit
1285011e67
@ -1691,8 +1691,9 @@ set_mem_attributes (ref, t, objectp)
|
||||
MEM_VOLATILE_P (ref) = TYPE_VOLATILE (type);
|
||||
MEM_IN_STRUCT_P (ref) = AGGREGATE_TYPE_P (type);
|
||||
RTX_UNCHANGING_P (ref)
|
||||
|= (lang_hooks.honor_readonly
|
||||
&& (TYPE_READONLY (type) || TREE_READONLY (t)));
|
||||
|= ((lang_hooks.honor_readonly
|
||||
&& (TYPE_READONLY (type) || TREE_READONLY (t)))
|
||||
|| (! TYPE_P (t) && TREE_CONSTANT (t)));
|
||||
|
||||
/* If we are making an object of this type, or if this is a DECL, we know
|
||||
that it is a scalar if the type is not an aggregate. */
|
||||
@ -1783,6 +1784,18 @@ set_mem_align (mem, align)
|
||||
MEM_OFFSET (mem), MEM_SIZE (mem), align,
|
||||
GET_MODE (mem));
|
||||
}
|
||||
|
||||
/* Set the decl for MEM to DECL. */
|
||||
|
||||
void
|
||||
set_mem_decl (mem, decl)
|
||||
rtx mem;
|
||||
tree decl;
|
||||
{
|
||||
MEM_ATTRS (mem)
|
||||
= get_mem_attrs (MEM_ALIAS_SET (mem), decl, MEM_OFFSET (mem),
|
||||
MEM_SIZE (mem), MEM_ALIGN (mem), GET_MODE (mem));
|
||||
}
|
||||
|
||||
/* Return a memory reference like MEMREF, but with its mode changed to MODE
|
||||
and its address changed to ADDR. (VOIDmode means don't change the mode.
|
||||
|
@ -615,6 +615,9 @@ extern void set_mem_alias_set PARAMS ((rtx, HOST_WIDE_INT));
|
||||
/* Set the alignment of MEM to ALIGN bits. */
|
||||
extern void set_mem_align PARAMS ((rtx, unsigned int));
|
||||
|
||||
/* Set the DECL for MEM to DECL. */
|
||||
extern void set_mem_decl PARAMS ((rtx, tree));
|
||||
|
||||
/* Return a memory reference like MEMREF, but with its mode changed
|
||||
to MODE and its address changed to ADDR.
|
||||
(VOIDmode means don't change the mode.
|
||||
|
@ -3304,7 +3304,7 @@ get_decl_from_op (op, paddressp)
|
||||
|
||||
*paddressp = 0;
|
||||
|
||||
if (GET_CODE (op) == REG)
|
||||
if (GET_CODE (op) == REG && ORIGINAL_REGNO (op) >= FIRST_PSEUDO_REGISTER)
|
||||
return REGNO_DECL (ORIGINAL_REGNO (op));
|
||||
else if (GET_CODE (op) != MEM)
|
||||
return 0;
|
||||
@ -3353,9 +3353,9 @@ output_asm_operand_names (operands, oporder, nops)
|
||||
|
||||
if (decl && DECL_NAME (decl))
|
||||
{
|
||||
fprintf (asm_out_file, "%s %s%s",
|
||||
wrote ? "," : ASM_COMMENT_START, addressp ? "*" : "",
|
||||
IDENTIFIER_POINTER (DECL_NAME (decl)));
|
||||
fprintf (asm_out_file, "%c%s %s%s",
|
||||
wrote ? ',' : '\t', wrote ? "" : ASM_COMMENT_START,
|
||||
addressp ? "*" : "", IDENTIFIER_POINTER (DECL_NAME (decl)));
|
||||
wrote = 1;
|
||||
}
|
||||
}
|
||||
|
@ -2043,8 +2043,17 @@ alter_reg (i, from_reg)
|
||||
|
||||
/* If we have any adjustment to make, or if the stack slot is the
|
||||
wrong mode, make a new stack slot. */
|
||||
if (adjust != 0 || GET_MODE (x) != GET_MODE (regno_reg_rtx[i]))
|
||||
x = adjust_address_nv (x, GET_MODE (regno_reg_rtx[i]), adjust);
|
||||
x = adjust_address_nv (x, GET_MODE (regno_reg_rtx[i]), adjust);
|
||||
|
||||
/* If we have a decl for the original register, set it for the
|
||||
memory. If this is a shared MEM, make a copy. */
|
||||
if (REGNO_DECL (i))
|
||||
{
|
||||
if (from_reg != -1 && spill_stack_slot[from_reg] == x)
|
||||
x = copy_rtx (x);
|
||||
|
||||
set_mem_decl (x, REGNO_DECL (i));
|
||||
}
|
||||
|
||||
/* Save the stack slot for later. */
|
||||
reg_equiv_memory_loc[i] = x;
|
||||
|
Loading…
Reference in New Issue
Block a user