mirror of git://gcc.gnu.org/git/gcc.git
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
This commit is contained in:
parent
a2d0800a41
commit
9fb6b620f0
|
|
@ -1,3 +1,16 @@
|
||||||
|
2013-04-08 Steven Bosscher <steven@gcc.gnu.org>
|
||||||
|
|
||||||
|
* 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 <tejohnson@google.com>
|
2013-04-08 Teresa Johnson <tejohnson@google.com>
|
||||||
|
|
||||||
* basic-block.h (GCOV_COMPUTE_SCALE): Define.
|
* basic-block.h (GCOV_COMPUTE_SCALE): Define.
|
||||||
|
|
|
||||||
|
|
@ -3099,17 +3099,10 @@ side-effects.
|
||||||
|
|
||||||
@findex sequence
|
@findex sequence
|
||||||
@item (sequence [@var{insns} @dots{}])
|
@item (sequence [@var{insns} @dots{}])
|
||||||
Represents a sequence of insns. Each of the @var{insns} that appears
|
Represents a sequence of insns. If a @code{sequence} appears in the
|
||||||
in the vector is suitable for appearing in the chain of insns, so it
|
chain of insns, then each of the @var{insns} that appears in the sequence
|
||||||
must be an @code{insn}, @code{jump_insn}, @code{call_insn},
|
must be suitable for appearing in the chain of insns, i.e. must satisfy
|
||||||
@code{code_label}, @code{barrier} or @code{note}.
|
the @code{INSN_P} predicate.
|
||||||
|
|
||||||
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.
|
|
||||||
|
|
||||||
After delay-slot scheduling is completed, an insn and all the insns that
|
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}.
|
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 branch and should be executed only if the branch is taken; otherwise
|
||||||
the insn should be executed only if the branch is not taken.
|
the insn should be executed only if the branch is not taken.
|
||||||
@xref{Delay Slots}.
|
@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
|
@end table
|
||||||
|
|
||||||
These expression codes appear in place of a side effect, as the body of
|
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
|
@item NOTE_INSN_EH_REGION_BEG
|
||||||
@itemx NOTE_INSN_EH_REGION_END
|
@itemx NOTE_INSN_EH_REGION_END
|
||||||
These types of notes indicate the position of the beginning and end of a
|
These types of notes indicate the position of the beginning and end of a
|
||||||
level of scoping for exception handling. @code{NOTE_BLOCK_NUMBER}
|
level of scoping for exception handling. @code{NOTE_EH_HANDLER}
|
||||||
identifies which @code{CODE_LABEL} or @code{note} of type
|
identifies which region is associated with these notes.
|
||||||
@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.
|
|
||||||
|
|
||||||
@findex NOTE_INSN_FUNCTION_BEG
|
@findex NOTE_INSN_FUNCTION_BEG
|
||||||
@item NOTE_INSN_FUNCTION_BEG
|
@item NOTE_INSN_FUNCTION_BEG
|
||||||
|
|
|
||||||
|
|
@ -172,11 +172,6 @@ REG_NOTE (CFA_WINDOW_SAVE)
|
||||||
the rest of the compiler as a CALL_INSN. */
|
the rest of the compiler as a CALL_INSN. */
|
||||||
REG_NOTE (CFA_FLUSH_QUEUE)
|
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
|
/* Indicates what exception region an INSN belongs in. This is used
|
||||||
to indicate what region to which a call may throw. REGION 0
|
to indicate what region to which a call may throw. REGION 0
|
||||||
indicates that a call cannot throw at all. REGION -1 indicates
|
indicates that a call cannot throw at all. REGION -1 indicates
|
||||||
|
|
|
||||||
22
gcc/rtl.def
22
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. */
|
The insns are represented in print by their uids. */
|
||||||
DEF_RTL_EXPR(INSN_LIST, "insn_list", "ue", RTX_EXTRA)
|
DEF_RTL_EXPR(INSN_LIST, "insn_list", "ue", RTX_EXTRA)
|
||||||
|
|
||||||
/* SEQUENCE appears in the result of a `gen_...' function
|
/* SEQUENCE is used in late passes of the compiler to group insns for
|
||||||
for a DEFINE_EXPAND that wants to make several insns.
|
one reason or another.
|
||||||
Its elements are the bodies of the insns that should be made.
|
|
||||||
`emit_insn' takes the SEQUENCE apart and makes separate insns. */
|
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)
|
DEF_RTL_EXPR(SEQUENCE, "sequence", "E", RTX_EXTRA)
|
||||||
|
|
||||||
/* Represents a non-global base address. This is only used in alias.c. */
|
/* Represents a non-global base address. This is only used in alias.c. */
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue