1169689Skan/* Insn note definitions.
2169689Skan   Copyright (C) 2004, 2005 Free Software Foundation, Inc.
3169689Skan
4169689SkanThis file is part of GCC.
5169689Skan
6169689SkanGCC is free software; you can redistribute it and/or modify it under
7169689Skanthe terms of the GNU General Public License as published by the Free
8169689SkanSoftware Foundation; either version 2, or (at your option) any later
9169689Skanversion.
10169689Skan
11169689SkanGCC is distributed in the hope that it will be useful, but WITHOUT ANY
12169689SkanWARRANTY; without even the implied warranty of MERCHANTABILITY or
13169689SkanFITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14169689Skanfor more details.
15169689Skan
16169689SkanYou should have received a copy of the GNU General Public License
17169689Skanalong with GCC; see the file COPYING.  If not, write to the Free
18169689SkanSoftware Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
19169689Skan02110-1301, USA.  */
20169689Skan
21169689Skan/* This file defines all the codes that may appear in the
22169689Skan   NOTE_LINE_NUMBER field of a NOTE insn for kinds of notes that are
23169689Skan   not line numbers.  Source files define DEF_INSN_NOTE appropriately
24169689Skan   before including this file.
25169689Skan
26169689Skan   We are slowly removing the concept of insn-chain notes from the
27169689Skan   compiler.  Adding new codes to this file is STRONGLY DISCOURAGED.
28169689Skan   If you think you need one, look for other ways to express what you
29169689Skan   mean, such as register notes or bits in the basic-block structure.  */
30169689Skan
31169689Skan/* Shorthand.  */
32169689Skan#define INSN_NOTE(NAME) DEF_INSN_NOTE (NOTE_INSN_##NAME)
33169689Skan
34169689Skan/* This note is used to get rid of an insn when it isn't safe to patch
35169689Skan   the insn out of the chain.  */
36169689SkanINSN_NOTE (DELETED)
37169689Skan
38169689Skan/* Generated in place of user-declared labels when they are deleted.  */
39169689SkanINSN_NOTE (DELETED_LABEL)
40169689Skan
41169689Skan/* These are used to mark the beginning and end of a lexical block.
42169689Skan   See NOTE_BLOCK and reorder_blocks.  */
43169689SkanINSN_NOTE (BLOCK_BEG)
44169689SkanINSN_NOTE (BLOCK_END)
45169689Skan
46169689Skan/* These mark the extremes of a loop.  */
47169689SkanINSN_NOTE (LOOP_BEG)
48169689SkanINSN_NOTE (LOOP_END)
49169689Skan
50169689Skan/* This note indicates the start of the real body of the function,
51169689Skan   i.e. the point just after all of the parms have been moved into
52169689Skan   their homes, etc.  */
53169689SkanINSN_NOTE (FUNCTION_BEG)
54169689Skan
55169689Skan/* This kind of note is generated at the end of the function body,
56169689Skan   just before the return insn or return label.  In an optimizing
57169689Skan   compilation it is deleted by the first jump optimization, after
58169689Skan   enabling that optimizer to determine whether control can fall
59169689Skan   off the end of the function body without a return statement.  */
60169689SkanINSN_NOTE (FUNCTION_END)
61169689Skan
62169689Skan/* This marks the point immediately after the last prologue insn.  */
63169689SkanINSN_NOTE (PROLOGUE_END)
64169689Skan
65169689Skan/* This marks the point immediately prior to the first epilogue insn.  */
66169689SkanINSN_NOTE (EPILOGUE_BEG)
67169689Skan
68169689Skan/* These note where exception handling regions begin and end.
69169689Skan   Uses NOTE_EH_HANDLER to identify the region in question.  */
70169689SkanINSN_NOTE (EH_REGION_BEG)
71169689SkanINSN_NOTE (EH_REGION_END)
72169689Skan
73169689Skan/* Generated whenever a duplicate line number note is output.
74169689Skan   For example, one is output after the end of an inline function,
75169689Skan   in order to prevent the line containing the inline call from
76169689Skan   being counted twice in gcov.  */
77169689SkanINSN_NOTE (REPEATED_LINE_NUMBER)
78169689Skan
79169689Skan/* The location of a variable.  */
80169689SkanINSN_NOTE (VAR_LOCATION)
81169689Skan
82169689Skan/* Record the expected value of a register at a location.  Uses
83169689Skan   NOTE_EXPECTED_VALUE; stored as (eq (reg) (const_int)).  */
84169689SkanINSN_NOTE (EXPECTED_VALUE)
85169689Skan
86169689Skan/* Record the struct for the following basic block.  Uses
87169689Skan   NOTE_BASIC_BLOCK.  FIXME: Redundant with the basic block pointer
88169689Skan   now included in every insn.  */
89169689SkanINSN_NOTE (BASIC_BLOCK)
90169689Skan
91169689Skan/* Mark the inflection point in the instruction stream where we switch
92169689Skan   between hot and cold text sections.  */
93169689SkanINSN_NOTE (SWITCH_TEXT_SECTIONS)
94169689Skan
95169689Skan#undef INSN_NOTE
96