From 9fb6b620f09541d0f00e1e2f34de5401b716741f Mon Sep 17 00:00:00 2001 From: Steven Bosscher Date: Mon, 8 Apr 2013 19:59:57 +0000 Subject: [PATCH] rtl.texi (sequence): Rewrite documentation to match the current use of SEQUENCE rtl objects. * doc/rtl.texi (sequence): Rewrite documentation to match the current use of SEQUENCE rtl objects. * rtl.def (SEQUENCE): Likewise. * doc/rtl.texi (NOTE_INSN_EH_REGION_BEG, NOTE_INSN_EH_REGION_END): Update documentation. (NOTE_INSN_LOOP_BEG, NOTE_INSN_LOOP_END, NOTE_INSN_LOOP_CONT, NOTE_INSN_LOOP_VTOP): Remove documentation for non-existing notes. * reg-notes.def (REG_EH_CONTEXT): Remove unused note. From-SVN: r197611 --- gcc/ChangeLog | 13 ++++++++++++ gcc/doc/rtl.texi | 52 +++++++++++++++++------------------------------ gcc/reg-notes.def | 5 ----- gcc/rtl.def | 22 ++++++++++++++++---- 4 files changed, 50 insertions(+), 42 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a7ca0455c5c5..f2d2a610478b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,16 @@ +2013-04-08 Steven Bosscher + + * doc/rtl.texi (sequence): Rewrite documentation to match the + current use of SEQUENCE rtl objects. + * rtl.def (SEQUENCE): Likewise. + + * doc/rtl.texi (NOTE_INSN_EH_REGION_BEG, NOTE_INSN_EH_REGION_END): + Update documentation. + (NOTE_INSN_LOOP_BEG, NOTE_INSN_LOOP_END, NOTE_INSN_LOOP_CONT, + NOTE_INSN_LOOP_VTOP): Remove documentation for non-existing notes. + + * reg-notes.def (REG_EH_CONTEXT): Remove unused note. + 2013-04-08 Teresa Johnson * basic-block.h (GCOV_COMPUTE_SCALE): Define. diff --git a/gcc/doc/rtl.texi b/gcc/doc/rtl.texi index a9890f88ee75..8829b0e3493a 100644 --- a/gcc/doc/rtl.texi +++ b/gcc/doc/rtl.texi @@ -3099,17 +3099,10 @@ side-effects. @findex sequence @item (sequence [@var{insns} @dots{}]) -Represents a sequence of insns. Each of the @var{insns} that appears -in the vector is suitable for appearing in the chain of insns, so it -must be an @code{insn}, @code{jump_insn}, @code{call_insn}, -@code{code_label}, @code{barrier} or @code{note}. - -A @code{sequence} RTX is never placed in an actual insn during RTL -generation. It represents the sequence of insns that result from a -@code{define_expand} @emph{before} those insns are passed to -@code{emit_insn} to insert them in the chain of insns. When actually -inserted, the individual sub-insns are separated out and the -@code{sequence} is forgotten. +Represents a sequence of insns. If a @code{sequence} appears in the +chain of insns, then each of the @var{insns} that appears in the sequence +must be suitable for appearing in the chain of insns, i.e. must satisfy +the @code{INSN_P} predicate. After delay-slot scheduling is completed, an insn and all the insns that reside in its delay slots are grouped together into a @code{sequence}. @@ -3123,6 +3116,19 @@ the effect of the insns in the delay slots. In such a case, the branch and should be executed only if the branch is taken; otherwise the insn should be executed only if the branch is not taken. @xref{Delay Slots}. + +Some back ends also use @code{sequence} objects for purposes other than +delay-slot groups. This is not supported in the common parts of the +compiler, which treat such sequences as delay-slot groups. + +DWARF2 Call Frame Address (CFA) adjustments are sometimes also expressed +using @code{sequence} objects as the value of a @code{RTX_FRAME_RELATED_P} +note. This only happens if the CFA adjustments cannot be easily derived +from the pattern of the instruction to which the note is attached. In +such cases, the value of the note is used instead of best-guesing the +semantics of the instruction. The back end can attach notes containing +a @code{sequence} of @code{set} patterns that express the effect of the +parent instruction. @end table These expression codes appear in place of a side effect, as the body of @@ -3602,28 +3608,8 @@ of debugging information. @item NOTE_INSN_EH_REGION_BEG @itemx NOTE_INSN_EH_REGION_END These types of notes indicate the position of the beginning and end of a -level of scoping for exception handling. @code{NOTE_BLOCK_NUMBER} -identifies which @code{CODE_LABEL} or @code{note} of type -@code{NOTE_INSN_DELETED_LABEL} is associated with the given region. - -@findex NOTE_INSN_LOOP_BEG -@findex NOTE_INSN_LOOP_END -@item NOTE_INSN_LOOP_BEG -@itemx NOTE_INSN_LOOP_END -These types of notes indicate the position of the beginning and end -of a @code{while} or @code{for} loop. They enable the loop optimizer -to find loops quickly. - -@findex NOTE_INSN_LOOP_CONT -@item NOTE_INSN_LOOP_CONT -Appears at the place in a loop that @code{continue} statements jump to. - -@findex NOTE_INSN_LOOP_VTOP -@item NOTE_INSN_LOOP_VTOP -This note indicates the place in a loop where the exit test begins for -those loops in which the exit test has been duplicated. This position -becomes another virtual start of the loop when considering loop -invariants. +level of scoping for exception handling. @code{NOTE_EH_HANDLER} +identifies which region is associated with these notes. @findex NOTE_INSN_FUNCTION_BEG @item NOTE_INSN_FUNCTION_BEG diff --git a/gcc/reg-notes.def b/gcc/reg-notes.def index db61c092aab3..3b1d27ca8a7d 100644 --- a/gcc/reg-notes.def +++ b/gcc/reg-notes.def @@ -172,11 +172,6 @@ REG_NOTE (CFA_WINDOW_SAVE) the rest of the compiler as a CALL_INSN. */ REG_NOTE (CFA_FLUSH_QUEUE) -/* 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 diff --git a/gcc/rtl.def b/gcc/rtl.def index 5da3dd3ec007..f8aea32b397d 100644 --- a/gcc/rtl.def +++ b/gcc/rtl.def @@ -102,10 +102,24 @@ DEF_RTL_EXPR(EXPR_LIST, "expr_list", "ee", RTX_EXTRA) The insns are represented in print by their uids. */ DEF_RTL_EXPR(INSN_LIST, "insn_list", "ue", RTX_EXTRA) -/* SEQUENCE appears in the result of a `gen_...' function - for a DEFINE_EXPAND that wants to make several insns. - Its elements are the bodies of the insns that should be made. - `emit_insn' takes the SEQUENCE apart and makes separate insns. */ +/* SEQUENCE is used in late passes of the compiler to group insns for + one reason or another. + + For example, after delay slot filling, branch instructions with filled + delay slots are represented as a SEQUENCE of length 1 + n_delay_slots, + with the branch instruction in XEXPVEC(seq, 0, 0) and the instructions + occupying the delay slots in the remaining XEXPVEC slots. + + Another place where a SEQUENCE may appear, is in REG_FRAME_RELATED_EXPR + notes, to express complex operations that are not obvious from the insn + to which the REG_FRAME_RELATED_EXPR note is attached. In this usage of + SEQUENCE, the sequence vector slots do not hold real instructions but + only pseudo-instructions that can be translated to DWARF CFA expressions. + + Some back ends also use SEQUENCE to group insns in bundles. + + Much of the compiler infrastructure is not prepared to handle SEQUENCE + objects. Only passes after pass_free_cfg are expected to handle them. */ DEF_RTL_EXPR(SEQUENCE, "sequence", "E", RTX_EXTRA) /* Represents a non-global base address. This is only used in alias.c. */