diff options
author | Mark Mitchell <mark@markmitchell.com> | 1998-06-25 15:14:41 +0000 |
---|---|---|
committer | Mark Mitchell <mmitchel@gcc.gnu.org> | 1998-06-25 15:14:41 +0000 |
commit | 41472af8777035219decfe1cb4742ce2b3ed8e38 (patch) | |
tree | af8828e1df0f3e051eb29c58c7d958cd177e474d /gcc/rtl.h | |
parent | 9c606f693ddca43b89097388cfdeeffaead030df (diff) | |
download | gcc-41472af8777035219decfe1cb4742ce2b3ed8e38.zip gcc-41472af8777035219decfe1cb4742ce2b3ed8e38.tar.gz gcc-41472af8777035219decfe1cb4742ce2b3ed8e38.tar.bz2 |
invoke.texi (-fstrict-aliasing): Document.
* invoke.texi (-fstrict-aliasing): Document.
* rtl.texi (MEM_ALIAS_SET): Document.
* flags.h (flag_strict_aliasing): Declare.
* toplev.c (flag_strict_aliasing): Define.
(f_options): Add -strict-aliasing.
(main): Set flag_strict_aliasing if -O2 or higher.
* tree.h (tree_type): Add alias_set field.
(TYPE_ALIAS_SET): New macro.
(TYPE_ALIAS_SET_KNOWN_P): Likewise.
(get_alias_set): Declare.
* tree.c (lang_get_alias_set): Define.
(make_node): Initialize TYPE_ALIAS_SET.
(get_alias_set): New function.
* print-tree.c (print_node): Dump the alias set for a type.
* c-tree.h (c_get_alias_set): Declare.
* c-common.c (c_get_alias_set): New function.
* c-decl.c (init_decl_processing): Set lang_get_alias_set.
* expr.c (protect_from_queue): Propogage alias sets.
(expand_assignment): Calculate alias set for new MEMs.
(expand_expr): Likewise.
* function.c (put_var_into_stack): Likewise.
(put_reg_into_stack): Likewise.
(gen_mem_addressof): Likewise.
(assign_parms): Likewise.
* stmt.c (expand_decl): Likewise.
* varasm.c (make_decl_rtl): Eliminate redundant clearing of
DECL_RTL. Calculate alias set for new MEMs.
* rtl.def (REG): Add dummy operand.
(MEM): Add extra operand to store the MEM_ALIAS_SET.
* rtl.h (MEM_ALIAS_SET): New macro.
(gen_rtx_MEM): Declare.
* emit-rtl.c (gen_rtx_MEM): New function.
* gengenrtl.c (sepcial_rtx): Make MEMs special.
* alias.c (CHECK_ALIAS_SETS_FOR_CONSISTENCY): New macro.
(DIFFERENT_ALIAS_SETS_P): Likewise.
(canon_rtx): Propogate the alias set to the new MEM.
(true_dependence): Check the alias sets.
(anti_dependence): Likewise.
(output_dependence): Likewise.
* explow.c (stabilize): Progoate alias sets.
* integrate.c (copy_rtx_and_substitute): Likewise.
* final.c (alter_subreg): Make sure not to leave MEM_IN_STRUCT_P
in an unpredictable state. Propogate alias sets.
* reload1.c (reload): Clear MEM_ALIAS_SET for new MEMs about which
we have no alias information.
From-SVN: r20719
Diffstat (limited to 'gcc/rtl.h')
-rw-r--r-- | gcc/rtl.h | 17 |
1 files changed, 15 insertions, 2 deletions
@@ -561,6 +561,17 @@ extern char *note_insn_name[]; /* For a MEM rtx, 1 if it refers to a field of an aggregate. */ #define MEM_IN_STRUCT_P(RTX) ((RTX)->in_struct) +/* 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 + language-dependent manner in the front-end, and should not be + altered in the back-end. These set numbers are tested for zero, + and compared for equality; they have no other significance. In + some front-ends, these numbers may correspond in some way to types, + or other language-level entities, but they need not, and the + back-end makes no such assumptions. */ +#define MEM_ALIAS_SET(RTX) (XINT (RTX, 1)) + /* For a LABEL_REF, 1 means that this reference is to a label outside the loop containing the reference. */ #define LABEL_OUTSIDE_LOOP_P(RTX) ((RTX)->in_struct) @@ -1057,11 +1068,13 @@ extern rtx static_chain_incoming_rtx; #include "genrtl.h" #endif -/* There are two RTL codes that require special attention; the generation - functions included above do the raw handling. */ +/* There are some RTL codes that require special attention; the + generation functions included above do the raw handling. If you + add to this list, modify special_rtx in gengenrtl.c as well. */ extern rtx gen_rtx_CONST_INT PROTO((enum machine_mode, HOST_WIDE_INT)); extern rtx gen_rtx_REG PROTO((enum machine_mode, int)); +extern rtx gen_rtx_MEM PROTO((enum machine_mode, rtx)); /* We need the cast here to ensure that we get the same result both with and without prototypes. */ |