/* Register note definitions.
   Copyright (C) 2004, 2005 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, 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, 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_REG_NOTE appropriately before including this file.  */

/* Shorthand.  */
#define REG_NOTE(NAME) DEF_REG_NOTE (REG_##NAME)

/* REG_DEP_TRUE is used in LOG_LINKS to represent a read-after-write
   dependency (i.e. a true data dependency).  This is here, not
   grouped with REG_DEP_ANTI and REG_DEP_OUTPUT, because some passes
   use a literal 0 for it.  */
REG_NOTE (DEP_TRUE)

/* 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.  */
REG_NOTE (DEP_OUTPUT)
REG_NOTE (DEP_ANTI)

/* 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)

/* 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)

/* APPLE LOCAL begin ObjC direct dispatch */
/* Indicate calls to a hard-coded address in memory.  */
REG_NOTE (ABSCALL)
/* APPLE LOCAL end ObjC direct dispatch */
