diff options
author | zack <zack@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-08-18 22:31:03 +0000 |
---|---|---|
committer | zack <zack@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-08-18 22:31:03 +0000 |
commit | 30f4db0d0ca544491708a54ec8bb771fd697c48c (patch) | |
tree | 990ecf95198d77226788bade820093b68e1f298a /gcc/reg-notes.def | |
parent | c1877da885bfa74a7bfd47b119fe884a3d46014f (diff) | |
download | gcc-30f4db0d0ca544491708a54ec8bb771fd697c48c.tar.gz |
* insn-notes.def, reg-notes.def: New files.
* rtl.h: Use them to define enum insn_note and enum reg_note.
* rtl.c: Use them to define note_insn_name and reg_note_name.
* modulo-sched.c, sched-rgn.c, final.c: NOTE_DISABLE_SCHED_OF_BLOCK
renamed to NOTE_INSN_DISABLE_SCHED_OF_BLOCK.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@86212 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/reg-notes.def')
-rw-r--r-- | gcc/reg-notes.def | 168 |
1 files changed, 168 insertions, 0 deletions
diff --git a/gcc/reg-notes.def b/gcc/reg-notes.def new file mode 100644 index 00000000000..cb0343facd9 --- /dev/null +++ b/gcc/reg-notes.def @@ -0,0 +1,168 @@ +/* Register note definitions. + Copyright (C) 2004 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, 59 Temple Place - Suite 330, Boston, MA +02111-1307, 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_INSN_NOTE appropriately before including this file. */ + +/* Shorthand. */ +#define REG_NOTE(NAME) DEF_REG_NOTE (REG_##NAME) + +/* 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. + Data dependencies, which are the only type of LOG_LINK created by + flow, are represented by a 0 reg note kind. */ +REG_NOTE (DEP_ANTI) +REG_NOTE (DEP_OUTPUT) + +/* 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) + +/* Used to optimize rtl generated by dynamic stack allocations for + targets where SETJMP_VIA_SAVE_AREA is true. */ +REG_NOTE (SAVE_AREA) + +/* 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) + +/* Indicate calls that always returns. */ +REG_NOTE (ALWAYS_RETURN) |