1*38fd1498Szrj/* Insn note definitions.
2*38fd1498Szrj   Copyright (C) 2004-2018 Free Software Foundation, Inc.
3*38fd1498Szrj
4*38fd1498SzrjThis file is part of GCC.
5*38fd1498Szrj
6*38fd1498SzrjGCC is free software; you can redistribute it and/or modify it under
7*38fd1498Szrjthe terms of the GNU General Public License as published by the Free
8*38fd1498SzrjSoftware Foundation; either version 3, or (at your option) any later
9*38fd1498Szrjversion.
10*38fd1498Szrj
11*38fd1498SzrjGCC is distributed in the hope that it will be useful, but WITHOUT ANY
12*38fd1498SzrjWARRANTY; without even the implied warranty of MERCHANTABILITY or
13*38fd1498SzrjFITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14*38fd1498Szrjfor more details.
15*38fd1498Szrj
16*38fd1498SzrjYou should have received a copy of the GNU General Public License
17*38fd1498Szrjalong with GCC; see the file COPYING3.  If not see
18*38fd1498Szrj<http://www.gnu.org/licenses/>.  */
19*38fd1498Szrj
20*38fd1498Szrj/* This file defines all the codes that may appear in the
21*38fd1498Szrj   NOTE_LINE_NUMBER field of a NOTE insn for kinds of notes that are
22*38fd1498Szrj   not line numbers.  Source files define DEF_INSN_NOTE appropriately
23*38fd1498Szrj   before including this file.
24*38fd1498Szrj
25*38fd1498Szrj   We are slowly removing the concept of insn-chain notes from the
26*38fd1498Szrj   compiler.  Adding new codes to this file is STRONGLY DISCOURAGED.
27*38fd1498Szrj   If you think you need one, look for other ways to express what you
28*38fd1498Szrj   mean, such as register notes or bits in the basic-block structure.  */
29*38fd1498Szrj
30*38fd1498Szrj/* Shorthand.  */
31*38fd1498Szrj#define INSN_NOTE(NAME) DEF_INSN_NOTE (NOTE_INSN_##NAME)
32*38fd1498Szrj
33*38fd1498Szrj/* This note is used to get rid of an insn when it isn't safe to patch
34*38fd1498Szrj   the insn out of the chain.  */
35*38fd1498SzrjINSN_NOTE (DELETED)
36*38fd1498Szrj
37*38fd1498Szrj/* Generated in place of user-declared labels when they are deleted.  */
38*38fd1498SzrjINSN_NOTE (DELETED_LABEL)
39*38fd1498Szrj/* Similarly, but for labels that have been present in debug stmts
40*38fd1498Szrj   earlier and thus will only appear with -g.  These must use different
41*38fd1498Szrj   label namespace.  */
42*38fd1498SzrjINSN_NOTE (DELETED_DEBUG_LABEL)
43*38fd1498Szrj
44*38fd1498Szrj/* These are used to mark the beginning and end of a lexical block.
45*38fd1498Szrj   See NOTE_BLOCK and reorder_blocks.  */
46*38fd1498SzrjINSN_NOTE (BLOCK_BEG)
47*38fd1498SzrjINSN_NOTE (BLOCK_END)
48*38fd1498Szrj
49*38fd1498Szrj/* This note indicates the start of the real body of the function,
50*38fd1498Szrj   i.e. the point just after all of the parms have been moved into
51*38fd1498Szrj   their homes, etc.  */
52*38fd1498SzrjINSN_NOTE (FUNCTION_BEG)
53*38fd1498Szrj
54*38fd1498Szrj/* This marks the point immediately after the last prologue insn.  */
55*38fd1498SzrjINSN_NOTE (PROLOGUE_END)
56*38fd1498Szrj
57*38fd1498Szrj/* This marks the point immediately prior to the first epilogue insn.  */
58*38fd1498SzrjINSN_NOTE (EPILOGUE_BEG)
59*38fd1498Szrj
60*38fd1498Szrj/* These note where exception handling regions begin and end.
61*38fd1498Szrj   Uses NOTE_EH_HANDLER to identify the region in question.  */
62*38fd1498SzrjINSN_NOTE (EH_REGION_BEG)
63*38fd1498SzrjINSN_NOTE (EH_REGION_END)
64*38fd1498Szrj
65*38fd1498Szrj/* The location of a variable.  */
66*38fd1498SzrjINSN_NOTE (VAR_LOCATION)
67*38fd1498Szrj
68*38fd1498Szrj/* The beginning of a statement.  */
69*38fd1498SzrjINSN_NOTE (BEGIN_STMT)
70*38fd1498Szrj
71*38fd1498Szrj/* The entry point for an inlined function.  Its NOTE_BLOCK references
72*38fd1498Szrj   the lexical block whose abstract origin is the inlined function.  */
73*38fd1498SzrjINSN_NOTE (INLINE_ENTRY)
74*38fd1498Szrj
75*38fd1498Szrj/* Record the struct for the following basic block.  Uses
76*38fd1498Szrj   NOTE_BASIC_BLOCK.  FIXME: Redundant with the basic block pointer
77*38fd1498Szrj   now included in every insn.  NOTE: If there's no CFG anymore, in other words,
78*38fd1498Szrj   if BLOCK_FOR_INSN () == NULL, NOTE_BASIC_BLOCK cannot be considered reliable
79*38fd1498Szrj   anymore.  */
80*38fd1498SzrjINSN_NOTE (BASIC_BLOCK)
81*38fd1498Szrj
82*38fd1498Szrj/* Mark the inflection point in the instruction stream where we switch
83*38fd1498Szrj   between hot and cold text sections.  */
84*38fd1498SzrjINSN_NOTE (SWITCH_TEXT_SECTIONS)
85*38fd1498Szrj
86*38fd1498Szrj/* When emitting dwarf2 frame information, contains a directive that
87*38fd1498Szrj   should be emitted.  */
88*38fd1498SzrjINSN_NOTE (CFI)
89*38fd1498Szrj
90*38fd1498Szrj/* When emitting dwarf2 frame information, contains the number of a debug
91*38fd1498Szrj   label that should be emitted.  */
92*38fd1498SzrjINSN_NOTE (CFI_LABEL)
93*38fd1498Szrj
94*38fd1498Szrj/* This note indicates that the function context must be updated if
95*38fd1498Szrj   the Setjmp/Longjmp exception mechanism is used.  */
96*38fd1498SzrjINSN_NOTE (UPDATE_SJLJ_CONTEXT)
97*38fd1498Szrj
98*38fd1498Szrj#undef INSN_NOTE
99