diff options
author | Mark Mitchell <mark@markmitchell.com> | 1999-01-19 10:32:33 +0000 |
---|---|---|
committer | Mark Mitchell <mmitchel@gcc.gnu.org> | 1999-01-19 10:32:33 +0000 |
commit | c6df88cbec5637cfc297cea1b6c90fa638949cdc (patch) | |
tree | 328681183508c4b77ec5e404cc6511cbcea7a38f /gcc/rtl.h | |
parent | d8fccff5e042cba03f1256ba0274528894a277be (diff) | |
download | gcc-c6df88cbec5637cfc297cea1b6c90fa638949cdc.zip gcc-c6df88cbec5637cfc297cea1b6c90fa638949cdc.tar.gz gcc-c6df88cbec5637cfc297cea1b6c90fa638949cdc.tar.bz2 |
rtl.h (rtx_def): Update documentation.
* rtl.h (rtx_def): Update documentation.
(MEM_IN_STRUCT_P): Likewise.
(MEM_SCALAR_P): New macro.
(MEM_COPY_ATTRIBUTES): Likewise.
(MEM_SET_IN_STRUCT_P): Likewise.
* rtl.texi (MEM_SCALAR_P): Document.
* alias.c (canon_rtx): Use MEM_COPY_ATTRIBUTES.
(fixed_scalar_and_varying_struct_p): New function. Use
MEM_SCALAR_P rather than !MEM_IN_STRUCT_P.
(aliases_everything_p): Likewise.
(true_dependence): Use them.
(write_dependence_p): New function, containing code common to
anti_dependence and output_dependence.
(anti_dependence): Use it.
(output_dependence): Likewise.
* calls.c (save_fixed_argument_area): Don't clear
MEM_IN_STRUCT_P.
(expand_call): Use MEM_SET_IN_STRUCT_P.
(emit_library_call): Don't clear MEM_IN_STRUCT_P.
(emit_library_call_value): Likewise.
(store_one_arg): Use MEM_SET_IN_STRUCT_P.
* combine.c (simplify_rtx): Use MEM_COPY_ATTRIBUTES.
(make_extraction): Likewise.
(simplify_shift_const): Likewise.
(gen_lowpart_for_combine): Likewise.
* cse.c (gen_lowpart_if_possible): Use MEM_COPY_ATTRIBUTES.
* emit-rtl.c (operand_subword): Likewise.
(change_address): Likewise.
* explow.c (stabilize): Use MEM_COPY_ATTRIBUTES.
* expr.c (protect_from_queue): Use MEM_COPY_ATTRIBUTES.
(emit_group_store): Use MEM_SET_IN_STRUCT_P.
(copy_blkmode_from_reg): Likewise.
(store_field): Likewise.
(expand_expr): Remove bogus guesswork setting MEM_IN_STRUCT_P
heuristically. Use MEM_SET_IN_STRUCT_P.
(get_memory_rtx): Likewise.
* final.c (alter_subreg): Use MEM_COPY_ATTRIBUTES.
* function.c (assign_stack_temp): Clear MEM_SCALAR_P and
MEM_ALIAS_SET on newly returned MEMs.
(assign_temp): Use MEM_SET_IN_STRUCT_P.
(put_reg_into_stack): Likewise.
(fixup_var_refs1): Use MEM_COPY_ATTRIBUTES.
(gen_mem_addressof): Use MEM_SET_IN_STRUCT_P.
(assign_parms): Likewise.
(expand_function): Likewise.
* integrate.c (expand_inline_function): Likewise.
(copy_rtx_and_substitute): Use MEM_COPY_ATTRIBUTES.
* loop.c (note_addr_stored): Remove check on MEM_IN_STRUCT_P.
* optabs.c (gen_move_insn): Use MEM_COPY_ATTRIBUTES.
* print-rtl.c (print_rtx): Print /f for frame_related.
* recog.c (validate_replace_rtx_1): Use MEM_COPY_ATTRIBUTES.
* reload1.c (reload): Copy MEM_SCALAR_P as well.
* stmt.c (expand_decl): Use MEM_SET_IN_STRUCT_P.
(expand_anon_union_decl): Use MEM_COPY_ATTRIBUTES.
* varasm.c (make_decl_rtl): Use MEM_SET_IN_STRUCT_P.
(output_constant_def): Likewise.
* a29k.c (a29k_set_memflags_1): Take scalar_p.
Set MEM_SCALAR_P.
(a29k_set_memflags): Use it.
* alpha.c (get_aligned_mem): Use MEM_COPY_ATTRIBUTES.
* c4x.c (c4x_scan_for_ld): Likewise.
* h8300.c (fix_bit_operand): Likewise.
* m88k.c (legitimize_address): Likewise.
(block_move_loop): Likewise.
(block_move_no_loop): Likewise.
(block_move_sequence): Likewise.
(m88k_builtin_saveregs): Use MEM_SET_IN_STRUCT_P.
* mips/abi64.h (SETUP_INCOMING_VARARGS): Likewise.
* rs6000.c (expand_block_move_insn): Use MEM_COPY_ATTRIBUTES.
* sh.c (sh_builtin_saveregs): Use MEM_SET_IN_STRUCT_P.
* arm.h (arm_gen_load_multiple): Take scalar_p.
(arm_store_load_multiple): Likewise.
* arm.c (arm_gen_load_multiple): Likewise.
(arm_gen_store_multiple): Likewise.
(arm_gen_movstrqi): Treat MEM_SCALAR_P like MEM_IN_STRUCT_P.
From-SVN: r24759
Diffstat (limited to 'gcc/rtl.h')
-rw-r--r-- | gcc/rtl.h | 30 |
1 files changed, 26 insertions, 4 deletions
@@ -163,9 +163,11 @@ typedef struct rtx_def In a REG, nonzero means this reg refers to the return value of the current function. */ unsigned integrated : 1; - /* Nonzero if this rtx is related to the call frame, either changing how - we compute the frame address or saving and restoring registers in - the prologue and epilogue. */ + /* 1 in an INSN if this rtx is related to the call frame, + either changing how we compute the frame address or saving and + restoring registers in the prologue and epilogue. + 1 in a MEM if the MEM refers to a scalar, rather than a member of + an aggregate. */ unsigned frame_related : 1; /* The first element of the operands of this rtx. The number of operands and their types are controlled @@ -568,9 +570,29 @@ extern char *note_insn_name[]; Also in an ASM_OPERANDS rtx. */ #define MEM_VOLATILE_P(RTX) ((RTX)->volatil) -/* For a MEM rtx, 1 if it refers to a field of an aggregate. */ +/* For a MEM rtx, 1 if it refers to a field of an aggregate. If zero, + RTX may or may not refer to a field of an aggregate. */ #define MEM_IN_STRUCT_P(RTX) ((RTX)->in_struct) +/* For a MEM rtx, 1 if it refers to a scalar. If zero, RTX may or may + not refer to a scalar.*/ +#define MEM_SCALAR_P(RTX) ((RTX)->frame_related) + +/* Copy the MEM_VOLATILE_P, MEM_IN_STRUCT_P, and MEM_SCALAR_P + attributes from RHS to LHS. */ +#define MEM_COPY_ATTRIBUTES(LHS, RHS) \ + (MEM_VOLATILE_P (LHS) = MEM_VOLATILE_P (RHS), \ + MEM_IN_STRUCT_P (LHS) = MEM_IN_STRUCT_P (RHS), \ + MEM_SCALAR_P (LHS) = MEM_SCALAR_P (RHS)) \ + +/* If VAL is non-zero, set MEM_IN_STRUCT_P and clear MEM_SCALAR_P in + RTX. Otherwise, vice versa. Use this macro only when you are + *sure* that you know that the MEM is in a structure, or is a + scalar. VAL is evaluated only once. */ +#define MEM_SET_IN_STRUCT_P(RTX, VAL) \ + ((VAL) ? (MEM_IN_STRUCT_P (RTX) = 1, MEM_SCALAR_P (RTX) = 0) \ + : (MEM_IN_STRUCT_P (RTX) = 0, MEM_SCALAR_P (RTX) = 1)) + /* For a MEM rtx, the alias set. If 0, this MEM is not in any alias set, and may alias anything. Otherwise, the MEM can only alias MEMs in the same alias set. This value is set in a |