xref: /openbsd/gnu/gcc/gcc/insn-notes.def (revision 404b540a)
1*404b540aSrobert/* Insn note definitions.
2*404b540aSrobert   Copyright (C) 2004, 2005 Free Software Foundation, Inc.
3*404b540aSrobert
4*404b540aSrobertThis file is part of GCC.
5*404b540aSrobert
6*404b540aSrobertGCC is free software; you can redistribute it and/or modify it under
7*404b540aSrobertthe terms of the GNU General Public License as published by the Free
8*404b540aSrobertSoftware Foundation; either version 2, or (at your option) any later
9*404b540aSrobertversion.
10*404b540aSrobert
11*404b540aSrobertGCC is distributed in the hope that it will be useful, but WITHOUT ANY
12*404b540aSrobertWARRANTY; without even the implied warranty of MERCHANTABILITY or
13*404b540aSrobertFITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14*404b540aSrobertfor more details.
15*404b540aSrobert
16*404b540aSrobertYou should have received a copy of the GNU General Public License
17*404b540aSrobertalong with GCC; see the file COPYING.  If not, write to the Free
18*404b540aSrobertSoftware Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
19*404b540aSrobert02110-1301, USA.  */
20*404b540aSrobert
21*404b540aSrobert/* This file defines all the codes that may appear in the
22*404b540aSrobert   NOTE_LINE_NUMBER field of a NOTE insn for kinds of notes that are
23*404b540aSrobert   not line numbers.  Source files define DEF_INSN_NOTE appropriately
24*404b540aSrobert   before including this file.
25*404b540aSrobert
26*404b540aSrobert   We are slowly removing the concept of insn-chain notes from the
27*404b540aSrobert   compiler.  Adding new codes to this file is STRONGLY DISCOURAGED.
28*404b540aSrobert   If you think you need one, look for other ways to express what you
29*404b540aSrobert   mean, such as register notes or bits in the basic-block structure.  */
30*404b540aSrobert
31*404b540aSrobert/* Shorthand.  */
32*404b540aSrobert#define INSN_NOTE(NAME) DEF_INSN_NOTE (NOTE_INSN_##NAME)
33*404b540aSrobert
34*404b540aSrobert/* This note is used to get rid of an insn when it isn't safe to patch
35*404b540aSrobert   the insn out of the chain.  */
36*404b540aSrobertINSN_NOTE (DELETED)
37*404b540aSrobert
38*404b540aSrobert/* Generated in place of user-declared labels when they are deleted.  */
39*404b540aSrobertINSN_NOTE (DELETED_LABEL)
40*404b540aSrobert
41*404b540aSrobert/* These are used to mark the beginning and end of a lexical block.
42*404b540aSrobert   See NOTE_BLOCK and reorder_blocks.  */
43*404b540aSrobertINSN_NOTE (BLOCK_BEG)
44*404b540aSrobertINSN_NOTE (BLOCK_END)
45*404b540aSrobert
46*404b540aSrobert/* These mark the extremes of a loop.  */
47*404b540aSrobertINSN_NOTE (LOOP_BEG)
48*404b540aSrobertINSN_NOTE (LOOP_END)
49*404b540aSrobert
50*404b540aSrobert/* This note indicates the start of the real body of the function,
51*404b540aSrobert   i.e. the point just after all of the parms have been moved into
52*404b540aSrobert   their homes, etc.  */
53*404b540aSrobertINSN_NOTE (FUNCTION_BEG)
54*404b540aSrobert
55*404b540aSrobert/* This kind of note is generated at the end of the function body,
56*404b540aSrobert   just before the return insn or return label.  In an optimizing
57*404b540aSrobert   compilation it is deleted by the first jump optimization, after
58*404b540aSrobert   enabling that optimizer to determine whether control can fall
59*404b540aSrobert   off the end of the function body without a return statement.  */
60*404b540aSrobertINSN_NOTE (FUNCTION_END)
61*404b540aSrobert
62*404b540aSrobert/* This marks the point immediately after the last prologue insn.  */
63*404b540aSrobertINSN_NOTE (PROLOGUE_END)
64*404b540aSrobert
65*404b540aSrobert/* This marks the point immediately prior to the first epilogue insn.  */
66*404b540aSrobertINSN_NOTE (EPILOGUE_BEG)
67*404b540aSrobert
68*404b540aSrobert/* These note where exception handling regions begin and end.
69*404b540aSrobert   Uses NOTE_EH_HANDLER to identify the region in question.  */
70*404b540aSrobertINSN_NOTE (EH_REGION_BEG)
71*404b540aSrobertINSN_NOTE (EH_REGION_END)
72*404b540aSrobert
73*404b540aSrobert/* Generated whenever a duplicate line number note is output.
74*404b540aSrobert   For example, one is output after the end of an inline function,
75*404b540aSrobert   in order to prevent the line containing the inline call from
76*404b540aSrobert   being counted twice in gcov.  */
77*404b540aSrobertINSN_NOTE (REPEATED_LINE_NUMBER)
78*404b540aSrobert
79*404b540aSrobert/* The location of a variable.  */
80*404b540aSrobertINSN_NOTE (VAR_LOCATION)
81*404b540aSrobert
82*404b540aSrobert/* Record the expected value of a register at a location.  Uses
83*404b540aSrobert   NOTE_EXPECTED_VALUE; stored as (eq (reg) (const_int)).  */
84*404b540aSrobertINSN_NOTE (EXPECTED_VALUE)
85*404b540aSrobert
86*404b540aSrobert/* Record the struct for the following basic block.  Uses
87*404b540aSrobert   NOTE_BASIC_BLOCK.  FIXME: Redundant with the basic block pointer
88*404b540aSrobert   now included in every insn.  */
89*404b540aSrobertINSN_NOTE (BASIC_BLOCK)
90*404b540aSrobert
91*404b540aSrobert/* Mark the inflection point in the instruction stream where we switch
92*404b540aSrobert   between hot and cold text sections.  */
93*404b540aSrobertINSN_NOTE (SWITCH_TEXT_SECTIONS)
94*404b540aSrobert
95*404b540aSrobert#undef INSN_NOTE
96