/* Insn 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 in the
   NOTE_LINE_NUMBER field of a NOTE insn for kinds of notes that are
   not line numbers.  Source files define DEF_INSN_NOTE appropriately
   before including this file.

   We are slowly removing the concept of insn-chain notes from the
   compiler.  Adding new codes to this file is STRONGLY DISCOURAGED.
   If you think you need one, look for other ways to express what you
   mean, such as register notes or bits in the basic-block structure.  */

/* Shorthand.  */
#define INSN_NOTE(NAME) DEF_INSN_NOTE (NOTE_INSN_##NAME)

/* This note is used to get rid of an insn when it isn't safe to patch
   the insn out of the chain.  */
INSN_NOTE (DELETED)

/* Generated in place of user-declared labels when they are deleted.  */
INSN_NOTE (DELETED_LABEL)

/* These are used to mark the beginning and end of a lexical block.
   See NOTE_BLOCK and reorder_blocks.  */
INSN_NOTE (BLOCK_BEG)
INSN_NOTE (BLOCK_END)

/* These mark the extremes of a loop.  */
INSN_NOTE (LOOP_BEG)
INSN_NOTE (LOOP_END)

/* This note indicates the start of the real body of the function,
   i.e. the point just after all of the parms have been moved into
   their homes, etc.  */
INSN_NOTE (FUNCTION_BEG)

/* This kind of note is generated at the end of the function body,
   just before the return insn or return label.  In an optimizing
   compilation it is deleted by the first jump optimization, after
   enabling that optimizer to determine whether control can fall
   off the end of the function body without a return statement.  */
INSN_NOTE (FUNCTION_END)

/* This marks the point immediately after the last prologue insn.  */
INSN_NOTE (PROLOGUE_END)

/* This marks the point immediately prior to the first epilogue insn.  */
INSN_NOTE (EPILOGUE_BEG)

/* These note where exception handling regions begin and end.
   Uses NOTE_EH_HANDLER to identify the region in question.  */
INSN_NOTE (EH_REGION_BEG)
INSN_NOTE (EH_REGION_END)

/* Generated whenever a duplicate line number note is output.
   For example, one is output after the end of an inline function,
   in order to prevent the line containing the inline call from
   being counted twice in gcov.  */
INSN_NOTE (REPEATED_LINE_NUMBER)

/* The location of a variable.  */
INSN_NOTE (VAR_LOCATION)

/* Record the expected value of a register at a location.  Uses
   NOTE_EXPECTED_VALUE; stored as (eq (reg) (const_int)).  */
INSN_NOTE (EXPECTED_VALUE)

/* Record the struct for the following basic block.  Uses
   NOTE_BASIC_BLOCK.  FIXME: Redundant with the basic block pointer
   now included in every insn.  */
INSN_NOTE (BASIC_BLOCK)

/* Mark the inflection point in the instruction stream where we switch
   between hot and cold text sections.  */
INSN_NOTE (SWITCH_TEXT_SECTIONS)

/* APPLE LOCAL begin ARM 5051776 */
/* Record that we have just executed an alloca() -- used for
   implementation of sjlj exception handling.  */
INSN_NOTE (ALLOCA)
/* APPLE LOCAL end ARM 5051776 */

#undef INSN_NOTE
