Update internal documentation to describe that DONE and FAIL
also apply to define_split and define_peephole2. * doc/md.texi (define_split): Document DONE and FAIL. (define_peephole2): Ditto. From-SVN: r262479
This commit is contained in:
parent
5840e3b8ff
commit
582d1f9049
2 changed files with 56 additions and 0 deletions
|
@ -1,3 +1,8 @@
|
|||
2018-07-06 Paul Koning <ni1d@arrl.net>
|
||||
|
||||
* doc/md.texi (define_split): Document DONE and FAIL.
|
||||
(define_peephole2): Ditto.
|
||||
|
||||
2018-07-05 Jeff Law <law@redhat.com>
|
||||
|
||||
PR tree-optimization/86010
|
||||
|
|
|
@ -8060,6 +8060,30 @@ those in @code{define_expand}, however, these statements must not
|
|||
generate any new pseudo-registers. Once reload has completed, they also
|
||||
must not allocate any space in the stack frame.
|
||||
|
||||
There are two special macros defined for use in the preparation statements:
|
||||
@code{DONE} and @code{FAIL}. Use them with a following semicolon,
|
||||
as a statement.
|
||||
|
||||
@table @code
|
||||
|
||||
@findex DONE
|
||||
@item DONE
|
||||
Use the @code{DONE} macro to end RTL generation for the splitter. The
|
||||
only RTL insns generated as replacement for the matched input insn will
|
||||
be those already emitted by explicit calls to @code{emit_insn} within
|
||||
the preparation statements; the replacement pattern is not used.
|
||||
|
||||
@findex FAIL
|
||||
@item FAIL
|
||||
Make the @code{define_split} fail on this occasion. When a @code{define_split}
|
||||
fails, it means that the splitter was not truly available for the inputs
|
||||
it was given, and the input insn will not be split.
|
||||
@end table
|
||||
|
||||
If the preparation falls through (invokes neither @code{DONE} nor
|
||||
@code{FAIL}), then the @code{define_split} uses the replacement
|
||||
template.
|
||||
|
||||
Patterns are matched against @var{insn-pattern} in two different
|
||||
circumstances. If an insn needs to be split for delay slot scheduling
|
||||
or insn scheduling, the insn is already known to be valid, which means
|
||||
|
@ -8615,6 +8639,33 @@ so here's a silly made-up example:
|
|||
"")
|
||||
@end smallexample
|
||||
|
||||
There are two special macros defined for use in the preparation statements:
|
||||
@code{DONE} and @code{FAIL}. Use them with a following semicolon,
|
||||
as a statement.
|
||||
|
||||
@table @code
|
||||
|
||||
@findex DONE
|
||||
@item DONE
|
||||
Use the @code{DONE} macro to end RTL generation for the peephole. The
|
||||
only RTL insns generated as replacement for the matched input insn will
|
||||
be those already emitted by explicit calls to @code{emit_insn} within
|
||||
the preparation statements; the replacement pattern is not used.
|
||||
|
||||
@findex FAIL
|
||||
@item FAIL
|
||||
Make the @code{define_peephole2} fail on this occasion. When a @code{define_peephole2}
|
||||
fails, it means that the replacement was not truly available for the
|
||||
particular inputs it was given. In that case, GCC may still apply a
|
||||
later @code{define_peephole2} that also matches the given insn pattern.
|
||||
(Note that this is different from @code{define_split}, where @code{FAIL}
|
||||
prevents the input insn from being split at all.)
|
||||
@end table
|
||||
|
||||
If the preparation falls through (invokes neither @code{DONE} nor
|
||||
@code{FAIL}), then the @code{define_peephole2} uses the replacement
|
||||
template.
|
||||
|
||||
@noindent
|
||||
If we had not added the @code{(match_dup 4)} in the middle of the input
|
||||
sequence, it might have been the case that the register we chose at the
|
||||
|
|
Loading…
Add table
Reference in a new issue