summaryrefslogtreecommitdiff
path: root/gcc/reg-notes.def
diff options
context:
space:
mode:
authorzack <zack@138bc75d-0d04-0410-961f-82ee72b054a4>2004-08-18 22:31:03 +0000
committerzack <zack@138bc75d-0d04-0410-961f-82ee72b054a4>2004-08-18 22:31:03 +0000
commit30f4db0d0ca544491708a54ec8bb771fd697c48c (patch)
tree990ecf95198d77226788bade820093b68e1f298a /gcc/reg-notes.def
parentc1877da885bfa74a7bfd47b119fe884a3d46014f (diff)
downloadgcc-30f4db0d0ca544491708a54ec8bb771fd697c48c.tar.gz
* insn-notes.def, reg-notes.def: New files.
* rtl.h: Use them to define enum insn_note and enum reg_note. * rtl.c: Use them to define note_insn_name and reg_note_name. * modulo-sched.c, sched-rgn.c, final.c: NOTE_DISABLE_SCHED_OF_BLOCK renamed to NOTE_INSN_DISABLE_SCHED_OF_BLOCK. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@86212 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/reg-notes.def')
-rw-r--r--gcc/reg-notes.def168
1 files changed, 168 insertions, 0 deletions
diff --git a/gcc/reg-notes.def b/gcc/reg-notes.def
new file mode 100644
index 00000000000..cb0343facd9
--- /dev/null
+++ b/gcc/reg-notes.def
@@ -0,0 +1,168 @@
+/* Register note definitions.
+ Copyright (C) 2004 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 2, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING. If not, write to the Free
+Software Foundation, 59 Temple Place - Suite 330, Boston, MA
+02111-1307, USA. */
+
+/* This file defines all the codes that may appear on individual
+ EXPR_LIST rtxes in the REG_NOTES chain of an insn. The codes are
+ stored in the mode field of the EXPR_LIST. Source files define
+ DEF_INSN_NOTE appropriately before including this file. */
+
+/* Shorthand. */
+#define REG_NOTE(NAME) DEF_REG_NOTE (REG_##NAME)
+
+/* The value in REG dies in this insn (i.e., it is not needed past
+ this insn). If REG is set in this insn, the REG_DEAD note may,
+ but need not, be omitted. */
+REG_NOTE (DEAD)
+
+/* The REG is autoincremented or autodecremented in this insn. */
+REG_NOTE (INC)
+
+/* Describes the insn as a whole; it says that the insn sets a
+ register to a constant value or to be equivalent to a memory
+ address. If the register is spilled to the stack then the constant
+ value should be substituted for it. The contents of the REG_EQUIV
+ is the constant value or memory address, which may be different
+ from the source of the SET although it has the same value. A
+ REG_EQUIV note may also appear on an insn which copies a register
+ parameter to a pseudo-register, if there is a memory address which
+ could be used to hold that pseudo-register throughout the function. */
+REG_NOTE (EQUIV)
+
+/* Like REG_EQUIV except that the destination is only momentarily
+ equal to the specified rtx. Therefore, it cannot be used for
+ substitution; but it can be used for cse. */
+REG_NOTE (EQUAL)
+
+/* This insn copies the return-value of a library call out of the hard
+ reg for return values. This note is actually an INSN_LIST and it
+ points to the first insn involved in setting up arguments for the
+ call. flow.c uses this to delete the entire library call when its
+ result is dead. */
+REG_NOTE (RETVAL)
+
+/* The inverse of REG_RETVAL: it goes on the first insn of the library
+ call and points at the one that has the REG_RETVAL. This note is
+ also an INSN_LIST. */
+REG_NOTE (LIBCALL)
+
+/* The register is always nonnegative during the containing loop.
+ This is used in branches so that decrement and branch instructions
+ terminating on zero can be matched. There must be an insn pattern
+ in the md file named `decrement_and_branch_until_zero' or else this
+ will never be added to any instructions. */
+REG_NOTE (NONNEG)
+
+/* There is no conflict *after this insn* between the register in the
+ note and the destination of this insn. */
+REG_NOTE (NO_CONFLICT)
+
+/* Identifies a register set in this insn and never used. */
+REG_NOTE (UNUSED)
+
+/* REG_CC_SETTER and REG_CC_USER link a pair of insns that set and use
+ CC0, respectively. Normally, these are required to be consecutive
+ insns, but we permit putting a cc0-setting insn in the delay slot
+ of a branch as long as only one copy of the insn exists. In that
+ case, these notes point from one to the other to allow code
+ generation to determine what any require information and to
+ properly update CC_STATUS. These notes are INSN_LISTs. */
+REG_NOTE (CC_SETTER)
+REG_NOTE (CC_USER)
+
+/* Points to a CODE_LABEL. Used by non-JUMP_INSNs to say that the
+ CODE_LABEL contained in the REG_LABEL note is used by the insn.
+ This note is an INSN_LIST. */
+REG_NOTE (LABEL)
+
+/* REG_DEP_ANTI and REG_DEP_OUTPUT are used in LOG_LINKS to represent
+ write-after-read and write-after-write dependencies respectively.
+ Data dependencies, which are the only type of LOG_LINK created by
+ flow, are represented by a 0 reg note kind. */
+REG_NOTE (DEP_ANTI)
+REG_NOTE (DEP_OUTPUT)
+
+/* REG_BR_PROB is attached to JUMP_INSNs and CALL_INSNs. It has an
+ integer value. For jumps, it is the probability that this is a
+ taken branch. For calls, it is the probability that this call
+ won't return. */
+REG_NOTE (BR_PROB)
+
+/* REG_VALUE_PROFILE is attached when the profile is read in to an
+ insn before that the code to profile the value is inserted. It
+ contains the results of profiling. */
+REG_NOTE (VALUE_PROFILE)
+
+/* Attached to a call insn; indicates that the call is malloc-like and
+ that the pointer returned cannot alias anything else. */
+REG_NOTE (NOALIAS)
+
+/* Used to optimize rtl generated by dynamic stack allocations for
+ targets where SETJMP_VIA_SAVE_AREA is true. */
+REG_NOTE (SAVE_AREA)
+
+/* REG_BR_PRED is attached to JUMP_INSNs and CALL_INSNSs. It contains
+ CONCAT of two integer value. First specifies the branch predictor
+ that added the note, second specifies the predicted hitrate of
+ branch in the same format as REG_BR_PROB note uses. */
+REG_NOTE (BR_PRED)
+
+/* Attached to insns that are RTX_FRAME_RELATED_P, but are too complex
+ for DWARF to interpret what they imply. The attached rtx is used
+ instead of intuition. */
+REG_NOTE (FRAME_RELATED_EXPR)
+
+/* Indicates that REG holds the exception context for the function.
+ This context is shared by inline functions, so the code to acquire
+ the real exception context is delayed until after inlining. */
+REG_NOTE (EH_CONTEXT)
+
+/* Indicates what exception region an INSN belongs in. This is used
+ to indicate what region to which a call may throw. REGION 0
+ indicates that a call cannot throw at all. REGION -1 indicates
+ that it cannot throw, nor will it execute a non-local goto. */
+REG_NOTE (EH_REGION)
+
+/* Used by haifa-sched to save NOTE_INSN notes across scheduling. */
+REG_NOTE (SAVE_NOTE)
+
+/* Indicates that this insn (which is part of the prologue) computes a
+ value which might not be used later, and if so it's OK to delete
+ the insn. Normally, deleting any insn in the prologue is an error.
+ At present the parameter is unused and set to (const_int 0). */
+REG_NOTE (MAYBE_DEAD)
+
+/* Indicates that a call does not return. */
+REG_NOTE (NORETURN)
+
+/* Indicates that an indirect jump is a non-local goto instead of a
+ computed goto. */
+REG_NOTE (NON_LOCAL_GOTO)
+
+/* Indicates that a jump crosses between hot and cold sections in a
+ (partitioned) assembly or .o file, and therefore should not be
+ reduced to a simpler jump by optimizations. */
+REG_NOTE (CROSSING_JUMP)
+
+/* This kind of note is generated at each to `setjmp', and similar
+ functions that can return twice. */
+REG_NOTE (SETJMP)
+
+/* Indicate calls that always returns. */
+REG_NOTE (ALWAYS_RETURN)