diff options
author | mmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4> | 1998-06-25 15:14:41 +0000 |
---|---|---|
committer | mmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4> | 1998-06-25 15:14:41 +0000 |
commit | b5ba9f3a669e68503666852be6e3158f03526733 (patch) | |
tree | af8828e1df0f3e051eb29c58c7d958cd177e474d /gcc/rtl.def | |
parent | a85413a6ac28d432734c514cd140ee039daad06b (diff) | |
download | gcc-b5ba9f3a669e68503666852be6e3158f03526733.tar.gz |
* 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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@20719 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/rtl.def')
-rw-r--r-- | gcc/rtl.def | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/gcc/rtl.def b/gcc/rtl.def index e219e87c042..a00d3f1d7c5 100644 --- a/gcc/rtl.def +++ b/gcc/rtl.def @@ -537,10 +537,16 @@ DEF_RTL_EXPR(CONST, "const", "e", 'o') by a SET whose first operand is (PC). */ DEF_RTL_EXPR(PC, "pc", "", 'o') -/* A register. The "operand" is the register number, accessed - with the REGNO macro. If this number is less than FIRST_PSEUDO_REGISTER - than a hardware register is being referred to. */ -DEF_RTL_EXPR(REG, "reg", "i", 'o') +/* A register. The "operand" is the register number, accessed with + the REGNO macro. If this number is less than FIRST_PSEUDO_REGISTER + than a hardware register is being referred to. The second operand + doesn't really exist. Unfortunately, however, the compiler + implicitly assumes that a REG can be transformed in place into a + MEM, and therefore that a REG is at least as big as a MEM. To + avoid this memory overhead, which is likely to be substantial, + search for uses of PUT_CODE that turn REGs into MEMs, and fix them + somehow. Then, the trailing `0' can be removed here. */ +DEF_RTL_EXPR(REG, "reg", "i0", 'o') /* A scratch register. This represents a register used only within a single insn. It will be turned into a REG during register allocation @@ -578,9 +584,11 @@ DEF_RTL_EXPR(STRICT_LOW_PART, "strict_low_part", "e", 'x') in DECL_RTLs and during RTL generation, but not in the insn chain. */ DEF_RTL_EXPR(CONCAT, "concat", "ee", 'o') -/* A memory location; operand is the address. - Can be nested inside a VOLATILE. */ -DEF_RTL_EXPR(MEM, "mem", "e", 'o') +/* A memory location; operand is the address. Can be nested inside a + VOLATILE. The second operand is the alias set to which this MEM + belongs. We use `0' instead of `i' for this field so that the + field need not be specified in machine descriptions. */ +DEF_RTL_EXPR(MEM, "mem", "e0", 'o') /* Reference to an assembler label in the code for this function. The operand is a CODE_LABEL found in the insn chain. |